본문 바로가기

Power BI/Power BI 정복하기

DAX함수 연간누적매출 측정값 만들기

매출 보고서를 작성할 때 기간별로 누적매출금액을 집계하는 경우가 많아요. 

여기서는 DAX의 시간 인텔리전스 함수를 활용하여 기간 누적 합계를 작성해 보도록 하죠. 

 

시간 인텔리전스에서 자주 사용하는 DATESYTD와 TOTALYTD를 사용할 것입니다. 

 

DATESYTD : 해당하는 연도의 첫번째 날짜(1월1일)부터 마지막 날짜(12월 31일) 사이의 모든 날짜를 테이블형태로 반환합니다. 즉 하나의 값으로 나오는 것이 아니라 여러 값을 가지고 있는 배열이라고 볼 수 있습니다. 

마지막 날짜는 선택사항으로 지정하지 않을 경우 작성하지 않아도 되고, 마지막 날짜가 없으면 해당 연도의 마지막 날짜로 집계합니다.

 

* 참고: 파란색 표기는 여러분의 테이블명과 열명, 측정값이름을 사용합니다. 

 

DATESYTD( <dates> , <year_end_date> )
DATESYTD( 날짜테이블의 날짜열, 마지막날짜 )

 

TOTALYTD : 연도에 해당하는 값을 계산할 수 있습니다. 

필터정의와 마지막 날짜는 선택사항입니다.

 

TOTALYTD( <expression>,  <dates> [,<filter>] [,<year_end_date>] )
TOTALYTD( 집계수식 또는 측정값, 날짜열, 필터정의, 마지막 날짜)

 

 

먼저 단순한 매출금액의 합계 측정값은 이렇게 작성할 수 있습니다. 

매출액 = SUM( 'Sales'[SalesAmount] )

 

 

DATESYTD를 사용한 연간누적매출액 측정값은 아래와 같이 작성하면 됩니다. 

 

연간누적매출액 (기본) =
     CALCULATE(
         [매출액],
         DATESYTD('Calendar'[Date])
     )

 
TOTALYTD를 사용한 연간누적매출액 측정값은 아래와 같이 작성하면 됩니다. 
 

연간누적매출액 = 
     TOTALYTD(
         [매출액],
         'Calendar'[Date]
      )

 
 

이 경우에 한가지 단점은 미래의 날짜에도 마지막 연도의 누적매출액이 모두 표시된다는 점입니다. 

이를 피하고 싶다면 IF함수를 추가해서 표시되지 않도록 할 수 있습니다. 

 

먼저, 매출이 있는 과거의 날짜는 True로 반환하고 매출이 없는 미래의 날짜는 False로 반환하는 측정값을 만들어 둡니다.

 

DATEVALUE_YN = 
VAR LastDate = 
    CALCULATE(
        MAX('Sales'[OrderDate]),
        REMOVEFILTERS()
    )
VAR FirstDate = 
    MIN('Calendar'[Date])
VAR YN = 
    FirstDate <= LastDate
RETURN 
    YN

 

그리고 매출이 있는 과거의 날짜에만 값이 표시되도록 IF함수를 추가합니다. 

 

연간누적매출액 (2) = 
IF(
    [DATEVALUE_YN],
    TOTALYTD(
        [매출액],
        'Calendar'[Date]
    )
)

 

 

DAX의 모든 시간 인텔리전스 함수는 아래 Power BI 공식 문서 사이트에서 확인해 보실 수 있습니다. 

https://learn.microsoft.com/ko-kr/dax/time-intelligence-functions-dax

 

DAX(시간 인텔리전스 함수) - DAX

다음에 대해 자세히 알아보세요. 시간 인텔리전스 함수

learn.microsoft.com