DAX SUM 함수 정리: 열 합계부터 SUMX로 넘어가는 기준까지

DAX를 처음 배울 때 가장 먼저 쓰는 함수가 SUM입니다. 엑셀의 SUM과 이름이 같아서 “아, 그거구나” 하고 넘어가기 쉬운데, 엑셀처럼 셀 범위를 잡는 함수가 아니라는 점에서 한 번 짚고 가는 게 좋습니다. 그리고 어느 순간 “수량 곱하기 단가를 합쳐야 하는데 SUM으로는 안 되네?” 하는 지점이 반드시 옵니다. 그 경계가 어디인지까지 정리해 보겠습니다.

SUM은 이런 함수입니다

SUM은 열 하나에 들어 있는 숫자를 모두 더해서 값을 돌려줍니다. Microsoft 문서의 설명도 한 줄입니다. 반환값은 소수(decimal) 형태의 숫자입니다.

SUM( <열> )

인수는 열 하나뿐입니다. 셀 범위나 계산식은 넣을 수 없고, 모델에 있는 테이블의 열 이름을 테이블[열] 형태로 적습니다. 열 이름은 대괄호, 공백이 있는 테이블 이름은 작은따옴표로 감쌉니다.

총수량 = SUM( Sales[수량] )

예제 데이터

이 글의 모든 예제는 아래 표를 기준으로 합니다. 설명하려고 제가 임의로 만든 가상 데이터이고, 단가는 만원 단위입니다. 결과 숫자도 Power BI에서 돌린 화면이 아니라 계산 과정을 따라가며 직접 구한 값입니다.

주문상품수량단가
1노트북1120
2마우스34
3모니터220
4마우스54
5노트북2100

수량 열을 전부 더하면 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)
노트북3320
마우스832
모니터240
합계13392

정리하면 기준은 단순합니다. 열 하나를 그대로 더하면 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에서도 측정값과 계산 열에 쓸 수 있습니다.
  • 지역 설정에 따라 인수 구분자가 쉼표 대신 세미콜론일 수 있습니다. 식을 붙여 넣었는데 오류가 난다면 먼저 확인해 보세요.

자주 하는 실수

  1. 합계끼리 곱하기: 위에서 본 것처럼 SUM(수량) * SUM(단가)는 매출이 아닙니다. 행 단위 계산은 SUMX입니다.
  2. 계산 열에 그냥 SUM: 모든 줄에 같은 전체 합계가 들어갑니다.
  3. 빈 값을 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개의 생각

댓글 남기기