Power BI를 쓰다 보면 “DAX”라는 말이 꼭 나옵니다. 엑셀 수식과 비슷해 보여도, 막상 써 보면 결과가 이상할 때가 많죠.
특히 CALCULATE 함수에서 많이 막힙니다. 이 글은 DAX의 기본과 SUM, CALCULATE를 차근차근 정리합니다.
🎯 먼저 DAX가 뭔가요?
DAX(Data Analysis Expressions)는 데이터 모델에서 계산을 만드는 수식 언어입니다. Power BI, Excel의 Power Pivot, Analysis Services에서 쓰입니다.
DAX 수식은 아래 네 곳에서 쓰입니다.
• 측정값(Measure): 보고서 상황에 따라 값이 바뀌는 계산
• 계산 열(Calculated column): 표에 열을 추가해 행마다 계산
• 계산 테이블: 수식으로 만드는 새 표
• 행 수준 보안(RLS): 사람마다 볼 수 있는 행을 제한
처음에는 측정값부터 익히세요. 측정값은 슬라이서나 필터를 바꿀 때마다 그 상황(컨텍스트)에 맞게 다시 계산됩니다. 반면 계산 열은 값이 표에 저장되고, 데이터를 새로 고칠 때 다시 계산됩니다.
구분 | 측정값 | 계산 열
계산 단위 | 보고서의 각 셀 | 표의 각 행
값 저장 | 저장 안 함(보일 때 계산) | 모델에 저장
값이 바뀌는 때 | 필터·슬라이서를 바꿀 때 | 데이터 새로 고침 때
입문 추천 | ⭐ 먼저 익히기 | 필요할 때 사용
📋 시작 전 준비사항
✅ 1단계: Power BI Desktop 설치
✅ 2단계: 연습용 표 불러오기 (예: 매출 표, 매장 표)
✅ 3단계: 두 표의 관계(Relationship) 확인
✅ 4단계: 보고서에 표(Table) 시각화 하나 올리기
✅ 5단계: 모델링 탭에서 새 측정값 만들기
• Power BI Desktop: 무료 데이터 모델링·보고서 앱 (Microsoft 문서 기준)
• 보고서를 온라인에서 공유하는 서비스 기능은 별도 요금제가 있을 수 있습니다. 최신 요금은 공식 사이트에서 확인하세요.
🚀 1단계: SUM 함수
SUM은 가장 기본적인 합계 함수입니다. 열 하나의 숫자를 모두 더합니다.
SUM( <열> )
총매출 = SUM( Sales[금액] )
읽는 법은 간단합니다. “Sales 표의 금액 열을 모두 더해라”입니다.
표 이름은 작은따옴표, 열 이름은 대괄호로 감쌉니다. 표 이름에 공백이 있으면 ‘Sales Data'[금액]처럼 씁니다.
• SUM은 숫자 열에 쓰는 함수입니다
• 합계에 조건을 걸고 싶을 때는 SUMX나 CALCULATE를 씁니다
• 지역 설정에 따라 인수 구분자가 쉼표(,)가 아니라 세미콜론(;)일 수 있습니다
🚀 2단계: CALCULATE 함수
CALCULATE는 필터를 바꾼 상태에서 계산식을 다시 계산하는 함수입니다. DAX에서 가장 중요한 함수로 꼽힙니다.
CALCULATE( <계산식> [, <필터1> [, <필터2> …]] )
첫 번째 인수는 계산할 식입니다. 보통 SUM 같은 집계식을 넣습니다. 그다음 인수들이 필터입니다. 필터는 생략할 수 있습니다.
종류 | 설명 | 예
참/거짓 조건 | 열 하나에 조건을 거는 방식 | Store[지역] = “서울”
표 필터 | 표를 돌려주는 함수로 조건 설정 | FILTER( … )
필터 변경 함수 | 기존 필터를 지우거나 유지 | REMOVEFILTERS, ALL, KEEPFILTERS
예제 ① 서울 지역 매출만 보기
서울매출 =
CALCULATE(
SUM( Sales[금액] ),
Store[지역] = “서울”
)
예제 ② 전체 대비 비중 구하기
지역비중 =
DIVIDE(
[총매출],
CALCULATE( [총매출], REMOVEFILTERS( Store[지역] ) )
)
분모는 지역 필터를 모두 지운 전체 매출입니다. 그래서 각 지역의 매출을 전체로 나눈 비중이 나옵니다. DIVIDE는 0으로 나눌 때 오류 대신 빈 값을 돌려주는 안전한 나눗셈입니다.
지역 | 총매출 | 서울매출 | 지역비중
서울 | 600 | 600 | 60%
부산 | 300 | 600 | 30%
대구 | 100 | 600 | 10%
합계 | 1,000 | 600 | 100%
※ 설명용 가상 숫자이며, 직접 Power BI에서 실행한 결과가 아니라 계산 원리를 손으로 풀어 쓴 표입니다.
표를 보면 이상한 점이 있죠. 부산 줄의 서울매출이 600입니다. 이건 오류가 아닙니다.
표의 “부산” 줄에는 원래 지역 필터가 걸려 있습니다. 그런데 CALCULATE가 같은 열에 새 필터(서울)를 걸면 기존 필터를 덮어씁니다. 그래서 모든 줄에 서울 매출이 나옵니다.
기존 필터를 지우지 않고 겹쳐서 적용하고 싶다면 KEEPFILTERS를 함께 씁니다. 그러면 부산 줄에서는 “부산이면서 서울”이라 값이 비게 됩니다.
🧩 조금 더 알아두기
CALCULATE에 필터 없이 계산식만 넣는 경우도 있습니다. 이때는 행 컨텍스트를 필터 컨텍스트로 바꾸는 역할을 합니다(컨텍스트 전환).
계산 열이나 SUMX 같은 반복 함수 안에서 필요합니다. 처음에는 “이런 게 있구나” 정도로만 기억해도 충분합니다.
• 참/거짓 필터에는 한 표의 열만 쓸 수 있습니다
• 참/거짓 필터 안에서 측정값을 참조할 수 없습니다
• 참/거짓 필터 안에 CALCULATE를 겹쳐 쓸 수 없습니다
• 같은 열의 기존 필터는 새 필터가 덮어씁니다
• DirectQuery 모드의 계산 열이나 행 수준 보안 규칙에서는 CALCULATE가 지원되지 않습니다
🔧 자주 막히는 문제
Q: 모든 줄에 같은 숫자가 나와요
A: 같은 열에 필터를 걸어 기존 필터가 덮어써진 것일 수 있습니다. KEEPFILTERS로 겹칠지, 의도한 동작인지 확인하세요.
Q: 필터에 측정값을 넣었더니 오류가 나요
A: 참/거짓 필터에는 측정값을 쓸 수 없습니다. FILTER 함수로 표 필터를 만들어 쓰세요.
Q: 수식을 입력했는데 구문 오류가 나요
A: 괄호가 닫혔는지, 표와 열 이름이 맞는지, 인수 구분자(쉼표/세미콜론)가 설정과 맞는지 확인하세요.
🎯 정리
• DAX는 데이터 모델의 계산 언어입니다
• SUM은 숫자 열의 합계입니다
• CALCULATE는 필터를 바꿔서 다시 계산합니다
• 같은 열의 기존 필터는 덮어써진다는 점을 기억하세요
오늘 예제를 내 데이터에 그대로 따라 해 보세요. 열 이름만 바꾸면 됩니다. 막히는 부분이 있다면 댓글로 남겨 주세요.
이 글은 Microsoft Learn의 DAX 문서(DAX overview, SUM function, CALCULATE function)를 참고해 직접 정리했습니다. 예제 숫자는 설명용 가상 데이터입니다. 함수 동작은 Power BI 버전에 따라 달라질 수 있으니 공식 문서를 함께 확인하세요.
• https://learn.microsoft.com/en-us/dax/dax-overview
• https://learn.microsoft.com/en-us/dax/sum-function-dax
• https://learn.microsoft.com/en-us/dax/calculate-function-dax