DAX를 처음 배울 때 가장 먼저 쓰는 함수가 SUM입니다. 엑셀의 SUM과 이름이 같아서 “아, 그거구나” 하고 넘어가기 쉬운데, 엑셀처럼 셀 범위를 잡는 함수가 아니라는 점에서 한 번 짚고 가는 게 좋습니다. 그리고 어느 순간 “수량 곱하기 단가를 합쳐야 하는데 SUM으로는 안 되네?” 하는 지점이 반드시 옵니다. 그 경계가 어디인지까지 정리해 보겠습니다.
SUM은 이런 함수입니다
SUM은 열 하나에 들어 있는 숫자를 모두 더해서 값을 돌려줍니다. Microsoft 문서의 설명도 한 줄입니다. 반환값은 소수(decimal) 형태의 숫자입니다.
SUM( <열> )
인수는 열 하나뿐입니다. 셀 범위나 계산식은 넣을 수 없고, 모델에 있는 테이블의 열 이름을 테이블[열] 형태로 적습니다. 열 이름은 대괄호, 공백이 있는 테이블 이름은 작은따옴표로 감쌉니다.
총수량 = SUM( Sales[수량] )
예제 데이터
이 글의 모든 예제는 아래 표를 기준으로 합니다. 설명하려고 제가 임의로 만든 가상 데이터이고, 단가는 만원 단위입니다. 결과 숫자도 Power BI에서 돌린 화면이 아니라 계산 과정을 따라가며 직접 구한 값입니다.
| 주문 | 상품 | 수량 | 단가 |
|---|---|---|---|
| 1 | 노트북 | 1 | 120 |
| 2 | 마우스 | 3 | 4 |
| 3 | 모니터 | 2 | 20 |
| 4 | 마우스 | 5 | 4 |
| 5 | 노트북 | 2 | 100 |
수량 열을 전부 더하면 1 + 3 + 2 + 5 + 2 = 13입니다. 위의 총수량 측정값이 반환하는 값이 바로 13입니다.
상품별로 나눠 보면
이 측정값을 상품별 표에 올리면 별도의 조건 없이도 알아서 나뉘어 계산됩니다. 측정값은 보고서의 각 셀이 가진 필터 상태에 맞춰 다시 계산되기 때문입니다.
| 상품 | 총수량 |
|---|---|
| 노트북 | 3 |
| 마우스 | 8 |
| 모니터 | 2 |
| 합계 | 13 |
값이 없으면 0이 아니라 빈 값
DAX Guide에는 이런 설명이 있습니다. 해당 열에 값이 들어 있는 행이 하나도 없으면 결과는 0이 아니라 빈 값(BLANK)입니다. 예를 들어 데이터에 한 번도 등장하지 않은 “키보드”로 필터를 걸면, 표에서는 0이 아니라 아무것도 표시되지 않습니다. 0으로 보여주고 싶다면 측정값 끝에 + 0을 붙이는 식으로 처리하기도 하는데, 이 경우 데이터가 없는 항목까지 줄이 늘어나 표가 길어질 수 있으니 의도를 먼저 생각해 보는 게 좋습니다.
조건을 걸어서 더하고 싶을 때
“노트북 수량만 따로 보고 싶다”면 CALCULATE로 필터를 바꿔 줍니다.
노트북 수량 =
CALCULATE(
SUM( Sales[수량] ),
Sales[상품] = "노트북"
)
결과는 1 + 2 = 3입니다. CALCULATE가 어떻게 필터를 바꾸는지는 CALCULATE 함수 정리 글에 자세히 적어 두었습니다. Microsoft의 SUM 문서에는 “합산할 값을 걸러내고 싶다면 SUMX를 쓸 수 있다”는 안내가 있는데, 실무에서는 CALCULATE로 필터를 거는 방식을 더 자주 보게 됩니다.
SUM으로는 안 되는 순간
이제 매출을 구해 봅시다. 매출은 “수량 × 단가”를 행마다 계산한 뒤에 더해야 합니다. 처음 해 보면 아래처럼 쓰고 싶어집니다.
총매출_잘못 = SUM( Sales[수량] ) * SUM( Sales[단가] )
계산해 보면 수량 합계 13에 단가 합계 248(120 + 4 + 20 + 4 + 100)을 곱하니 3,224가 나옵니다. 실제 매출은 120 + 12 + 40 + 20 + 200 = 392입니다. 열 전체를 먼저 더한 다음에 곱했기 때문에 값이 전혀 다릅니다. 단가는 더하는 값이 아니라는 점도 같이 보입니다.
이때 쓰는 함수가 SUMX입니다. 테이블을 한 줄씩 돌면서 식을 계산하고, 그 결과를 더합니다.
총매출 =
SUMX(
Sales,
Sales[수량] * Sales[단가]
)
이렇게 쓰면 행마다 120, 12, 40, 20, 200이 계산되어 합이 392가 됩니다. 상품별로 나누면 노트북 320, 마우스 32, 모니터 40입니다.
| 상품 | 총수량 | 총매출(SUMX) |
|---|---|---|
| 노트북 | 3 | 320 |
| 마우스 | 8 | 32 |
| 모니터 | 2 | 40 |
| 합계 | 13 | 392 |
정리하면 기준은 단순합니다. 열 하나를 그대로 더하면 SUM, 행마다 계산이 필요하면 SUMX입니다. 수량 × 단가, 매출 − 할인처럼 두 열 이상이 얽히거나 식이 들어가면 SUMX로 가야 합니다. SUMX는 계산하는 도중에 변수나 임시로 만든 테이블 위에서도 쓸 수 있습니다.
SUM은 사실 SUMX의 줄임말
DAX Guide에 따르면 열 하나에 쓴 SUM은 내부적으로 SUMX를 실행하는 것과 같고, 둘 사이에 성능 차이는 없다고 합니다. 즉 아래 두 식은 같은 계산입니다.
SUM( Sales[수량] )
SUMX( Sales, Sales[수량] )
그러니 “SUM이 더 빠르니까 SUMX는 피해야 한다”는 식으로 외울 필요는 없습니다. 열 하나를 더하는 경우에는 읽기 쉬운 SUM을 쓰고, 식이 필요하면 SUMX를 쓰면 됩니다. 다만 SUMX는 행 단위로 반복하는 함수라서, 반복 안에 무거운 계산이 들어가면 그 부분이 느려질 수는 있습니다.
계산 열에서 SUM을 쓰면 생기는 일
상품 테이블에 “상품 수량” 계산 열을 만들면서 이렇게 쓴다고 해 보겠습니다.
상품수량 = SUM( Sales[수량] )
상품 테이블의 모든 줄에 13이 들어갑니다. 계산 열에서는 “현재 행”이라는 행 컨텍스트가 생기지만, 행 컨텍스트는 다른 테이블을 걸러주지 않기 때문입니다. 상품별 합계를 얻으려면 CALCULATE로 감싸서 현재 행을 필터로 바꿔 줘야 합니다.
상품수량 = CALCULATE( SUM( Sales[수량] ) )
상품 테이블과 Sales 사이에 관계가 있다면 노트북 3, 마우스 8, 모니터 2가 들어갑니다. 이 부분이 막히면 CALCULATE 글의 “컨텍스트 전환” 항목을 같이 읽어 보세요.
쓸 때 알아둘 점
- SUM은 열 하나만 받습니다. 식이나 여러 열은 SUMX입니다.
- 숫자 열에 쓰는 함수입니다.
- 값이 없으면 0이 아니라 빈 값이 나옵니다.
- DAX Guide 기준으로 DirectQuery에서도 측정값과 계산 열에 쓸 수 있습니다.
- 지역 설정에 따라 인수 구분자가 쉼표 대신 세미콜론일 수 있습니다. 식을 붙여 넣었는데 오류가 난다면 먼저 확인해 보세요.
자주 하는 실수
- 합계끼리 곱하기: 위에서 본 것처럼 SUM(수량) * SUM(단가)는 매출이 아닙니다. 행 단위 계산은 SUMX입니다.
- 계산 열에 그냥 SUM: 모든 줄에 같은 전체 합계가 들어갑니다.
- 빈 값을 0으로 착각: 표에서 줄이 비어 보여도 오류가 아닙니다. 데이터가 없다는 뜻입니다.
비슷한 함수
- SUMX: 테이블을 한 줄씩 돌며 식을 계산해 더합니다.
- AVERAGE, MIN, MAX: 같은 방식으로 열 하나의 평균, 최솟값, 최댓값을 구합니다.
- COUNT, COUNTROWS: 값이 있는 행의 수, 테이블의 행 수를 셉니다.
- PRODUCT: 열의 숫자를 모두 곱합니다.
정리
SUM은 열 하나를 더하는 가장 단순한 집계 함수이고, 조건이 필요하면 CALCULATE, 행마다 계산이 필요하면 SUMX로 넘어갑니다. 이 세 가지의 역할을 구분해 두면 이후에 나오는 평균, 비율, 시간 비교 계산도 같은 틀 위에서 읽을 수 있습니다. 예제는 가상 데이터이니 본인 모델의 열 이름으로 바꿔서 직접 확인해 보시고, 함수 동작은 Power BI 버전에 따라 달라질 수 있으니 공식 문서도 함께 확인해 주세요.
참고한 자료
- Microsoft Learn, SUM function (DAX): https://learn.microsoft.com/en-us/dax/sum-function-dax
- Microsoft Learn, Aggregation functions (DAX): https://learn.microsoft.com/en-us/dax/aggregation-functions-dax
- DAX Guide, SUM: https://dax.guide/sum/
- DAX Guide, SUMX: https://dax.guide/sumx/
“DAX SUM 함수 정리: 열 합계부터 SUMX로 넘어가는 기준까지”에 대한 3개의 생각