DAX(데이터 분석 식)는 Power BI와 같은 도구에서 데이터를 집계하고 분석하는 강력한 언어입니다. 이번 글에서는 자주 사용하는 AVERAGEX, FILTER, ALL 함수의 개념과 활용법을 살펴본 뒤, 이를 활용한 Weekday Sales Goal 예제를 소개합니다.
DAX
복사편집
AVERAGEX(<table>, <expression>)
DAX
복사편집
AvgSalesPerProduct =
AVERAGEX(
SUMMARIZE(Sales, Sales[ProductID], "TotalSales", SUM(Sales[Amount])),
[TotalSales]
)
SUMMARIZE로 제품별 매출 합계를 계산한 뒤, 전체 제품의 평균 매출을 반환합니다.DAX
복사편집
FILTER(<table>, <filter>)
DAX
복사편집
HighValueOrders =
FILTER(
Sales,
Sales[Amount] > 1000
)
Sales 테이블에서 매출액이 1000을 초과하는 행만 반환합니다.DAX
복사편집
ALL( [<table> | <column>[, <column>[, …]]] )
DAX
복사편집
TotalAllSales =
CALCULATE(
SUM(Sales[Amount]),
ALL(Sales)
)
Sales 테이블의 전체 매출 합계를 반환합니다.DAX
복사편집
Weekday Sales Goal =
CALCULATE(
AVERAGEX(
VALUES(D_Calendar[Date]),
[S1_Daily AVG Sales (Qty)] -- 일별 평균 판매량
),
ALL(Sales[SalesDate]), -- SalesDate 필터 제거
ALL(D_Calendar[Date]), -- Calendar 날짜 필터 제거
FILTER(
D_Calendar,
D_Calendar[Weeknum] =
WEEKDAY(MAX(Sales[SalesDate]))
)
)
CALCULATE:AVERAGEX를 계산하면서, 뒤쪽의 ALL과 FILTER 조건을 적용해 컨텍스트를 조정합니다.AVERAGEX:VALUES(D_Calendar[Date])는 현재 필터 컨텍스트에서 날짜 목록을 가져옵니다.[S1_Daily AVG Sales (Qty)]는 각 날짜의 일별 평균 판매량을 계산하는 측정값(Measure)입니다.ALL:ALL(Sales[SalesDate])와 ALL(D_Calendar[Date])는 보고서에 설정된 날짜 필터를 무시하고 전체 데이터로 계산합니다.FILTER:D_Calendar 테이블에서 가장 최근 판매일의 요일과 같은 요일에 해당하는 날짜만 필터링합니다.ALL은 기존 필터를 제거하고, FILTER는 새 필터를 적용합니다. 이 과정을 이해하는 것이 핵심입니다.FILTER, AVERAGEX 등 행 단위로 계산되는 함수는 데이터 양이 많을수록 성능에 영향을 미칠 수 있습니다. 필요한 경우 요약 테이블을 미리 생성하여 성능을 개선하세요.WEEKDAY는 기본적으로 1(일요일)~7(토요일)을 반환합니다. 필요에 따라 다른 기준(월요일 시작 등)을 설정할 수 있습니다.