# 테이블 조작/계산 함수

**• ADDCOLUMNS: 테이블에 열 추가**

1. **함수 정의** :
1. ADDCOLUMNS 함수는 **기존 테이블에 새로운 열을 추가**할 때 사용하는 함수입니다. 이 함수는 기존 테이블의 데이터를 바탕으로 **계산된 값을 새 열로 추가하는 데 유용**합니다. ADDCOLUMNS는 **원본 테이블을 수정하지 않고, 계산된 열이 추가된 새로운 테이블을 반환**합니다.

2. **기본 구문** :
2. ADDCOLUMNS( Table, "NewColumnName", Expression)

3. **매개 변수**:
3. Table: 기존 테이블
3. NewColumnName: 추가할 열의 이름
3. Expression: 새로운 열에 들어갈 값의 계산식

4. **예시 코드** :
4. 예를 들어, 학생의 성적 테이블이 있다고 가정해 보겠습니다

![Image](https://upload.cafenono.com/image/slashpagePost/20241111/152723_VVHj2ssOQPLcAxsDX8?q=80&s=1280x180&t=outside&f=webp)

     위 테이블에 각 학생의 **평균 점수를 추가**하고 싶다면, ADDCOLUMNS를 사용할 수 있습니다.
     **ADDCOLUMNS( Students, "평균 점수", ([국어] + [수학]) / 2 )**
     이렇게 하면 새로운 테이블이 반환되며, 그 결과는 다음과 같습니다:

![Image](https://upload.cafenono.com/image/slashpagePost/20241111/152747_LrG9h6HwDOYjcAW1j3?q=80&s=1280x180&t=outside&f=webp)

     이 함수는 **데이터 분석 중 추가적인 정보를 계산하여 테이블에 덧붙이고 싶을 때 매우 유용**합니다.

• **DISTINCT: 고유한 값 반환**

1. **함수 정의** : 
1. DISTINCT 함수는 **특정 열에서 중복된 값을 제거하고 고유한 값들만 반환**합니다. 이 함수는 데이터를 집계하거나 고유한 값의 목록을 얻고자 할 때 유용합니다.

2. **기본 구문** :
2. DISTINCT(column)

3. **예시 코드**:
3. 예를 들어, 다음과 같은 테이블이 있다고 가정해 봅시다:

![Image](https://upload.cafenono.com/image/slashpagePost/20241111/161616_6EnwoFMGrhLL1kuDXj?q=80&s=1280x180&t=outside&f=webp)

     여기서 DISTINCT 함수를 사용하여 고유한 고객 이름 목록을 얻고 싶다면, 
     **UniqueCustomers = DISTINCT('테이블 이름'[고객 이름])**
     **결과 :**
     이 코드를 실행하면 다음과 같은 결과가 반환됩니다:

![Image](https://upload.cafenono.com/image/slashpagePost/20241111/161634_IsVu97oA4diHEsIg7x?q=80&s=1280x180&t=outside&f=webp)

     이렇게 **DISTINCT 함수는 중복된 항목을 제거하고 고유한 값들만 보여줍**니다.

•** GROUPBY: 그룹화된 테이블 반환**

1. **함수 정의** : 
1. GROUPBY 함수는 **데이터 테이블에서 그룹을 생성**하고, 각 그룹에 대한 집계 연산을 수행할 때 사용됩니다. SQL의 GROUP BY 구문과 비슷한 역할을 하지만, 조금 다른 점이 있어 주의해야 합니다. GROUPBY 함수는 **주로 데이터를 특정 기준으로 묶고, 그 그룹 내에서 새로운 컬럼을 생성하거나 계산할 때 유용**합니다.

2. **기본 구문** :
2. GROUPBY(
2.     Table,
2.     GroupBy_Column1, [Optional_GroupBy_Column2, ...],
2.     "Name1", Aggregation1,
2.     "Name2", Aggregation2
2. )

3. **매개 변수** :
3. Table: 그룹화를 할 원본 테이블.
3. GroupBy_Column: 그룹화를 수행할 기준이 되는 컬럼.
3. Name: 생성할 컬럼의 이름.
3. Aggregation: 집계 연산을 수행하는 DAX 표현식.

4. **예시 코드** :
4. 예를 들어, 판매 데이터를 기준으로 매장별 총 판매량을 계산한다고 가정해보겠습니다. 데이터 테이블(Sales)은 다음과 같은 컬럼으로 구성되어 있습니다:

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/102719_xVqOQbvdUunjR4wxR5?q=80&s=1280x180&t=outside&f=webp)

     GROUPBY를 사용해 매장별로 총 판매량을 구하려면 다음과 같이 작성할 수 있습니다:
     **EVALUATE
     GROUPBY(
         Sales,
         Sales[Store],
         "TotalSales", SUMX(CURRENTGROUP(), Sales[Sales])
     )**
     결과 :

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/102734_eEq733mVISMwPWGjd1?q=80&s=1280x180&t=outside&f=webp)

1. **동작 방식** : 
1. • **Sales 테이블에서 Store 컬럼을 기준으로 데이터를 그룹화**합니다.
1. • **각 그룹(Store A와 Store B)에서 SUMX를 사용해 Sales 값을 합산**합니다.
1. • **결과로 그룹별로 합계가 계산된 테이블을 반환**합니다.

2. **주의할 점** :
2. • GROUPBY는 SUMMARIZE와는 다르게 **자동으로 집계를 수행하지 않습니다**. **CURRENTGROUP() 함수로 현재 그룹 내의 데이터를 참조**해야 합니다.
2. • 복잡한 집계가 필요한 경우 SUMMARIZE, SUMMARIZECOLUMNS와 같은 다른 함수도 고려해볼 수 있습니다.

3. **요약** :
3. GROUPBY를 사용하면 특정 기준으로 데이터를 쉽게 그룹화하고, 그 **그룹별로 계산을 수행**할 수 있습니다.

• **RELATED: 관계된 테이블에서 값 반환**

1. **함수 정의** :
1. RELATED 함수는 **특정 테이블에서 관계를 통해 다른 테이블의 열을 참조하는 함수**로, 테이블 간의 관계를 활용할 때 매우 유용합니다. 

2. **기본 구문** :
2. RELATED(columnName)

3. **매개 변수** :
3. columnName: 관계가 있는 다른 테이블의 특정 열을 지정합니다. 이 열은 가져오려는 값을 가진 열로, **관계가 설정된 테이블이어야만 RELATED 함수를 사용할 수 있습니다.**
3. **RELATED 함수는 다대일(여러 개의 값이 하나의 값을 참조하는 구조) 또는 1대1 관계에서만 사용**됩니다. 즉, 참조할 때 관계가 다대다 관계로 설정된 경우에는 사용할 수 없습니다.

4. **예제 코드** :
4. • 시나리오 설정
4. ** Products 테이블과 Sales 테이블**이 있다고 가정합니다:
4.  Products 테이블에는 ProductID, ProductName, Price 등의 정보가 있고,
4.  Sales 테이블에는 SaleID, ProductID, Quantity (판매된 수량) 등이 있습니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/134045_Jiigzzd1JGEVsyZfAZ?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/134052_ADdiw2ZAOKFwxJeDzh?q=80&s=1280x180&t=outside&f=webp)

      이 두 테이블은 **ProductID 열을 통해 관계가 연결**되어 있습니다. 

     ** Sales 테이블에서 제품 가격을 가져오기 위해 ProductID를 기준으로 Products 테이블을 참조 **함.
     1. **기본 사용법**
      Sales 테이블에서 판매된 각 제품의 가격을 RELATED 함수를 이용하여 가져오는 방법을 보겠습니다. 

      이 예제에서는** Sales 테이블에서 Price라는 새 계산 열을 추가**하여 각 제품의 가격을 표시합니다.
      **Price = RELATED(Products[Price])**
      **결과** :
      이 식은 **Sales 테이블**의 각 행에서 ProductID를 기준으로 Products 테이블의** Price 값을 가져옵니다**.

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/134124_cB4jqJUE0hxCt0iYG2?q=80&s=1280x180&t=outside&f=webp)

      위의 식은 **Sales 테이블에서 ProductID 값에 해당하는 Products 테이블의 Price 값을 가져옵**니다. 

      이렇게 하면 Sales 테이블에 각 판매 항목의 가격을 추가로 표시할 수 있습니다.
     2. **총 판매 금액 계산**
      이제 각 판매 항목의 총 판매 금액(TotalSales)을 계산하는 경우를 보겠습니다. 

      여기서는 Price와 Quantity 값을 곱하여 총 금액을 계산할 수 있습니다.
      **TotalSales = RELATED(Products[Price]) * Sales[Quantity]**
      **결과**

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/134142_bTbu0wkumCK4CcQ18M?q=80&s=1280x180&t=outside&f=webp)

      여기서 **TotalSales 열은 RELATED 함수를 통해 Products 테이블에서 가격을 가져온 후**, 

      **해당 가격에 Quantity를 곱하여 총 판매 금액을 계산**합니다.

1. **요약** :
1. • **RELATED 함수는 두 테이블 간 관계가 설정되어 있을 때 유용하게 사용**할 수 있습니다.
1. • RELATED(columnName) 구문에서 columnName은 관계된 테이블의 특정 열을 참조할 때 필요합니다.
1. • **RELATED 함수는 다대일 또는 1대1 관계에서만 작동**하며, 다른 테이블의 값을 가져와 다양한 계산에 활용할 수 있습니다.

• **RELATEDTABLE: 관계된 테이블 반환**

1. **함수 정의** :
1. RELATEDTABLE 함수는 **두 테이블 간의 관계를 이용**해, **현재 테이블에서 관련된 다른 테이블의 모든 행을 가져오는 함수**입니다. 이 함수는 주로 **일대다 관계에서 사용**되며, 하나의 테이블에 있는 특정 필드의 값을 기준으로, 다른 테이블의 관련 데이터를 참조합니다.

2. **기본 구문** :
2. RELATEDTABLE(TableName)

3. **매개 변수** :
3. TableName: 현재 테이블과 관계가 설정된, 가져오려는 다른 테이블의 이름입니다. **TableName에 해당하는 테이블에서 현재 행과 관련된 데이터를 모두 반환**합니다.

4. **작동 원리** :
4. **RELATEDTABLE은 현재 테이블의 각 행에 대해, 관계가 있는 테이블에서 연결된 행의 집합을 가져**옵니다.
4. 예를 들어, 고객 테이블(Customers)과 주문 테이블(Orders)이 일대다 관계로 연결되어 있다고 가정하면, **RELATEDTABLE(Orders) 함수는 각 고객의 모든 주문을 가져오도록** 도와줍니다.

5. **예시 코드** :
5. 고객 테이블 과 주문 테이블 두 테이블이 있다고 가정합니다.
5. 

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/141417_OH5Ud15xuzlLJBFo45?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/141424_fLHBEMHnWe6nLCAQwb?q=80&s=1280x180&t=outside&f=webp)

     각 고객이 몇 번의 주문을 했는지 고객 테이블에 OrderCount라는 열을 추가해 계산해 보겠습니다.
     OrderCount라는 열을 고객 테이블에 추가합니다.
     **OrderCount = COUNTROWS(RELATEDTABLE(Orders))**
     **RELATEDTABLE(Orders): 주문 테이블에서 현재 고객과 관련된 행(주문)을 모두 가져옵니다**.
     **COUNTROWS:** 가져온 주문 테이블의 행 수를 세어, **각 고객이 가진 주문의 수**를 나타냅니다.
     **결과** : 
     고객 테이블의 OrderCount 열은 다음과 같이 나옵니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/141445_S6pHw7owUI9xyPSRkr?q=80&s=1280x180&t=outside&f=webp)

     결과 해석 :
     •** John Doe 고객은 3개의 주문(ID: 101, 103, 105)을 했으므로 OrderCount는 3**입니다.
     • **Jane Smith는 1개의 주문(ID: 102)을 해서 OrderCount가 1**입니다.
     • **Chris Park와 Linda Brown은 주문이 없어서 OrderCount 값이 0으로 표시**됩니다.

1. **요약** :
1. **RELATEDTABLE 함수는 고객 ID를 기준으로 주문 테이블에서 고객과 관련된 데이터를 찾아 각 고객의 주문 수를 세는 데 도움**을 줍니다.

• **ROW: 새 행 반환**

1. **함수 정의** :
1. ROW 함수는 **하나의 행을 생성하는 함수**로, **특정 열 이름과 값을 쌍으로 설정해 테이블을 만들 수 있습니다**. 단일 행으로 구성된 테이블을 생성하므로, 여러 필드 값을 한 줄로 결합해서 보여줄 때 유용합니다.

2. **기본 구문** :
2. ROW("ColumnName1", Expression1, "ColumnName2", Expression2, ...)

3. **매개변수** :
3. ColumnName1, ColumnName2, ...: 생성할 테이블에서의 열 이름을 지정합니다. 각 열 이름은 문자열로 입력해야 합니다.
3. Expression1, Expression2, ...: 열 이름에 해당하는 값이나 수식을 지정합니다. 이 부분에 계산식이나 값이 들어갈 수 있으며, 필요한 만큼 추가 가능합니다.

4. **예시 코드** : 
4. (1) **기본예시**
4.  아래 예시에서는 ROW 함수를 사용해 **"Product", "Price", "Discount"라는 세 개의 열을 가진 단일 행**   테이블을 생성합니다.
4. ** ROW(
4.      "Product", "Laptop",
4.      "Price", 1500,
4.      "Discount", 0.1
4.  ) **
4. ** 결과** :

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/143400_q6cxesDcvbNytcriPK?q=80&s=1280x180&t=outside&f=webp)

      이처럼 ROW 함수를 통해 "Product"라는 이름의 열에 "Laptop", "Price"라는 이름의 열에, 

      1500, "Discount"라는 이름의 열에 0.1의 값을 가지는 테이블을 생성했습니다.
     (2) **활용 예시 - 여러 값을 결합한 계산**
      다음 예시는 특정 제품에 대해 할인 후 가격을 계산한 단일 행 테이블을 만드는 예제입니다.
      **ROW(
          "Product", "Smartphone",
          "OriginalPrice", 1000,
          "Discount", 0.2,
          "DiscountedPrice", 1000 * (1 - 0.2)
      )**
      **결과** :

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/143414_KQjqJqjSbQzkQC1Q8u?q=80&s=1280x180&t=outside&f=webp)

      ROW 함수를 사용하여 DiscountedPrice 열을 계산하여 제품의 할인 후 가격을 계산하여 보여줍니다.

1. **요약** :
1. • **ROW 함수는 단일 행을 가진 테이블을 생성하는 함수**입니다.
1. • 열 이름과 그에 대한 표현식을 지정하여 다양한 값 또는 계산 결과를 하나의 행에 결합해 보여줄 수 있습니다.
1. • **주로 데이터가 단일 행일 때, 또는 여러 계산 값을 함께 표시할 때 사용하기 적합**합니다.

• **SUMMARIZE: 요약된 테이블 반환**

1. **함수 정의** :
1. SUMMARIZE 함수는 **특정 컬럼을 기준으로 그룹화된 테이블을 생성**하며, **그 안에 원하는 컬럼이나 새로운 계산을 추가**할 수 있습니다. **GROUPBY 함수와 비슷하지만 더 직관적이며, 새로운 계산 열을 바로 추가할 수 있어 자주 사용**됩니다.

2. **기본 구문** :
2. SUMMARIZE(
2.     테이블 이름,
2.     그룹화할 컬럼1,
2.     그룹화할 컬럼2, ...,
2.     [새로운 계산 열 이름], 계산식
2. )

3. **매개변수** :
3. 테이블 이름: 그룹화할 테이블 이름을 지정합니다.
3. **그룹화할 컬럼**: **테이블에서 그룹화 기준으로 사용할 컬럼을 한 개 이상 지정**할 수 있습니다.
3. **새로운 계산 열 **이름: **추가할 계산 열의 이름을 대괄호로** 감쌉니다. 이 부분은 선택 사항으로, 계산식을 지정하지 않으면 그룹화된 테이블만 반환됩니다.
3. 계산식: 새로운 계산 열에 들어갈 값 또는 집계 계산을 지정합니다.

4. **예시 코드** : 

     **(1) 기본 예시**
       **Sales라는 테이블**이 있고, 각 행에는 Product, Region, SalesAmount 컬럼이 있다고 가정해봅시다.

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/152056_Eo6zk75cLVseDyqRdv?q=80&s=1280x180&t=outside&f=webp)

      각 **Product별로 Region에서 발생한 총 SalesAmount를 구하고 싶다**면, 

      SUMMARIZE 함수를 아래와 같이 사용할 수 있습니다.
      **SUMMARIZE(
          Sales,
          Sales[Product],
          Sales[Region],
          "TotalSales", SUM(Sales[SalesAmount])
      )**
     ** 구문 설명:**
      • **Sales[Product], Sales[Region]을 기준으로 그룹화**됩니다.
      • **"TotalSales"라는 새로운 열이 추가**되며, **각 그룹의 SalesAmount를 합산한 결과**가 들어갑니다.
      **결과 테이블 :**
      이 구문을 실행하면 다음과 같은 결과가 나옵니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/152114_T4UCDvM1L5Bu9qKy39?q=80&s=1280x180&t=outside&f=webp)

      **결과 설명 :**
      • Product A - East: SalesAmount 값이 100 + 300 = 400으로 합산되었습니다.
      • Product A - West: SalesAmount 값이 150으로 유지되었습니다 (유일한 값이기 때문).
      • Product B - East: SalesAmount 값이 200 + 50 = 250으로 합산되었습니다.
      • Product B - West: SalesAmount 값이 250으로 유지되었습니다.
     **(2) 추가 활용 예시**
      만약 **특정 조건을 추가해 계산**하고 싶다면, 

      SUMMARIZE 함수는 **FILTER 함수와 함께 사용**할 수 있습니다. 

      예를 들어, 특정 지역의 매출만 보고 싶다면 다음과 같이 사용합니다.
      **SUMMARIZE(
          FILTER(Sales, Sales[Region] = "East"),
          Sales[Product],
          "TotalSales", SUM(Sales[SalesAmount])**
      )
      **결과:**
      이 구문은 S**ales 테이블에서 Region이 "East"인 데이터만 필터링**하고, 

      각 **Product별로 SalesAmount의 합계를 TotalSales 열에 계산**합니다.
      원본 데이터 중 **"East" 지역만 필터링**한 테이블 :

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/152132_5LvHxLcN6WRTZ4U3F1?q=80&s=1280x180&t=outside&f=webp)

     ** 결과 테이블 :**
      위 구문을 실행하면 다음과 같은 결과가 나옵니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20241114/152144_XGR1woQaOFKgbsVdQV?q=80&s=1280x180&t=outside&f=webp)

      **결과 설명 :**
      • Product A: SalesAmount가 100 + 300 = 400으로 합산되었습니다.
      • Product B: SalesAmount가 200 + 50 = 250으로 합산되었습니다.

1. **요약** :
1. SUMMARIZE는 **특정 조건을 적용하여 원하는 데이터만 필터링**하고, **그 결과를 그룹화하여 요약 테이블을 만드는데 유용**합니다.

• **SUMMARIZECOLUMNS: 열을 기준으로 요약 테이블 생성**

1. **함수 정의** :
1. SUMMARIZECOLUMNS 함수는 **지정된 열과 필터를 기준으로 데이터를 요약하여 반환**합니다. 이는 **특정 그룹화된 데이터를 요약하고, 필터링하여 원하는 형태의 결과 테이블을 만들어줍**니다.

2. **기본 구문** :
2. SUMMARIZECOLUMNS(
2.     <그룹화 기준 열>,
2.     [필터 표현식],
2.     <그룹화 기준 열 2>,
2.     [필터 표현식 2],
2.     …,
2.     <요약할 테이블 또는 계산된 열>
2. )

3. **매개변수** :
3. <그룹화 기준 열>: **요약하고 싶은 열을 그룹화할 기준**으로, 그룹별로 요약을 생성할 열들을 나열합니다.
3. [필터 표현식]: **요약할 테이블을 특정 기준으로 필터링하는 조건**입니다.
3. <요약할 테이블 또는 계산된 열>: SUM이나 COUNT와 같은 집계 함수를 사용하여, 요약할 계산 열을 지정합니다.

4. **예시 코드** :
4. 다음과 같은 Sales 테이블이 있다고 가정해 보겠습니다:

![Image](https://upload.cafenono.com/image/slashpagePost/20241118/163507_S537KRHLITbelTktAO?q=80&s=1280x180&t=outside&f=webp)

     이 예시에서 **Year가 2023인 데이터만 필터링**하여, 

     **Region과 Product별로 Sales의 총합**을 구하고 싶다고 가정해보겠습니다.
     SUMMARIZECOLUMNS 함수 예시 
     **SUMMARIZECOLUMNS(
         Sales[Region],           -- 그룹화 기준 열 (Region)
         Sales[Product],          -- 그룹화 기준 열 (Product)
         Sales[Year] = 2023,      -- 필터 표현식 (Year = 2023인 데이터만 필터링)
         "Total Sales", SUM(Sales[Sales])  -- 계산된 열 (총 판매액)
     )**
     **설명 :**
     **Sales[Region]과 Sales[Product] 열을 기준으로 데이터를 그룹화**합니다.
     Sales[Year] = 2023이라는 필터 표현식을 사용하여, **Year가 2023인 데이터만 선택**합니다.
     "Total Sales"라는 새 열을 생성하고, **각 그룹에 대해 Sales[Sales] 값의 합계를 계산**합니다.
     **결과** :
     위 쿼리는 Year가 2023인 데이터만 필터링한 후, 

     Region과 Product별로 Sales의 총합을 계산하여 다음과 같은 결과 테이블을 반환합니다:

![Image](https://upload.cafenono.com/image/slashpagePost/20241118/163525_be1RLhjHSECDMRomsS?q=80&s=1280x180&t=outside&f=webp)

1. **요약** :
1. 이와 같이, **SUMMARIZECOLUMNS의 필터 표현식을 사용하면 특정 조건을 적용**하여 데이터를 효율적으로 요약할 수 있습니다.

**참고 : 필터가 필요한 경우 SUMMARIZE 함수 사용**

1. SUMMARIZE 함수에서는 SUMMARIZECOLUMNS와 달리 필터 표현식을 직접 사용할 수 없기 때문에, 조건을 적용하려면 **CALCULATE와 함께 사용**해야 합니다. 즉, CALCULATE를 통해 필터 컨텍스트를 설정한 뒤, SUMMARIZE로 그룹화와 요약을 수행해야 합니다.
1. 위 예시와 동일한 조건을 SUMMARIZE 함수로 작성하는 방법은 다음과 같습니다.

2. **SUMMARIZE 함수 예시 (필터 적용)**
2. **CALCULATE(
2.     SUMMARIZE(
2.         Sales,
2.         Sales[Region],             -- 그룹화 기준 열 (Region)
2.         Sales[Product],            -- 그룹화 기준 열 (Product)
2.         "Total Sales", SUM(Sales[Sales])  -- 계산된 열 (총 판매액)
2.     ),
2.     Sales[Year] = 2023              -- 필터 조건 (Year = 2023인 데이터만 선택)
2. )**

3. **설명**
3. **CALCULATE 함수가 먼저 사용**되어, **Sales[Year] = 2023 조건을 적용**합니다. 이로 인해 Sales 테이블에서 Year가 2023인 데이터만 필터링됩니다.
3. **SUMMARIZE 함수가 필터링된 데이터를 기반으로, Sales[Region]과 Sales[Product] 열을 기준으로 데이터를 그룹화**합니다.
3. "Total Sales"라는 계산된 열을 생성하고, 각 그룹에 대해 Sales[Sales] 값의 합계를 계산합니다.
3. 결과
3. 위 DAX 코드도 Year가 2023인 데이터만 필터링하고, Region과 Product별로 Sales의 총합을 계산하여 다음과 같은 결과를 반환합니다:

![Image](https://upload.cafenono.com/image/slashpagePost/20241118/163628_KOOnBYoRSobWaddGMA?q=80&s=1280x180&t=outside&f=webp)

1. 이와 같이 **SUMMARIZE 함수는 직접적인 필터 표현식을 지원하지 않기 때문에 CALCULATE를 사용하여 필터 컨텍스트를 적용한 후에 요약 작업을 수행**해야 합니다.

•** TOPN: 상위 N개 값 반환**

1. **함수 정의** :
1. TOPN 함수는 지정된 순서에 따라 상**위 N개의 행을 필터링하여 반환하는 함수**입니다. 주로 데이터의 상위 항목을 추출할 때 사용하며, 예를 들어 매출 상위 5개 제품, 최고 성적 상위 3명 등의 결과를 가져올 수 있습니다.

2. **기본 구문** :
2. TOPN(<N>, <table>, <orderBy_expression>, [<order>])

3. **매개 변수** :
3. N: 반환할 행의 개수를 지정합니다. 예를 들어, 상위 5개를 반환하고 싶다면 5를 입력합니다.
3. table: 함수가 적용될 테이블을 지정합니다. 여기서 데이터를 가져오고 필터링하여 상위 N개의 결과를 반환합니다.
3. orderBy_expression: 정렬 기준이 될 열이나 계산식을 입력합니다. 예를 들어, 매출액을 기준으로 정렬하고 싶다면 매출액 열을 넣습니다.
3. order (선택 사항): 정렬 방향을 지정합니다. 기본값은 내림차순(DESC)이며, 오름차순으로 정렬하려면 ASC를 입력합니다.

4. **예시 코드** :
4. 다음은 TOPN 함수를 사용하여 특정 제품의 매출 상위 3개를 가져오는 예시입니다.
4. 예시 시나리오:
4. 매출 데이터 테이블 Sales가 있으며, 주요 열은 다음과 같습니다:
4. Product : 제품명
4. SalesAmount : 매출 금액

![Image](https://upload.cafenono.com/image/slashpagePost/20241118/165045_FEc6slctlylkswfalv?q=80&s=1280x180&t=outside&f=webp)

     이 데이터에서 매출 상위 3개 제품을 추출한다고 가정하겠습니다.
    ** TOPN(3, Sales, Sales[SalesAmount], DESC)**
     **설명** :
     Sales 테이블에서 SalesAmount 열을 기준으로 내림차순(DESC) 정렬하여, 

     상위 3개의 행을 반환합니다.
     N 값이 3이므로, 매출 금액이 가장 높은 3개의 제품이 선택됩니다.
     **함수 실행 과정** :
     SalesAmount 열을 기준으로 **데이터가 내림차순으로 정렬**됩니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20241118/165102_WE1Q2nkuD6knRXTqH0?q=80&s=1280x180&t=outside&f=webp)

     정렬된 데이터에서** 상위 3개의 행이 선택**됩니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20241118/165114_cw0XztJNWSuyiXUi1Z?q=80&s=1280x180&t=outside&f=webp)

     **결과** :
     위 코드를 실행하면 **최종적으로 Product E, Product C, Product A가 포함된 3개의 행이 반환**됩니다.

     이들은 매출이 가장 높은 순서대로 정렬되어 있습니다.

1. **요약** :
1. TOPN 함수는 **매출 상위 3개 제품을 필터링**하여, 원하는 분석 결과를 쉽게 얻을 수 있게 해줍니다.
1. 내림차순 정렬을 통해 큰 값을 우선적으로 반환하며, N 값을 변경하여 반환하는 행의 수를 조절할 수 있습니다.

• **UNION: 두 테이블 합침**

1. **함수 정의** :
1. UNION 함수는 **두 개 이상의 테이블을 결합**합니다. 동일한 컬럼 구조를 가진 테이블들을 결합할 때 사용합니다. 서로 다른 테이블에서 행을 결합하지만, 각 테이블의 컬럼 이름과 순서가 동일해야 합니다.

2. **기본 구문** :
2. UNION(<Table1>, <Table2> [, <Table3>, …])

3. **매개변수** :
3. <Table1>: 병합할 첫 번째 테이블
3. <Table2>: 병합할 두 번째 테이블
3. [<Table3>, …]: 선택 사항으로, 추가로 병합할 테이블들

4. **예시 코드** :
4. 다음과 같은 두 개의 테이블이 있다고 하겠습니다.
4. Products_A 테이블:

![Image](https://upload.cafenono.com/image/slashpagePost/20241118/170547_TQzG4eb1reVwJu5uhC?q=80&s=1280x180&t=outside&f=webp)

     Products_B 테이블:

![Image](https://upload.cafenono.com/image/slashpagePost/20241118/170602_46E7vMFatLIgf8621B?q=80&s=1280x180&t=outside&f=webp)

     두 테이블을 UNION을 사용하여 병합하려면 아래와 같이 사용합니다.
     UNION(Products_A, Products_B)
     결과:

![Image](https://upload.cafenono.com/image/slashpagePost/20241118/170615_kQD8j3xla0tbQLtQBC?q=80&s=1280x180&t=outside&f=webp)

1. **사용 시 유의점** :
1. • 각 테이블의 **컬럼 수와 순서가 일치**해야 합니다. 만약 컬럼 순서가 다르면, 일치하도록 정리한 후 사용해야 합니다.
1. • **UNION은 중복된 행을 제거하지 않습니다. 중복을 제거하려면 DISTINCT를 함께 사용**해야 합니다.
1. 예를 들어, 중복된 데이터가 포함된 두 테이블을 병합하고 중복을 제거하려면 다음과 같이 할 수 있습니다:
1. **DISTINCT(UNION(Products_A, Products_B))**

2. 요약 :
2. •이와 같은 방식으로 UNION 함수는 데이터를 결합하는 데 유용하게 사용할 수 있으며, 데이터를 결합할 때 컬럼 구조가 동일한지 꼭 확인해야 합니다.

• **VALUES: 고유 값 반환**

1. **함수 정의** :
1. VALUES 함수는 **특정 열이나 테이블에서 고유한 값들을 반환할 때 사용하는 함수**입니다. 주로 필터링이나 요약 테이블을 만들 때 활용되며, 필터 컨텍스트 내에서 고유한 값을 가져오는 데 유용합니다.

2. **기본 구문** :
2. VALUES(<열 또는 테이블>)

3. **매개 변수** :
3. <열 또는 테이블>: 고유한 값을 추출할 열이나 테이블을 지정합니다. 예를 들어, 테이블[열] 형식으로 특정 열을 지정하거나 테이블 전체를 지정할 수 있습니다.

4. **사용 시 주의사항** :
4. • VALUES 함수는 필터 컨텍스트에 따라 다르게 작동하여, **필터가 걸린 경우 해당 필터링된 값들만 반환**합니다.
4. • **필터링된 상태가 아닐 경우 전체 고유 값을 반환**합니다.

5. **예시 코드** :
5. 우선 고객_테이블과 매출_테이블이라는 두 개의 테이블을 사용하겠습니다.
5. 고객_테이블

![Image](https://upload.cafenono.com/image/slashpagePost/20241118/171108_hhjogGNnaoP06nW2h1?q=80&s=1280x180&t=outside&f=webp)

     매출_테이블

![Image](https://upload.cafenono.com/image/slashpagePost/20241118/171118_DJ2n0hnNzp07fNtpJq?q=80&s=1280x180&t=outside&f=webp)

     **(1) 특정 열의 고유 값 반환**
      **고유_도시 = VALUES(고객_테이블[도시])**
      **설명** :
      고객_테이블[도시] 열의 고유한 값을 반환합니다.
      중복된 도시는 제외하고 고유한 도시만 반환합니다.
      **결과** :

![Image](https://upload.cafenono.com/image/slashpagePost/20241118/171133_fstCY6UuhRQN99UEf1?q=80&s=1280x180&t=outside&f=webp)

      "서울"이 중복되어 두 번 나타나지만, 

      **VALUES 함수는 고유한 값만 반환하므로 "서울", "부산", "대구"만 반환**됩니다.
      **참고** : 

       **VALUES 함수는 지정한 이름이 아닌 기존 열 이름으로 반환**하기 때문에, 

       VALUES(고객_테이블[도시])는 고객_테이블[도시] 열에서 고유한 값을 반환하므로, 

       반환된 테이블의 열 이름은 원래 열 이름인 도시가 됩니다.
    ** (2) 필터 컨텍스트 내에서 고유 고객 수 세기**
      **전체_고객_수 = COUNTROWS(VALUES(고객_테이블[고객_ID]))**
      **설명**:
      VALUES(고객_테이블[고객_ID]) 부분이 고객 ID의 고유한 값을 반환합니다.
      COUNTROWS 함수가 반환된 고유한 ID의 개수를 셉니다.
      **결과**:
      고객 ID는 1, 2, 3, 4이므로, 고유한 고객 수는 4명입니다.
      결과값: **전체_고객_수 = 4**
     **(3) CALCULATE와 함께 고유한 제품별 매출 합산**
      **총_매출 = CALCULATE(SUM(매출_테이블[금액]), VALUES(매출_테이블[제품]))**
      **설명**:
      VALUES(매출_테이블[제품]) 부분이 매출_테이블의 제품 열에서 고유한 제품을 반환합니다.
      SUM(매출_테이블[금액])은 각 고유 제품별 매출 금액을 합산합니다.
      **결과**:

![Image](https://upload.cafenono.com/image/slashpagePost/20241118/171210_pWaJfudZN6bJvzzq8R?q=80&s=1280x180&t=outside&f=webp)

      각 **고유한 제품의 매출을 계산하여 제품별로 매출 총합을 반환**합니다.

For the site tree, see the [root Markdown](https://slashpage.com/powerbicokr.md).
