4주차
Shared on March 29, 2026
Power BI 시간 인텔리전스 및 DAX 함수 실습
개요
- 목표: Power BI에서 시간 인텔리전스와 DAX를 활용해 데이터 모델을 구축하고, 측정값을 만들며 시각화를 완성한다.
- 핵심 내용: 날짜 테이블 생성 → 컬럼 추가 → 관계 설정 → 시각화 → DAX 함수 실습 → 측정값 관리 → 변수·필터 활용.
핵심 개념
| 항목 | 내용 |
|---|---|
| 시간 인텔리전스 함수 | CALENDAR, FORMAT, YEAR, MONTH, QUARTER, WEEKDAY, DATEADD, SAMEPERIODLASTYEAR, DATEBETWEEN, MTD, YTD, TOTALMTD, TOTALYTD 등 |
| DAX 함수 종류 | 집계: SUM, AVERAGE, MIN, MAX, COUNT, COUNTA; 필터: CALCULATE, FILTER, ALL, ALLSELECTED; 논리: IF, SWITCH, AND, OR; 텍스트: LEFT, RIGHT, MID, LEN; 수학: ROUNDUP, ROUNDDOWN, ABS; 통계: RANKX, PERCENTILEX.INC; 날짜: TODAY, NOW, YEAR, MONTH, DAY |
| 측정값 | 데이터 모델에 저장되는 계산 항목. 총 매출, 전월 매출, 전년 동월 매출, 증감률, 구성비, 비율, 핫스팟(핸드폰 매출) 등 |
| 관계 설정 | 날짜 테이블(Date) → 매출 테이블(Sales) : 1:다 관계. CALCULATE·FILTER 로 필터 컨텍스트를 조정 |
| 변수 활용 | VAR start_date = DATEADD(Date[Date], -3, MONTH) 등으로 가독성 향상 및 오류 방지 |
| 필터 함수 | ALL, ALLSELECTED, ALLEXCEPT 등으로 필터 컨텍스트를 제어 |
| Quick Measure | Power BI에서 자동으로 생성되는 측정값(예: 전년 대비 증감률)과 수동 측정값의 차이와 조정 방법 |
상세 노트
1. 날짜 테이블 만들기
-
CALENDARDate = CALENDAR(DATE(2019,1,1), DATE(2022,12,31)) -
컬럼 추가
- 연도:
Year = YEAR(Date[Date]) - 분기:
Quarter = "Q" & FORMAT(Date[Date], "Q") - 연월:
YearMonth = FORMAT(Date[Date], "yyyy-MM") - 월:
Month = MONTH(Date[Date]) - 월명(영문/한글):
MonthName = FORMAT(Date[Date], "MMM")/FORMAT(Date[Date], "MMMM") - 요일(영문/한글):
WeekdayName = FORMAT(Date[Date], "ddd")/FORMAT(Date[Date], "dddd") - 요일 번호:
Weekday = WEEKDAY(Date[Date], 2)(월=1, 일=7)
- 연도:
-
정렬 문제 해결
- 텍스트 컬럼(
MonthName)은 알파벳 순으로 정렬되므로, 숫자 컬럼(Month)을 기준으로 정렬 설정. - 요일도 마찬가지로
Weekday컬럼을 기준으로 정렬.
- 텍스트 컬럼(
2. 관계 설정
Date[Date]↔Sales[SaleDate](1:다).- 관계 창에서
카디널리티를 1:다로 확인 후 활성화. - 필요 시
관계 관리→새 관계를 사용해 연결.
3. 시각화 예시
- 라인 차트
- X축:
Date[Date](연/분기/월/일 수준 선택 가능) - Y축:
Sales[TotalSales]
- X축:
- 계층적 축:
Date[Year]→Quarter→Month→Day - 차트 제목, 축 레이블 등 서식은 시각화 개체 → 서식에서 조정.
4. DAX 측정값 만들기
| 목적 | DAX 예시 | 설명 |
|---|---|---|
| 총 매출 | Total Sales = SUM(Sales[Amount]) | 단순 합계 |
| 전월 매출 | Prev Month Sales = CALCULATE([Total Sales], DATEADD(Date[Date], -1, MONTH)) | DATEADD 로 한 달 전 컨텍스트 |
| 전년 동월 매출 | Same Month Last Year = CALCULATE([Total Sales], SAMEPERIODLASTYEAR(Date[Date])) | SAMEPERIODLASTYEAR 사용 |
| 증감률 | YoY Growth % = DIVIDE([Total Sales] - [Same Month Last Year], [Same Month Last Year], 0) | DIVIDE 로 0으로 나누는 상황 방지 |
| MTD / YTD 누계 | MTD Sales = TOTALMTD([Total Sales], Date[Date])<br>YTD Sales = TOTALYTD([Total Sales], Date[Date]) | TOTALMTD, TOTALYTD |
| 핸드폰 매출 | Phone Sales = CALCULATE([Total Sales], Sales[Category] = "Phone") | 필터 컨텍스트 지정 |
| 수량 구간 | Qty Group = SWITCH(TRUE(), Sales[Qty] < 10, "0-9", Sales[Qty] < 20, "10-19", ...) | SWITCH + TRUE() 로 범위 구분 |
| 구성비 | Sales Share = DIVIDE([Total Sales], CALCULATE([Total Sales], ALL(Date))) | 전체 대비 비율 |
| 비율 (All/AllSelected) | Share All = DIVIDE([Total Sales], CALCULATE([Total Sales], ALLSELECTED(Date))) | 선택된 필터만 유지 |
5. 변수 활용 예시
VAR start_date = DATEADD(Date[Date], -3, MONTH)
VAR end_date = DATEADD(Date[Date], 0, MONTH)
VAR result = CALCULATE([Total Sales], FILTER(ALL(Date), Date[Date] >= start_date && Date[Date] <= end_date))
RETURN result
- 변수로 시작·종료 날짜를 선언해 가독성 향상 및 중복 계산 방지.
6. 필터 함수 비교
| 함수 | 설명 | 예시 |
|---|---|---|
ALL | 모든 필터 제거 | CALCULATE([Total Sales], ALL(Date)) |
ALLSELECTED | 슬라이서 등 선택된 필터만 유지 | CALCULATE([Total Sales], ALLSELECTED(Date)) |
ALLEXCEPT | 특정 컬럼을 제외하고 모든 필터 제거 | CALCULATE([Total Sales], ALLEXCEPT(Date, Date[Year])) |
7. Quick Measure 활용 팁
- 전년 대비 증감률:
총 매출 YOY%Quick Measure 생성 → 자동으로DIVIDE([Total Sales], CALCULATE([Total Sales], SAMEPERIODLASTYEAR(Date[Date])))로 생성. - 수동으로 만든 측정값과 Quick Measure 결과가 동일함을 확인 후 필요 시 수식 조정.
8. 실전 팁
- 텍스트 vs 숫자 정렬:
MonthName같은 텍스트 컬럼은Month숫자 컬럼을 기준으로 정렬 설정. - 필터 컨텍스트:
CALCULATE안에FILTER를 넣어 특정 조건만 적용. - 변수 선언: 복잡한 계산은
VAR로 변수 선언 후RETURN으로 반환하면 오류 방지. - All vs AllSelected: 전체 집계 vs 현재 선택된 필터만 고려할 때 구분해서 사용.
마무리
- Power BI에서 날짜 테이블을 기반으로 다양한 시간 인텔리전스 함수와 DAX 함수를 활용해 실시간 비즈니스 인사이트를 도출할 수 있다.
- 측정값은 한 곳에 모아두면 시각화 시 편리하며, Quick Measure를 활용해 반복적인 계산을 빠르게 생성할 수 있다.
- 필터 함수(
ALL,ALLSELECTED)와 변수 선언은 모델을 깔끔하게 유지하고 오류를 줄이는 핵심 도구다.