목차
개요
이번 포스트는 가장 많이 사용되는 DAX SUM 함수와 반복기 함수 (iterator function) SUMX 함수 특징에 대해 알아보려고 합니다.
함수 이름 마지막에 'X'가 붙은 함수를 반복기 함수라고 하는데, 반복기 함수는 계산되는 원리를 모르면 실수하기 너무 쉽습니다. 간단한 예제 데이터를 가지고 SUM, SUMX 함수가 어떤 차이를 만들어 내는지 살펴보려 합니다.
측정값을 아래와 같이 만들었을 때,
- [SUM of Amount]와 [SUMX of Amount]는 동일 결과를
- [SUMX of Amount 1]는 다른 결과를 보여줍니다.
측정값 [Sum of Amount]가 어떻게 계산되는지는 기초적인 이해가 필요하다면 아래 글을 찾아보세요.
- 이전 글 링크: Power BI DAX 기초 - 측정값 만들기
Power BI DAX 기초 - 측정값 만들기
목차 개요 지난 포스트에서 측정값에 대한 기본적인 이해를 했고 시각적 개체로 몇 가지 예를 봤습니다.이전 글 링크: Power BI DAX 기초 - 측정값 이해 이번 포스트는 Power BI Desktop 프로그램을
brightsomuch.tistory.com
예제에 사용된 데이터 및 측정값
간단한 형태의 데이터와 측정값을 사용하고 있습니다. 날짜별 제품의 가격과 판매량을 보여줍니다.
측정값. Amount의 합계를 계산합니다.
Sum of Amount =
SUM ( SHOP[Amount] )
SUMX 동작
SUMX 문법
DAX SUMX 함수에 대해 아래와 같이 정의되어 있습니다. 어떤 의미인지 살펴봅니다.
(Power BI에서 사용하는 용어에 익숙해지기 위해 가능한 영문 라이브러리 문서를 참고하는 게 도움이 됩니다. 내용 파악을 위해서 한글 라이브러리 문서도 같이 사용하세요.)
https://learn.microsoft.com/en-us/dax/sumx-function-dax
열 이름만을 입력으로 받는 SUM과 달리, SUMX는 테이블 전체와 각 행에서 수행될 식 (expression)을 입력으로 받습니다.
이렇게 식으로 줄 수 있다는 것은 그 활용에서 큰 장점을 갖습니다. SUM에서는 불가능하죠.
즉, SUM 함수는 주어진 열에 대한 합계를 구했지만, SUMX는 주어진 전체 테이블에서 각 행에 식을 수행한 다음 합계를 구하는 차이가 있습니다.
연습을 위해 아래와 같이 측정값을 만듭니다. 열과 열을 곱한다는 의미입니다.
(참고로 동일 수식을 통해 계산열을 만들수 있습니다. 이는 다른 포스트에서 다루도록 할게요.)
SUMX Sales =
SUMX ( SHOP, SHOP[Amount] * SHOP[Price] )
함수에 사용되는 파라미터를 표시하는 방식입니다.
SUMX 동작 방식 - 반복기 함수
SUMX 함수는 반복기 함수 (iterator function)이고, 반복기 함수는 아래와 같이 정의되어 있습니다.
반복기 함수
지정된 테이블의 모든 행을 열거하고 각 행에 대해 지정된 식을 평가하는 DAX 함수입니다. 모델 계산에서 데이터를 요약하는 방법을 유연하게 제어할 수 있습니다.
측정값 SUMX Sales는 아래와 같은 방식으로 계산됩니다.
SUMX Sales =
SUMX ( SHOP, SHOP[Amount] * SHOP[Price] )
- 시각적 개체의 필터 컨텍스트에 의해 계산해야 할 것을 찾습니다. 첫번쨍 행은 Product = A에 대한 계산입니다.
- SUMX에 주어진 테이블을 읽어서 Product = A로 필터링합니다. (즉, 필터 컨텍스트가 테이블로 전파되고 있습니다)
- SUMX에 주어진 식 (expression)을 매 행마다 수행합니다.
- 행 별로 나온 결과를 모두 합해서 시각적 개체에 표시합니다.
시각적 개체 필터 컨텍스트 두 번째 행 Product = B, 세 번째 행 Product = C에 대한 계산을 2 ~ 4 과정으로 반복합니다.
반복기 함수는 테이블의 모든 행을 매 행마다 반복 수행하는 정보를 갖고 있는 행 컨텍스트에 따라 동작합니다.
반응형
SUMX 특징
SUMX - 원하는 테이블에서 바로 작업
SUMX 함수 입력으로 다양한 형태의 테이블을 제공할 수 있습니다. 이는 필요에 따라 테이블 조작 함수와 같이 사용할 수 있다는 것을 의미합니다.
ALL, ALLSELECTED 함수와 같이 사용하면서 시각적 개체 필터 정보를 제거할 수 있습니다. 즉, 필터에 영향을 받지 않고 전체 총량을 얻을 때 유용하게 사용됩니다.
SUMX - 합계 전에 다양한 연산 가능
기본적으로 사칙 연산뿐 아니라 입력으로 식을 넣을 수 있다는 것은 확장 가능한 기능을 제공할 수 있다는 것을 의미합니다. 나중에 어떻게 CALCULATE 함수와 사용될 수 있는지 살펴볼게요.
SUMX 실수하기 쉬운 예
식 - 측정값
아래와 같이 측정값 "SUMX of Amount"를 만들면 어떤 결과가 나올까요?
Sum of Amount =
SUM ( SHOP[Amount] )
SUMX of Amount =
SUMX ( SHOP, [Sum of Amount] )
- 측정값을 표시하는 방법으로 SHOP[Sum of Amount]로도 할 수 있습니다. 그러나 이는 열 이름과 혼동을 줄 수가 있어서 측정값의 경우 테이블 이름을 같이 사용하지 않습니다.
시각적 개체 테이블을 통해서 결과를 확인해 보면 SUM과 SUMX는 같은 결과를 나타냅니다.
측정값 [SUMX of Amount] 계산되는 순서입니다.
SUMX of Amount =
SUMX ( SHOP, [Sum of Amount] )
- 시각적 개체의 필터 컨텍스트에 의해 계산해야 할 것을 찾습니다. 첫 번째 행 Product = A에 대한 계산입니다.
- SUMX에 주어진 테이블을 읽어서 Product = A로 필터링합니다. (즉, Product = A에 해당되는 행을 찾습니다)
- SUMX에 주어진 식 (expression)을 매 행마다 수행합니다.
- 주어진 식은 [Sum of Amount]입니다. 측정값은 필터 컨텍스트의 영향을 받는 값이죠.
- 해당 행은 다른 행과 동일하지 않습니다. 즉 유일한 거죠. 따라서 [Sum of Amount] 연산에 필요한 행은 자기 자신 말고 다른 것이 없습니다. 즉 각 행의 Amount가 결과가 됩니다.
- 행 별로 나온 결과를 모두 합해서 시각적 개체에 표시합니다.
시각적 개체 필터 컨텍스트 두 번째 행 Product = B, 세 번째 행 Product = C에 대한 계산을 2 ~ 4 과정으로 반복합니다.
식 - SUM 함수
이번에는 SUMX 함수에 SUM 함수를 식으로 넣었습니다. 어떤 결과가 나올까요?
변수로 측정값을 취급한다면 위의 식과 큰 차이가 없어 보입니다. 그러나 SUMX가 반복기 함수이기 때문에 완전히 다른 결과를 보입니다.
SUMX 함수는 아래와 같이 동작합니다.
SUMX of Amount 1 =
SUMX ( SHOP, SUM ( SHOP[Amount] ) )
- 시각적 개체의 필터 컨텍스트에 의해 계산해야 할 것을 찾습니다. 첫 번째 행 Product = A에 대한 계산입니다.
- SUMX에 주어진 테이블을 읽어서 Product = A로 필터링합니다. (즉, Product = A에 해당되는 행을 찾습니다)
- SUMX에 주어진 식 (expression)을 매 행마다 수행합니다.
- 주어진 식은 SUM(SHOP [Amount])입니다.Product = A를 만족하는 행에서 SUM(SHOP [Amount])를 수행합니다.
- SUM(SHOP [Amount])는 SHOP[Amount] 열 전체를 대상으로 합니다.
- 따라서 Product = A에 해당되는 행을 모두 찾아 더하게 됩니다.
- 행 별로 나온 결과를 모두 합해서 시각적 개체에 표시합니다.
시각적 개체 필터 컨텍스트 두 번째 행 Product = B, 세 번째 행 Product = C에 대한 계산을 2 ~ 4 과정으로 반복합니다.
SUMX 함수 정리
SUMX 함수를 통해 반복기 함수가 갖는 특징을 살펴봤습니다. 측정값은 필터 컨텍스트에 의해 계산되기에 눈에 잘 보이지 않고, 특히 반복기 함수는 그 동작을 모르면 실수하기 쉽죠.
모든 반복기 함수는 동일한 방식으로 계산됩니다. 즉, SUMX 필터 컨텍스트가 그대로 유지되면서 주어진 테이블 행 컨텍스트에 의해 동작합니다.
용어가 생소하고 어렵죠. 추후 CALCULATE, FILTER 등의 함수를 공부하면서 익숙해지면 됩니다.
마지막으로, 아래 식의 차이를 꼭 기억하세요.
'Power BI' 카테고리의 다른 글
Power BI DAX 기초 - ALLSELECTED 선택 기준 비율 구하는 방법 (0) | 2024.07.01 |
---|---|
Power BI DAX 기초 - ALL 전체에서 비율 구하는 방법 (0) | 2024.07.01 |
Power BI DAX 기초 - 시각적 개체 필터 관계 (0) | 2024.06.30 |
Power BI DAX 기초 - 측정값 만들기 (0) | 2024.06.30 |
Power BI DAX 기초 - 측정값 이해 (1) | 2024.06.30 |