본문 바로가기
● Data Visualization

(Power BI) DAX 함수의 반환 유형별 분류: 스칼라 vs 테이블 함수

by DataFolio.lab 2025. 10. 9.
반응형

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

(Power BI) DAX 함수의 반환 유형별 분류: 스칼라 vs 테이블 함수


DAX 함수의 반환 유형별 분류

스칼라 함수 (Scalar Functions)

스칼라 함수는 단일 값을 반환하는 함수입니다. 이 값은 숫자, 텍스트, 날짜, 부울 등 어떤 데이터 타입이든 될 수 있지만, 항상 하나의 값만을 반환합니다.

주요 특징:

  • 하나의 단일 값만 반환
  • 측정값(Measure)이나 계산 열(Calculated Column)에서 직접 사용 가능
  • 시각화 요소에서 바로 표시 가능
  • 필터 컨텍스트에 따라 결과가 달라짐

스칼라 함수의 카테고리:

  1. 집계 함수 (Aggregation Functions)
    • SUM, AVERAGE, MIN, MAX, COUNT
    • SUMX, AVERAGEX, MAXX, MINX, COUNTX (이터레이터 함수)
  2. 논리 함수 (Logical Functions)
    • IF, SWITCH, AND, OR
    • HASONEVALUE, ISBLANK, ISNUMBER
  3. 변환 함수 (Conversion Functions)
    • VALUE, FORMAT, CONVERT
  4. 날짜/시간 함수 (Date/Time Functions)
    • TODAY, NOW, YEAR, MONTH

테이블 함수 (Table Functions)

테이블 함수는 테이블 형태의 결과를 반환하는 함수입니다. 하나 이상의 열과 여러 행으로 구성된 테이블을 결과로 제공합니다.

주요 특징:

  • 테이블 형태의 결과 반환 (행과 열)
  • 시각화에서 직접 사용 불가
  • 다른 함수의 입력값으로 주로 사용
  • 계산 테이블 정의에 사용 가능

테이블 함수의 카테고리:

  1. 필터 함수 (Filter Functions)[10]
    • FILTER, CALCULATETABLE, ALL, ALLEXCEPT
    • VALUES, DISTINCT, REMOVEFILTERS
  2. 테이블 조작 함수 (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()
)

성능 최적화 팁

  1. 단순 집계에는 기본 함수 사용: SUM > SUMX
  2. 필터 함수 선택: CALCULATETABLE > FILTER (성능상 유리)
  3. 변수 활용: 복잡한 계산을 변수로 저장하여 재사용
  4. 컨텍스트 전환 최소화: 불필요한 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 개발의 핵심입니다.

반응형

놓치면 아쉬운 추천 글, 함께 읽어보세요!

  • 추천 글을 불러오는 중입니다...