데이터 분석을 할 때 전년도 대비 증감률, 전분기 대비 증감률, 전월 대비 증감률을 보기도 합니다. 오늘은 Power BI에서 YoY(Year on Year), QoQ(Quarter on Quarter), MoM(Month on Month) 구하는 DAX Pattern을 정리해 보겠습니다.
결과
첫 번째 테이블은 전년도 대비 증감률 (YoY)를 보여 줍니다. 첫째 열에 연도, 둘째 열에 해당 연도 거래량의 합, 세 번째 열에 전년도 거래량 합, 넷째 열에 전년도 대비 증감, 마지막 열에 전년도 대비 증감률의 결과가 확인됩니다.
두 번째 테이블은 전분기 대비 증감률 (QoQ)를 보여 줍니다. 첫째 열에 연도 및 분기, 둘째 열에 해당 연도 및 분기 거래량의 합, 세 번째 열에 전분기 거래량 합, 넷째 열에 전분기 대비 증감, 마지막 열에 전분기 대비 증감률의 결과가 확인됩니다.
세 번째 테이블은 전월 대비 증감률 (MoM)를 보여 줍니다. 첫째 열에 연도 및 분기 및 월, 둘째 열에 해당 연도 및 분기 및 월 거래량의 합, 세 번째 열에 전월 거래량 합, 넷째 열에 전월 대비 증감, 마지막 열에 전월 대비 증감률의 결과가 확인됩니다.
작업순서
1. RAW DATA 받기 및 불러오기
데이터 분석을 위한 데이터를 직접 만들지 않고 캐글에서 다운로드하여 진행하였습니다. 아래 링크에서 csv파일 받으셔서 진행하시면 되겠습니다.
Power BI에서 불러오면 아래 화면과 같습니다. 날짜, 상점 번호, 거래량으로 구성되어 있습니다.
2. DAX 식 작성
방법1 - DAX 식 직접 작성
먼저 거래량의 합을 구하는 측정값을 구합니다.
transactions(SUM) = SUM('transactions'[transactions])
이제 전년도 거래량의 합을 구해야 하겠죠? CALCULATE와 DATEADD 함수를 사용하여 구현합니다.
(전분기 거래량을 구하려면 YEAR 대신에 QUARTER를 입력하면 됩니다. 전월 거래량을 구하려면 YEAR 대신에 MONTH를 입력하면 됩니다.)
transactions_PY =
CALCULATE(
[transactions(SUM)],
DATEADD('transactions'[date].[Date], -1, YEAR)
)
CALCULATE와 DATEADD의 사용법에 대해서는 아래 링크 포스팅 참조하시기 바랍니다.
Power BI DAX 기초 - Time Intelligence
다음으로 YoY는 전년도 대비 증감이기 때문에 올해 거래량과 전년도 거래량을 빼서 구합니다.
(QoQ는 현재 거래량에서 전분기 거래량을 빼주면 됩니다. YoY는 현재 거래량에서 전월 거래량을 빼주면 됩니다.)
transactionsYoY = [transactions(SUM)] - [transactions_PY]
다음으로 YoY%는 전년도 대비 증감률이기 때문에 YoY를 전년도 거래량으로 나눠줍니다. DIVIDE는 두 개의 인수를 나눠주는 함수입니다.
(QoQ%를 구하려면 QoQ를 전분기 거래량으로 나눠주면 됩니다. MoM%는 MoM을 전월 거래량으로 나눠주면 됩니다.)
transactionsYoY% = DIVIDE([transactionsYoY], [transactions_PY])
방법 2 - 빠른 측정값
DAX 함수에 익숙하지 않다면 빠른 측정값으로 손쉽게 YoY%를 구할 수 있습니다. 아래 캡처와 같이 계산에는 전년도 대비 변화를 선택, 기준 값은 transactions개를 선택, 날짜는 date 선택, 기간수는 1을 선택하고 확인을 누릅니다.
(QoQ%는 계산에서 전분기 대비 변화를 선택하시면 됩니다. MoM%는 계산에서 전월 대비 변화를 선택하면 됩니다.)
확인을 누르면 DAX식이 아래와 같이 자동으로 구현이 됩니다. 위에서 직접 입력한 DAX식과 유사합니다.
transactionsYoY%(빠른 측정값) =
IF(
ISFILTERED('transactions'[date]),
ERROR("시간 인텔리전스 빠른 측정값은 Power BI에서 제공하는 날짜 계층 구조 또는 기본 날짜 열을 통해서만 그룹화하거나 필터링할 수 있습니다."),
VAR __PREV_YEAR =
CALCULATE(
SUM('transactions'[transactions]),
DATEADD('transactions'[date].[Date], -1, YEAR)
)
RETURN
DIVIDE(SUM('transactions'[transactions]) - __PREV_YEAR, __PREV_YEAR)
)
정리 소감
YoY, QoQ, MoM의 뜻에 대해서 이해를 할 수 있었습니다. 전년도, 전분기, 전월 대비의 증감률을 구하면 현재의 데이터가 갖는 상대적 크기에 대한 인사이트를 찾을 수 있겠네요. DAX 식에 익숙하다면 직접 구해도 되고, 그렇지 않다면 빠른 측정값을 활용하면 쉽게 DAX 식을 작성할 수 있었습니다.
'데이터 분석 및 업무 자동화' 카테고리의 다른 글
MySQL 조건에 조건을 더하는 서브 쿼리 알아보기 (0) | 2022.04.13 |
---|---|
MySQL 여러 테이블 한번에 다루는 방법 (UNION, UNION ALL) (0) | 2022.04.12 |
Power BI EARLIER 함수 사용하여 그룹별 순위 구하기 (0) | 2022.04.06 |
Power BI DAX RANKX 그룹별 순위 구하기 (feat. 아파트 평단가 시도별 시군구별 순위) (0) | 2022.04.05 |
Power BI DAX Pattern - 누적합계 구하는 방법 (Cumulative total) (0) | 2022.04.01 |
댓글