

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 彙總分析規則
<a name="analysis-rules-aggregation"></a>

在 中 AWS Clean Rooms，*彙總分析規則*會沿著選用維度使用 COUNT、SUM 和/或 AVG 函數產生彙總統計資料。當彙總分析規則新增至設定的資料表時，可讓可查詢的成員在設定的資料表上執行查詢。

彙總分析規則支援行銷活動規劃、媒體觸及、頻率測量和歸因等使用案例。

支援的查詢結構和語法在 中定義[彙總查詢結構和語法](#agg-query-structure-syntax)。

中定義的分析規則參數[彙總分析規則 - 查詢控制項](#agg-query-controls)包括查詢控制項和查詢結果控制項。其查詢控制項包含要求已設定資料表加入至少一個由成員擁有且可直接或暫時查詢的已設定資料表的能力。此要求可讓您確保查詢在資料表及其交集 (INNERJOIN) 上執行。

## 彙總查詢結構和語法
<a name="agg-query-structure-syntax"></a>

具有彙總分析規則之資料表的查詢必須遵循下列語法。

```
--select_aggregate_function_expression
SELECT 
aggregation_function(column_name) [[AS] column_alias ] [, ...]

 --select_grouping_column_expression                        
  [, {column_name|scalar_function(arguments)} [[AS] column_alias ]][, ...]   

--table_expression
FROM table_name [[AS] table_alias ]
  [[INNER] JOIN table_name [[AS] table_alias] ON join_condition] [...]

--where_expression
[WHERE where_condition]          

--group_by_expression                          
[GROUP BY {column_name|scalar_function(arguments)}, ...]]                  

--having_expression
[HAVING having_condition]                               

--order_by_expression    
[ORDER BY {column_name|scalar_function(arguments)} [{ASC|DESC}]] [,...]]
```

下表說明上述語法中列出的每個表達式。


| 表達式 | 定義 | 範例 | 
| --- | --- | --- | 
| select\$1aggregate\$1function\$1expression |  逗號分隔清單，其中包含下列表達式： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/clean-rooms/latest/userguide/analysis-rules-aggregation.html)  `select_aggregation_function_expression` 中必須至少有一個 `select_aggregate_expression`。   |  `SELECT SUM(PRICE), user_segment`  | 
| select\$1aggregation\$1function\$1expression |  套用到一或多個資料欄的一或多個支援彙總函數。僅允許資料欄做為彙總函數的引數。  `select_aggregation_function_expression` 中必須至少有一個 `select_aggregate_expression`。   |  `AVG(PRICE)` `COUNT(DISTINCT user_id)`  | 
| select\$1grouping\$1column\$1expression |  可使用下列項目包含任何表達式的表達式： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/clean-rooms/latest/userguide/analysis-rules-aggregation.html)  `select_aggregate_expression` 可以使用或不使用 `AS` 參數來別名資料欄。如需詳細資訊，請參閱 [AWS Clean Rooms SQL 參考](https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html)。   |  `TRUNC(timestampColumn)`  `UPPER(campaignName)`   | 
| table\$1expression |  資料表或資料表聯結，以 連接聯結條件式表達式`join_condition`。 `join_condition` 傳回布林值。 `table_expression` 支援： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/clean-rooms/latest/userguide/analysis-rules-aggregation.html)  |  <pre>FROM consumer_table <br />INNER JOIN provider_table<br />ON<br />consumer_table.identifier1 = provider_table.identifier1<br />AND<br />consumer_table.identifier2 = provider_table.identifier2</pre>  | 
| where\$1expression |  傳回布林值的條件式表達式。它可能包含下列項目： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/clean-rooms/latest/userguide/analysis-rules-aggregation.html) 支援的比較條件為 (`=, >, <, <=, >=, <>, !=, NOT, IN, NOT IN, LIKE, IS NULL, IS NOT NULL`)。 支援的邏輯運算子為 (`AND, OR`)。 `where_expression` 為選用。  |  `WHERE where_condition` `WHERE price > 100`  `WHERE TRUNC(timestampColumn) = '1/1/2022'`  `WHERE timestampColumn = timestampColumn2 - 14`   | 
| group\$1by\$1expression |  符合 需求的逗號分隔表達式清單`select_grouping_column_expression`。  |  `GROUP BY TRUNC(timestampColumn), UPPER(campaignName), segment`  | 
| having\$1expression |  傳回布林值的條件式表達式。它們具有套用至單一資料欄 （例如，`SUM(price)`) 的支援彙總函數，並與數值常值進行比較。 支援的條件為 (`=, >, <, <=, >=, <>, !=`)。 支援的邏輯運算子為 (`AND, OR`)。 `having_expression` 為選用。  |  `HAVING SUM(SALES) > 500`  | 
| order\$1by\$1expression |  以逗號分隔的表達式清單，與`select_aggregate_expression`先前定義的相同需求相容。 `order_by_expression` 為選用。  `order_by_expression` 允許 `ASC` 和 `DESC` 參數。如需詳細資訊，請參閱 [AWS Clean Rooms SQL 參考](https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html)中的 ASC DESC 參數。   |  `ORDER BY SUM(SALES), UPPER(campaignName)`  | 

對於彙總查詢結構和語法，請注意下列事項：
+ 不支援 以外的 SQL SELECT 命令。
+ 不支援子查詢和常用資料表表達式 （例如 WITH)。
+ 不支援合併多個查詢的運算子 （例如 UNION)。
+ TOP不支援 LIMIT、 和 OFFSET 參數。

## 彙總分析規則 - 查詢控制項
<a name="agg-query-controls"></a>

透過彙總查詢控制項，您可以控制資料表中的資料欄用於查詢資料表的方式。例如，您可以控制哪些資料欄用於聯結、哪些資料欄可以計數，或哪些資料欄可用於 WHERE 陳述式。

以下各節說明每個控制項。

**Topics**
+ [彙總控制項](#agg-functions)
+ [聯結控制項](#join-controls)
+ [維度控制](#dimension-controls)
+ [純量函數](#scalar-functions)

### 彙總控制項
<a name="agg-functions"></a>

透過使用*彙總控制項*，您可以定義要允許哪些彙總函數，以及必須套用哪些資料欄。彙總函數可用於 SELECT、 HAVING和 ORDERBY表達式。


| 控制項 | 定義 | Usage | 
| --- | --- | --- | 
| aggregateColumns | 您允許在彙總函數中使用的已設定資料表資料欄資料欄。 |  `aggregateColumns` 可在 SELECT、 HAVING和 ORDERBY表達式中的彙總函數內使用。 有些 `aggregateColumns`也可以分類為 `joinColumn`（稍後定義）。 指定的 也`aggregateColumn`無法分類為 `dimensionColumn`（稍後定義）。  | 
| function | 您允許在 上使用的 COUNT、SUM 和 AVG 函數aggregateColumns。 |  `function` 可以套用至`aggregateColumns`與其相關聯的 。  | 

### 聯結控制項
<a name="join-controls"></a>

子`JOIN`句用於根據兩個或多個資料表之間的相關資料欄來結合資料列。

您可以使用*聯結控制項*來控制資料表如何聯結至 中的其他資料表`table_expression`。 AWS Clean Rooms 僅支援 INNER JOIN。 INNERJOIN陳述式只能使用在分析規則`joinColumn`中明確分類為 的資料欄，但需遵守您定義的控制項。

INNER JOIN 必須在`joinColumn`您設定的資料表和協同合作中`joinColumn`另一個設定的資料表的 上操作。您決定資料表中的哪些資料欄可以用作 `joinColumn`。

子ON句中的每個相符條件都需要在兩個資料欄之間使用等式比較條件 (`=`)。

ON 子句中的多個相符條件可以是：
+ 使用`AND`邏輯運算子合併
+ 使用`OR`邏輯運算子分隔

**注意**  
所有JOIN相符條件都必須符合 每一端的一列JOIN。由 `OR`或 `AND` 邏輯運算子連接的所有條件也必須遵守此要求。

以下是具有`AND`邏輯運算子的查詢範例。

```
SELECT some_col, other_col 
FROM table1 
    JOIN table2 
    ON table1.id = table2.id AND table1.name = table2.name
```

以下是具有`OR`邏輯運算子的查詢範例。

```
SELECT some_col, other_col 
FROM table1 
    JOIN table2 
    ON table1.id = table2.id OR table1.name = table2.name
```


| 控制項 | 定義 | Usage | 
| --- | --- | --- | 
| joinColumns | 您想要允許可在 INNERJOIN陳述式中使用之成員的資料欄 （如果有的話）。 |  特定 `joinColumn`也可以分類為 `aggregateColumn`（請參閱 [彙總控制項](#agg-functions))。 相同的資料欄不能同時使用為 `joinColumn`和 `dimensionColumns`（請參閱下文）。 除非它也被分類為 `aggregateColumn`，否則 `joinColumn` 無法在查詢的任何其他部分中使用INNERJOIN。  | 
| joinRequired | 控制是否需要INNERJOIN具有可查詢之成員所設定資料表的 。 |  如果您啟用此參數，INNERJOIN則需要 。如果您未啟用此參數， INNERJOIN是選用的。 假設您啟用此參數，可以查詢的成員需要在 INNER 中包含他們擁有的資料表JOIN。他們必須JOIN直接或暫時使用您的資料表 （也就是，將他們的資料表加入另一個資料表，而資料表本身會加入您的資料表）。  | 

以下是可轉移性的範例。

```
ON 
my_table.identifer = third_party_table.identifier
....
ON
third_party_table.identifier = member_who_can_query_table.id
```

**注意**  
可以查詢的成員也可以使用 `joinRequired` 參數。在這種情況下，查詢必須與至少另一個資料表聯結其資料表。

### 維度控制
<a name="dimension-controls"></a>

*維度控制項*控制可篩選、分組或彙總彙總資料欄的資料欄。


| 控制項 | 定義 | Usage | 
| --- | --- | --- | 
| dimensionColumns |  您允許可在 SELECT、BY、 和 中查詢使用之成員的資料欄 WHERE GROUP （如果有）ORDERBY。  |  `dimensionColumn` 可用於 SELECT(`select_grouping_column_expression`)BY、、 WHERE GROUP 和 ORDER BY。 相同的資料欄不能同時是 `dimensionColumn`、 `joinColumn`和/或 `aggregateColumn`。  | 

### 純量函數
<a name="scalar-functions"></a>

*純量函數*控制哪些純量函數可用於維度資料欄。


| 控制項 | 定義 | Usage | 
| --- | --- | --- | 
| scalarFunctions |  可在查詢`dimensionColumns`中使用的純量函數。  |  指定您允許 （例如，) 套用至 的純量函數 （如果有的話CAST)`dimensionColumns`。 純量函數無法用於其他函數之上或其他函數內。純量函數的引數可以是資料欄、字串常值或數值常值。  | 

支援下列純量函數：
+ 數學函數 – ABS、CEILING、FLOOR、LOG、LN、ROUND、SQRT
+ 資料類型格式化函數 – CAST, CONVERT, TO\$1CHAR, TO\$1DATE, TO\$1NUMBER, TO\$1TIMESTAMP
+ 字串函數 – LOWER、UPPER、TRIM、RTRIM、SUBSTRING
  + 對於 RTRIM，不允許要修剪的自訂字元集。
+ 條件式表達式 – COALESCE
+ 日期函數 – EXTRACT、GETDATE、CURRENT\$1DATE、DATEADD
+ 其他 函數 – TRUNC

如需詳細資訊，請參閱 [AWS Clean Rooms SQL 參考](https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html)。

## 彙總分析規則 - 查詢結果控制
<a name="agg-query-results-controls"></a>

使用彙總查詢結果控制項，您可以透過指定每個輸出資料列必須符合的一或多個條件來控制傳回的結果。 AWS Clean Rooms 支援 形式的彙總限制`COUNT (DISTINCT column) >= X`。此表單要求每一列至少從您設定的資料表彙總 X 個不同的值 （例如，最低數量的不同`user_id`值）。即使提交的查詢本身未使用指定的資料欄，也會自動強制執行此最低閾值。它們會從協同合作中每個成員的已設定資料表，在查詢中的每個已設定資料表中集體強制執行。

每個設定的資料表在其分析規則中必須至少有一個彙總限制。設定的資料表擁有者可以新增多個 `columnName`和相關聯的 `minimum`，而且它們會集體強制執行。

### 彙總限制
<a name="agg-constraints"></a>

*彙總限制*會控制查詢結果中傳回的資料列。若要傳回，資料列必須符合彙總限制中指定之每個資料欄中指定的相異值下限。即使未在查詢或分析規則的其他部分中明確提及資料欄，此要求也適用。


| 控制項 | 定義 | Usage | 
| --- | --- | --- | 
| columnName |  `aggregateColumn` 用於每個輸出資料列必須符合的條件的 。  |  可以是已設定資料表中的任何資料欄。  | 
| minimum |  `aggregateColumn` 輸出資料列必須擁有的關聯 （例如 COUNT DISTINCT) 之相異值的最小數量，才能在查詢結果中傳回。  |  值必須至少`minimum`為 2。  | 

## 彙總分析規則結構
<a name="agg-analysis-rule-template"></a>

下列範例顯示彙總分析規則的預先定義結構。

在下列範例中， *`MyTable`*是指您的資料表。您可以將每個*使用者輸入預留位置*取代為您自己的資訊。

```
{
  "aggregateColumns": [
    {
      "columnNames": [MyTable column names], "function": [Allowed Agg Functions]
    },
  ],
  "joinRequired": ["QUERY_RUNNER"],  
  "joinColumns": [MyTable column names],
  "dimensionColumns": [MyTable column names],
  "scalarFunctions": [Allowed Scalar functions],
  "outputConstraints": [
    {
      "columnName": [MyTable column names], "minimum": [Numeric value] 
    },
  ]
}
```

## 彙總分析規則 - 範例
<a name="agg-analysis-rule-example"></a>

下列範例示範兩家公司如何使用彙總分析 AWS Clean Rooms 協作。

A 公司有客戶和銷售資料。A 公司有興趣了解產品退回活動。B 公司是 A 公司的零售商之一，並具有傳回資料。B 公司對客戶也有對 A 公司有用的客群屬性 （例如，購買相關產品、使用零售商的客戶服務）。B 公司不想提供資料列層級的客戶傳回資料和屬性資訊。B 公司只想為 A 公司啟用一組查詢，以最低彙總閾值取得重疊客戶的彙總統計資料。

A 公司和 B 公司決定協同合作，讓 A 公司了解產品退回活動，並在 B 公司和其他管道提供更好的產品。

若要建立協同合作並執行彙總分析，公司會執行下列動作：

1. A 公司建立協同合作並建立成員資格。協同合作讓 B 公司成為協同合作中的另一個成員。公司 A 會在協同合作中啟用查詢記錄，並在其帳戶中啟用查詢記錄。

1. B 公司在協同合作中建立成員資格。它在其帳戶中啟用查詢記錄。

1. 公司 A 會建立銷售設定的資料表。

1. A 公司將下列彙總分析規則新增至銷售設定的資料表。

   ```
   {
     "aggregateColumns": [
       {
         "columnNames": [
           "identifier"
         ],
         "function": "COUNT_DISTINCT"
       },
       {
         "columnNames": [
           "purchases"
         ],
         "function": "AVG"
       },
       {
         "columnNames": [
           "purchases"
         ],
         "function": "SUM"
       }
     ],
     "joinColumns": [
       "hashedemail"
     ],
     "dimensionColumns": [
       "demoseg",
       "purchasedate",
       "productline"
     ],
     "scalarFunctions": [
       "CAST",
       "COALESCE",
       "TRUNC"
     ],
     "outputConstraints": [
       {
         "columnName": "hashedemail",
         "minimum": 2,
         "type": "COUNT_DISTINCT"
       },
     ]
   }
   ```

   `aggregateColumns` – A 公司想要計算銷售資料和傳回資料之間重疊中的唯一客戶數量。A 公司也想要加總`purchases`要與 數目比較的 數目`returns`。

   `joinColumns` – 公司 A 想要使用 `identifier` 來比對客戶從銷售資料到客戶從傳回資料。這將有助於公司 A 配對傳回正確的購買。它還有助於公司 A 區段重疊的客戶。

   `dimensionColumns` – A 公司使用 依特定產品`dimensionColumns`篩選、比較購買和在特定期間內傳回、確保傳回日期晚於產品日期，以及協助分割重疊的客戶。

   `scalarFunctions` – A 公司會根據設定的資料表 A 與協同合作的關聯，視需要選取`CAST`純量函數以協助更新資料類型格式。它還會新增純量函數，以在需要時協助格式化資料欄。

   `outputConstraints` – 公司 A 設定最小輸出限制。它不需要限制結果，因為允許分析師查看其銷售資料表中的資料列層級資料 
**注意**  
A 公司不包含在分析規則`joinRequired`中。它為分析師提供了單獨查詢銷售資料表的靈活性。

1. B 公司會建立傳回設定的資料表。

1. B 公司將下列彙總分析規則新增至傳回設定的資料表。

   ```
   {
     "aggregateColumns": [
       {
         "columnNames": [
           "identifier"
         ],
         "function": "COUNT_DISTINCT"
       },
       {
         "columnNames": [
           "returns"
         ],
         "function": "AVG"
       },
       {
         "columnNames": [
           "returns"
         ],
         "function": "SUM"
       }
     ],
     "joinColumns": [
       "hashedemail"
     ],
     "joinRequired": [
       "QUERY_RUNNER"
     ],
     "dimensionColumns": [
       "state",
       "popularpurchases",
       "customerserviceuser",
       "productline",
       "returndate"
     ],
     "scalarFunctions": [
       "CAST",
       "LOWER",
       "UPPER",
       "TRUNC"
     ],
     "outputConstraints": [
       {
         "columnName": "hashedemail",
         "minimum": 100,
         "type": "COUNT_DISTINCT"
       },
       {
         "columnName": "producttype",
         "minimum": 2,
         "type": "COUNT_DISTINCT"
       }
     ]
   }
   ```

   `aggregateColumns` – 公司 B 可讓公司 A 的總和`returns`與購買次數進行比較。它們至少有一個彙總資料欄，因為它們正在啟用彙總查詢。

   `joinColumns` – 公司 B 可讓公司 A 加入 `identifier` ，以比對客戶從銷售資料傳回給客戶的資料。 `identifier`資料特別敏感，並將它做為 ，`joinColumn`以確保資料永遠不會在查詢中輸出。

   `joinRequired` – B 公司要求對傳回資料的查詢與銷售資料重疊。他們不希望讓 A 公司查詢其資料集中的所有個人。他們在協同合作協議中也同意該限制。

   `dimensionColumns` – 公司 B 可讓公司 A 依 `state`、 `popularpurchases`和 進行篩選和分組`customerserviceuser`，這些是可協助進行公司 A 分析的唯一屬性。公司 B 可讓公司 A 使用 `returndate`篩選 之後`returndate`發生的輸出`purchasedate`。透過此篩選，輸出對於評估產品變更的影響更為準確。

   `scalarFunctions` – B 公司啟用下列項目：
   + 日期的 TRUNC
   + LOWER 和 UPPER，以防在其資料中以不同的格式`producttype`輸入
   + CAST 如果 A 公司需要將銷售中的資料類型轉換為與傳回中的資料類型相同

   A 公司不會啟用其他純量函數，因為他們不認為查詢需要它們。

   `outputConstraints` – B 公司設定 的最低輸出限制`hashedemail`，以協助降低重新識別客戶的能力。它也會在 上新增最低輸出限制`producttype`，以減少重新識別傳回之特定產品的能力。根據輸出的維度 （例如，)，某些產品類型可能更具優勢`state`。無論 A 公司為其資料新增的輸出限制，一律都會強制執行其輸出限制。

1. A 公司建立與協同合作的銷售資料表關聯。

1. B 公司會建立與協同合作的傳回資料表關聯。

1. 公司 A 會執行查詢，例如下列範例，相較於 2022 年位置的總購買量，更了解公司 B 中的傳回數量。

   ```
   SELECT
     companyB.state,
     SUM(companyB.returns),
     COUNT(DISTINCT companyA.hashedemail)
   FROM
     sales companyA
     INNER JOIN returns companyB ON companyA.identifier = companyB.identifier
   WHERE
     companyA.purchasedate BETWEEN '2022-01-01' AND '2022-12-31' AND
     TRUNC(companyB.returndate) > companyA.purchasedate
   GROUP BY
     companyB.state;
   ```

1. 公司 A 和公司 B 會檢閱查詢日誌。B 公司會驗證查詢是否符合協同合作協議中同意的內容。

## 對彙總分析規則問題進行故障診斷
<a name="troubleshooting-agg-analysis-rule"></a>

當您使用彙總分析規則時，請使用此處的資訊來協助您診斷和修正常見問題。

**Topics**
+ [我的查詢未傳回任何結果](#query-no-results)

### 我的查詢未傳回任何結果
<a name="query-no-results"></a>

當沒有相符的結果，或相符的結果不符合一或多個最小彙總閾值時，就會發生這種情況。

如需最低彙總閾值的詳細資訊，請參閱 [彙總分析規則 - 範例](#agg-analysis-rule-example)。