BI & Visualization/Power BI

Power BI | DAX (Data Analysis Expressions), 계산 열(Calculated Column), 측정값(Measure), DAX 함수

올리브한입 2025. 3. 27. 05:20
반응형

DAX (Data Analysis Expressions)란?

Power BI를 사용할 때 데이터 모델에서 계산 및 집계를 수행해야 하는 경우가 많습니다. 예를 들어, 총매출을 계산하거나, 전년 대비 성장률을 분석하거나, 특정 조건에 맞는 데이터를 필터링해야 할 수도 있습니다. 이러한 작업을 수행할 때 사용하는 것이 DAX(Data Analysis Expressions)입니다.

Calculated Column vs.  Measure

DAX에서는 데이터를 처리할 때 계산 열(Calculated Column)측정값(Measure)을 구분하는 것이 중요합니다.

 

계산 열(Calculated Column)

  • 테이블에 새로운 열을 추가할 때 사용됩니다.
  • 각 행별로 계산이 수행되며, 데이터 모델 내에 물리적으로 저장됩니다.

예시를 들어보겠습니다. 계산 열을 추가하고 싶은 테이블을 선택하고, Modeling 탭 - New Column을 사용하여 새로운 열을 추가합니다. 

Years into loan = 'Loan Period'[Loan Period]/12

Loan Period 테이블에서 생성한 월별 기간(Loan Period)을 년 단위로 변환합니다. 이 수식의 결과는 대출 시작부터 현재까지의 년수를 보여줍니다. 예를 들어, Loan Period가 24일 경우, Years into loan 값은 2년이 됩니다.

Profit = Sales[Revenue] - Sales[Cost]

이 계산 열은 각 행에 대해 매출(Revenue)과 비용(Cost)의 차이를 계산하여 Profit 값을 생성합니다. 따라서 계산된 값은 테이블의 각 행에 대해 고정된 값으로 저장됩니다.

 

측정값(Measure)

  • 데이터의 집계 결과를 동적으로 계산합니다.
  • 필터 컨텍스트에 따라 값이 달라지며, 테이블에 물리적으로 저장되지 않고 필요할 때마다 계산됩니다.
Total Profit = SUM(Sales[Revenue]) - SUM(Sales[Cost])

이 측정값은 총 매출 총 비용의 합계를 계산하여 총 이익을 구합니다. SUM() 함수는 동적으로 필터가 적용될 때마다 해당 값이 계산되도록 합니다. 예를 들어, 사용자가 특정 연도 지역에 필터를 적용하면, Total Profit 값이 필터에 맞게 즉시 변경됩니다.

 

DAX 함수

GENERATESERIES()

지정한 시작 값과 끝 값 사이의 연속적인 숫자 또는 날짜를 생성하는 함수입니다.

New DAX Table = GENERATESERIES(<state value>, <end value> [,<increment>])

이 함수를 사용하기 위해서는 Modeling 탭 - New Table을 사용하여 새 테이블을 생성해야 합니다. 

Loan Period = GENERATESERIES(1, 360, 1)

이 수식을 사용하면 1에서 360까지 1씩 증가하는 숫자가 생성됩니다. 이를 통해 월별 대출 상환 계산을 할 수 있습니다.

DATE()

DATE() 함수는 DAX에서 날짜 값을 생성할 때 사용하는 함수입니다. 이 함수는 연도(Year), 월(Month), 일(Day)값을 입력받아 해당 날짜를 반환합니다.

= DATE(Year, Month, Day)

다음은 현재 연도와 월을 기반으로 날짜를 생성하는 예시입니다.

Current Month First Day = DATE(YEAR(TODAY()), MONTH(TODAY()), 1)

 

이 수식은 현재 연도와 월의 첫 번째 날을 반환합니다. 예를 들어, 오늘 날짜가 2025년 3월 26일이라면, 결과는 2025년 3월 1일이 됩니다.

CALENDAR vs. CALENDARAUTO

CALENDAR CALENDARAUTO는 DAX에서 날짜 테이블을 생성하는 데 사용되는 함수입니다. 이 두 함수는 모두 날짜 범위를 생성하지만, 그 방식에는 차이가 있습니다. 각각의 함수에 대해 설명드리겠습니다.

CALENDAR(StartDate, EndDate) 

CALENDAR 함수는 시작 날짜 끝 날짜를 명시적으로 지정하여 날짜 범위를 생성하는 함수입니다. 이 함수는 지정한 날짜 범위 내의 날짜를 포함하는 테이블을 반환합니다.

CALENDARAUTO([<alternative year end>])

CALENDARAUTO 함수는 자동으로 날짜 범위를 생성합니다. 이 함수는 모델에 있는 데이터에서 최소 날짜 최대 날짜를 기반으로 날짜 범위를 자동으로 결정합니다.

MAX vs. MAXA vs. MAXX

DAX에서 MAX(), MAXA(), MAXX()는 모두 최댓값을 찾는 함수이지만, 작동 방식이 다릅니다.

Max Revenue = MAX(Sales[Revenue])

Sales[Revenue] 열에서 가장 큰 매출(Revenue) 값을 반환합니다.

Max Value = MAXA(Sales[Discount Applied])

Sales[Discount Applied] 열이 TRUE/FALSE(할인 적용 여부) 값을 포함하는 경우,

  • TRUE = 1, FALSE = 0으로 변환 후 최댓값 반환합니다.
  • 즉, TRUE가 하나라도 있으면 결과는 1이 됩니다.
Max Sales Value = MAXX(Sales, Sales[Quantity] * Sales[Unit Price])

이 예제에서는 Sales 테이블에서 각 행(Row)에서 Quantity * Unit Price를 먼저 계산한 후, 그 중 최댓값을 반환합니다.

우선, 각 행에서 Quantity * Unit Price 계산합니다. 그 후 계산된 값 중 최댓값을 찾고, 결과를 반환합니다.

반응형