

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 집계 분석 규칙
<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\_aggregate\_function\_expression}} | 다음 표현식을 포함하는 쉼표로 구분된 쉼표로 구분된 목록입니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/clean-rooms/latest/userguide/analysis-rules-aggregation.html) `select_aggregate_expression`에 `select_aggregation_function_expression`이 하나 이상 있어야 합니다.  | `SELECT SUM(PRICE), user_segment` | 
| {{select\_aggregation\_function\_expression}} | 지원되는 집계 함수가 하나 이상의 열에 하나 이상 적용되었습니다. 열만 집계 함수의 인수로 사용할 수 있습니다. `select_aggregate_expression`에 `select_aggregation_function_expression`이 하나 이상 있어야 합니다.  | `AVG(PRICE)`<br />`COUNT(DISTINCT user_id)` | 
| {{select\_grouping\_column\_expression}} | 다음을 사용하는 모든 식을 포함할 수 있는 표현식:[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/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)` <br />`UPPER(campaignName)`  | 
| {{table\_expression}} | 테이블 또는 테이블의 조인으로, 조인 조건식을 `join_condition`과 연결합니다.<br />`join_condition`은 BOOLEAN을 반환합니다.<br />`table_expression`은 다음을 지원합니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/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\_expression}} | 부울을 반환하는 조건식. 다음과 같이 구성될 수 있습니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/clean-rooms/latest/userguide/analysis-rules-aggregation.html)<br />지원되는 비교 조건은 (`=, >, <, <=, >=, <>, !=, NOT, IN, NOT IN, LIKE, IS NULL, IS NOT NULL`)입니다.<br />지원되는 논리 연산자는 (`AND, OR`)입니다.<br />`where_expression`은 선택 사항입니다. | `WHERE where_condition`<br />`WHERE price > 100` <br />`WHERE TRUNC(timestampColumn) = '1/1/2022'` <br />`WHERE timestampColumn = timestampColumn2 - 14`  | 
| {{group\_by\_expression}} | `select_grouping_column_expression`의 요구 사항과 일치하는 표혁식 목록으로, 쉼표로 구분됩니다. | `GROUP BY TRUNC(timestampColumn), UPPER(campaignName), segment` | 
| {{having\_expression}} | 조건은 부울 결과가 있는 표현식입니다. 지원되는 집계 함수가 단일 열(예:`SUM(price)`)에 적용되며 숫자 리터럴과 비교됩니다.<br />지원되는 조건은 (`=, >, <, <=, >=, <>, !=`)입니다.<br />지원되는 논리 연산자는 (`AND, OR`)입니다.<br />`having_expression`은 선택 사항입니다. | `HAVING SUM(SALES) > 500` | 
| {{order\_by\_expression}} | 앞에서 `select_aggregate_expression`에서 정의한 것과 동일한 요구 사항과 호환되는 표현식 목록으로 쉼표로 구분됩니다.<br />`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)` | 

집계 쿼리 구조 및 구문의 경우 다음 사항에 유의해야 합니다.
+ SELECT 이외의 SQL 명령은 지원되지 않습니다.
+ 하위 쿼리 및 공통 테이블 표현식(예: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, 및 ORDER BY 표현식에서 사용할 수 있습니다.


| 컨트롤 | 정의 | 사용법 | 
| --- | --- | --- | 
| aggregateColumns | 집계 함수 내에서 사용할 수 있도록 구성된 테이블 열의 열 | `aggregateColumns`은 SELECT, HAVING, 및 ORDER BY 표현식의 집계 함수 내에서 사용할 수 있습니다.<br />일부 `aggregateColumns`은 `joinColumn`(나중에 정의됨)으로 분류할 수도 있습니다.<br />주어진 `aggregateColumn`을 `dimensionColumn`(나중에 정의됨)으로도 분류할 수 없습니다. | 
| function | 카운트, 합계 및 평균 함수는 aggregateColumns 위에서 사용할 수 있습니다. | `function`은 관련된 `aggregateColumns`에 적용할 수 있습니다. | 

### 조인 컨트롤
<a name="join-controls"></a>

`JOIN` 절은 두 개 이상의 테이블에서 관련 열을 기반으로 두 개 이상의 테이블에서 행을 결합하는 데 사용됩니다.

*조인 컨트롤*을 사용하여 테이블을의 다른 테이블에 조인하는 방법을 제어할 수 있습니다`table_expression`. INNER는 AWS Clean Rooms 만 지원합니다JOIN. INNER JOIN 문은 사용자가 정의한 컨트롤에 따라 분석 규칙`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
```


| 컨트롤 | 정의 | 사용법 | 
| --- | --- | --- | 
| joinColumns | 쿼리를 할 수 있는 구성원이 INNER JOIN 명령문에서 사용할 수 있도록 허용하려는 열(있는 경우) | 특정 `joinColumn`을 `aggregateColumn`으로 분류할 수도 있습니다([집계 제어](#agg-functions) 참조).<br />동일한 열을 `joinColumn` 및 `dimensionColumns`으로 모두 사용할 수는 없습니다(나중에 참조).<br />`aggregateColumn`으로 분류되지 않는 한, `joinColumn`은 INNER JOIN가 아닌 쿼리의 다른 부분에서는 사용할 수 없습니다. | 
| joinRequired | 쿼리할 수 있는 멤버에게 구성된 테이블이 있는 INNER JOIN이 필요한지 여부를 제어합니다. | 이 파라미터는 이 지정된 경우에만 INNER JOIN이 필요합니다. 이 매개 변수를 활성화하지 않는 경우 INNER JOIN은 선택 사항입니다.<br />이 매개 변수를 활성화하면 쿼리할 수 있는 구성원은 자신이 소유한 테이블을 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>

*차원 컨트롤*은 집계 열을 필터링, 그룹화 또는 집계할 수 있는 열을 제어합니다.


| 컨트롤 | 정의 | 사용법 | 
| --- | --- | --- | 
| dimensionColumns | 쿼리할 수 있는 구성원이SELECT,WHERE, GROUP BY 및 ORDER BY에서 사용할 수 있도록 허용하는 열(있는 경우). | `dimensionColumn`은 SELECT(`select_grouping_column_expression`), WHERE, GROUPBY, 및 ORDER BY에서 사용할 수 있습니다.<br />동일한 열에 `dimensionColumn`, `joinColumn`, 및/또는`aggregateColumn`이 모두 있을 수는 없습니다. | 

### 스칼라 함수
<a name="scalar-functions"></a>

*스칼라 함수*는 차원 열에 사용할 수 있는 스칼라 함수를 제어합니다.


| 컨트롤 | 정의 | 사용법 | 
| --- | --- | --- | 
| scalarFunctions | 쿼리의 `dimensionColumns`에서 사용할 수 있는 스칼라 함수. | `dimensionColumns`에 적용할 수 있는 스칼라 함수(있는 경우)를 지정합니다(예:CAST).<br />스칼라 함수는 다른 함수 위나 다른 함수 내에서 사용할 수 없습니다. 스칼라 함수의 인수는 열, 문자열 리터럴 또는 숫자형 리터럴일 수 있습니다. | 

지원되는 스칼라 함수는 다음과 같습니다.
+ 수학 함수 — AABS, CEILING, FLOOR, LOG, LN, ROUND, SQRT
+ 데이터 형식 지정 함수 – CAST, CONVERT, TO\_CHAR, TO\_DATE, TO\_NUMBER, TO\_TIMESTAMP
+ 문자열 함수 - LOWER, UPPER, TRIM, RTRIM, SUBSTRING
  + RTRIM의 경우 트리밍할 사용자 정의 문자 세트를 사용할 수 없습니다.
+ 조건부 표현식 – COALESCE
+ 날짜 함수 - EXTRACT, GETDATE, CURRENT\_DATE, 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>

*집계 제약 조건*은 쿼리 결과에서 반환되는 행을 제어합니다. 행이 반환되려면 집계 제약 조건에 지정된 각 열의 고유 값의 지정된 최소 개수를 충족해야 합니다. 이 요구 사항은 쿼리나 분석 규칙의 다른 부분에서 열이 명시적으로 언급되지 않은 경우에도 적용됩니다.


| 컨트롤 | 정의 | 사용법 | 
| --- | --- | --- | 
| columnName | 각 출력 행이 충족해야 하는 조건에 사용되는 `aggregateColumn`입니다. | 구성된 테이블의 모든 열이 될 수 있습니다. | 
| minimum | 쿼리 결과에서 반환되기 위해 출력 행에 있어야 하는 연관된 `aggregateColumn`의 최소 고유값 수(예: COUNT DISTINCT)입니다. | `minimum`은 최소 2의 값이어야 합니다. | 

## 집계 분석 규칙 구조
<a name="agg-analysis-rule-template"></a>

다음 예제에서는 집계 분석 규칙의 사전 정의된 구조를 보여줍니다.

다음 예제에서는 데이터 {{`MyTable`}}은 데이터 테이블을 나타냅니다. {{user input placeholder}}를 사용자의 정보로 바꿉니다.

```
{
  "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`를 기준으로 필터링 및 그룹화할 수 있도록 합니다. 회사 B는 회사 B를 통해 회사 A가 `returndate`를 사용하여 `purchasedate` 이후에 발생하는 `returndate`의 출력을 필터링할 수 있도록 합니다. 이 필터링을 사용하면 제품 변경의 영향을 평가하는 데 더 정확한 결과를 얻을 수 있습니다.

   `scalarFunctions`— 회사 B는 다음을 가능하게 합니다.
   + 날짜용 TRUNC
   + 데이터에 `producttype`이 다른 형식으로 입력된 경우 LOWER 및 UPPER를 사용합니다.
   + 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) 섹션을 참조하세요.