반응형
Power BI에서 DAX(Data Analysis Expressions) 함수를 사용할 때 가장 중요한 개념 중 하나는 함수의 반환 유형을 이해하는 것입니다. DAX 함수는 크게 스칼라 함수(Scalar Functions)와 테이블 함수(Table Functions)로 분류되며, 각각의 특성과 사용법을 정확히 파악해야 효과적인 DAX 수식을 작성할 수 있습니다.

DAX 함수의 반환 유형별 분류
스칼라 함수 (Scalar Functions)
스칼라 함수는 단일 값을 반환하는 함수입니다. 이 값은 숫자, 텍스트, 날짜, 부울 등 어떤 데이터 타입이든 될 수 있지만, 항상 하나의 값만을 반환합니다.
주요 특징:
- 하나의 단일 값만 반환
- 측정값(Measure)이나 계산 열(Calculated Column)에서 직접 사용 가능
- 시각화 요소에서 바로 표시 가능
- 필터 컨텍스트에 따라 결과가 달라짐
스칼라 함수의 카테고리:
- 집계 함수 (Aggregation Functions)
- SUM, AVERAGE, MIN, MAX, COUNT
- SUMX, AVERAGEX, MAXX, MINX, COUNTX (이터레이터 함수)
- 논리 함수 (Logical Functions)
- IF, SWITCH, AND, OR
- HASONEVALUE, ISBLANK, ISNUMBER
- 변환 함수 (Conversion Functions)
- VALUE, FORMAT, CONVERT
- 날짜/시간 함수 (Date/Time Functions)
- TODAY, NOW, YEAR, MONTH
테이블 함수 (Table Functions)
테이블 함수는 테이블 형태의 결과를 반환하는 함수입니다. 하나 이상의 열과 여러 행으로 구성된 테이블을 결과로 제공합니다.
주요 특징:
- 테이블 형태의 결과 반환 (행과 열)
- 시각화에서 직접 사용 불가
- 다른 함수의 입력값으로 주로 사용
- 계산 테이블 정의에 사용 가능
테이블 함수의 카테고리:
- 필터 함수 (Filter Functions)[10]
- FILTER, CALCULATETABLE, ALL, ALLEXCEPT
- VALUES, DISTINCT, REMOVEFILTERS
- 테이블 조작 함수 (Table Manipulation Functions)
- GROUPBY, SUMMARIZE, TOPN
- UNION, INTERSECT, EXCEPT
스칼라 함수 상세 가이드
1. 기본 집계 함수
SUM 함수
Total Sales = SUM(Sales[SalesAmount])
- 지정된 열의 모든 숫자 값을 합산
- 필터 컨텍스트에 따라 결과가 달라짐
- 가장 기본적이고 자주 사용되는 함수
AVERAGE 함수
Average Price = AVERAGE(Products[UnitPrice])
- 열의 산술 평균을 계산
- 숫자 값만 고려하며, 빈 값은 무시
2. 이터레이터 함수 (X 함수들)
SUMX 함수
Total Revenue = SUMX(Sales, Sales[Quantity] * Sales[UnitPrice])
- 테이블의 각 행에 대해 식을 평가하고 결과를 합산
- 행별 계산이 필요한 경우 필수적
- SUM보다 리소스를 더 많이 사용하므로 단순 합계에는 SUM 사용 권장
AVERAGEX 함수
Average Margin = AVERAGEX(Sales, Sales[SalesAmount] - Sales[Cost])
- 각 행에 대해 식을 계산하고 평균을 구함
- 복잡한 행별 계산의 평균이 필요할 때 사용
3. 논리 함수
HASONEVALUE 함수
Single Product Selected =
IF(HASONEVALUE(Products[ProductName]),
"Single Product",
"Multiple Products")
- 현재 필터 컨텍스트에서 지정된 열이 단일 값으로 필터링되었는지 확인
- 동적 측정값 생성에 유용
- 조건부 서식이나 동적 레이블에 활용
ISBLANK 함수
Has Value = IF(ISBLANK(Sales[Comment]), "No Comment", "Has Comment")
- 값이 비어있는지 확인
- 데이터 품질 검사나 조건부 로직에 사용
제약사항:
- 스칼라 함수는 계산 테이블에서 직접 사용할 수 없음
- 테이블 함수 내부에서 중간 계산으로만 사용 가능
- 컨텍스트 전환(Context Transition)을 이해해야 올바른 결과 획득
테이블 함수 상세 가이드
1. 필터 함수
CALCULATETABLE 함수
Western Sales Table =
CALCULATETABLE(
Sales,
Sales[Region] = "West",
Sales[Year] = 2023
)
- 수정된 필터 컨텍스트에서 테이블 식을 평가
- CALCULATE의 테이블 버전
- 여러 필터 조건을 AND 논리로 결합
FILTER 함수
High Value Sales =
FILTER(
Sales,
Sales[SalesAmount] > 10000
)
- 조건을 만족하는 행만 필터링하여 반환
- 복잡한 조건식 사용 가능
- CALCULATETABLE보다 유연하지만 성능상 불리할 수 있음
2. 고유값 함수
VALUES 함수
Product List = VALUES(Products[ProductName])
- 현재 필터 컨텍스트에서 열의 고유값 반환
- 관계가 잘못된 경우 추가 빈 행이 포함될 수 있음
- 필터 컨텍스트를 준수함
DISTINCT 함수
Unique Categories = DISTINCT(Products[Category])
- 열의 고유값을 반환
- VALUES와 유사하지만 잘못된 관계의 빈 행을 포함하지 않음
- 빈 값은 계산하지 않음
ALL 함수
All Products = ALL(Products[ProductName])
- 필터를 무시하고 모든 고유값 반환
- 필터 컨텍스트와 무관하게 전체 데이터 반환
- 백분율 계산이나 전체 대비 비교에 유용
제약사항:
- 테이블 함수의 결과는 시각화에서 직접 표시할 수 없음
- 다른 함수의 매개변수로만 사용 가능
- 단일 행, 단일 열 테이블만 자동으로 스칼라로 변환됨
특수 함수 유형
부울 함수 (Boolean Functions)
Is Weekend = WEEKDAY(Sales[Date]) IN {1, 7}
- TRUE 또는 FALSE 값 반환
- IF문이나 SWITCH문과 함께 사용
- 조건부 로직의 기초
수정자 함수 (Modifier Functions)
KEEPFILTERS 함수
Filtered Sales =
CALCULATE(
SUM(Sales[SalesAmount]),
KEEPFILTERS(Sales[Category] = "Electronics")
)
- CALCULATE 함수의 필터 동작을 수정[22][23]
- 기존 필터를 덮어쓰지 않고 추가로 적용
- 더 정교한 필터 제어 가능
CROSSFILTER 함수
No Relationship Filter =
CALCULATE(
SUM(Sales[SalesAmount]),
CROSSFILTER(Sales[ProductID], Products[ProductID], NONE)
)
- 관계의 교차 필터링 방향을 제어
- 관계를 일시적으로 비활성화하거나 방향 변경 가능
실전 활용 시나리오
시나리오 1: 동적 퍼센티지 계산
Sales Percentage =
VAR CurrentSales = SUM(Sales[SalesAmount])
VAR TotalSales =
CALCULATE(
SUM(Sales[SalesAmount]),
ALL(Products[Category])
)
RETURN
DIVIDE(CurrentSales, TotalSales, 0)
시나리오 2: 조건부 집계
Premium Customer Sales =
SUMX(
FILTER(
Customers,
Customers[CustomerType] = "Premium"
),
RELATED(Sales[SalesAmount])
)
시나리오 3: 계층별 계산
Category Sales =
IF(
HASONEVALUE(Products[Category]),
SUM(Sales[SalesAmount]),
BLANK()
)
성능 최적화 팁
- 단순 집계에는 기본 함수 사용: SUM > SUMX
- 필터 함수 선택: CALCULATETABLE > FILTER (성능상 유리)
- 변수 활용: 복잡한 계산을 변수로 저장하여 재사용
- 컨텍스트 전환 최소화: 불필요한 CALCULATE 사용 지양
일반적인 오류와 해결책
오류 1: "Table of Multiple Values" 에러
// 잘못된 예
Wrong Measure = Products[ProductName]
// 올바른 예
Correct Measure =
IF(
HASONEVALUE(Products[ProductName]),
VALUES(Products[ProductName]),
"Multiple Products"
)
오류 2: 스칼라 함수를 테이블 위치에 사용
// 잘못된 예
Wrong Table = SUM(Sales[SalesAmount])
// 올바른 예
Correct Table =
SUMMARIZE(
Sales,
Sales[Category],
"Total Sales", SUM(Sales[SalesAmount])
)
DAX 함수의 반환 유형을 정확히 이해하고 활용한다면, Power BI에서 더욱 강력하고 효율적인 데이터 분석 솔루션을 구축할 수 있습니다. 각 함수의 특성을 파악하여 적절한 상황에서 올바른 함수를 선택하는 것이 성공적인 BI 개발의 핵심입니다.
반응형
✨
놓치면 아쉬운 추천 글, 함께 읽어보세요!
- 추천 글을 불러오는 중입니다...