10 DAX Calculation For Tabular or PowerPivot Model 2015.11.06 잘레시아 김지원
목차 1. DAX Rolling Sum and Average Calculations 2. DAX First Day of Period Calculations 3. DAX Previous Period Calculations 4. DAX Semi-Additives Measures Calculations 5. DAX Use Relationships in a Calculation 7. DAX Year Over Year Growth Calculation 6. DAX YOY Percent Growth Calculation 8. DAX Previous QTD and MTD Calculation 10. DAX YTD, QTD and MTD calculations 9. DAX Previous YTD, Year QTD, Year MTD Calculation
1. DAX Rolling Sum and Average Calculations 조회일로부터 n일 사이의 총 합계(Rolling 90 Day Total Sales Amount)와 그의 평균(Rolling 90 Day Average Sales Amount)을 구하는 DAX 계산식 Rolling 90 Day Total Sales Amount : = CALCULATE( [Total Sales Amount] , DATESBETWEEN( 'Date'[Datekey], FIRSTDATE( DATEADD( LASTDATE( 'Date'[Datekey] ),-89,Day )), LASTDATE('Date'[Datekey]) )
1. DAX Rolling Sum and Average Calculations 평균(Rolling 90 Day Average Sales Amount)을 구하기 위해 90일 동안 값이 있는 Row 개수(Day Count)를 확인 Day Count: = COUNTX( DATESBETWEEN( 'Date'[Datekey] , FIRSTDATE( DATEADD( LASTDATE('Date'[Datekey]) ,-89,Day )), LASTDATE('Date'[Datekey]) ) , [Total Sales Amount]
1. DAX Rolling Sum and Average Calculations 평균(Rolling 90 Day Average Sales Amount) : = DIVIDE([Rolling 90 Day Total Sales Amount] , [Day Count] ) 결과
2. DAX First Day of Period Calculations 연초, 분기, 월초 Day Data를 구하는 DAX 계산식 Year Starting Inventory: = CALCULATE( [Starting Inventory] , STARTOFYEAR( 'Date'[Date] ) ) Quarter Starting Inventory: = CALCULATE( [Starting Inventory] , STARTOFQUARTER( 'Date'[Date] ) ) Month Starting Inventory: = CALCULATE( [Starting Inventory] , STARTOFMONTH( 'Date'[Date] ) )
2. DAX First Day of Period Calculations 결과
3. DAX Previous Period Calculations 바로 지난 년도, 분기, 월의 Data를 구하는 계산식 Previous Month Starting Inventory: = CALCULATE( [Starting Inventory] , PREVIOUSMONTH( 'Date'[Date] ) ) Previous Year Starting Inventory: = CALCULATE( [Starting Inventory] , PREVIOUSYEAR( 'Date'[Date] ) ) Previous Quarter Starting Inventory: = CALCULATE( [Starting Inventory] , PREVIOUSQUARTER( 'Date'[Date] ) )
3. DAX Previous Period Calculations 결과
4. DAX Semi-Additives Measures Calculations 계좌 잔액이나 재고같이 sum보다는 처음이나 마지막 Data을 구하는 계산식 Starting Inventory: = CALCULATE( [Sum of Inventory] , FIRSTNONBLANK( 'Date'[Datekey] , [Sum of Inventory] ) ) Closing Inventory: LASTNONBLANK( 'Date'[Datekey] , [Sum of Inventory] ) )
4. DAX Semi-Additives Measures Calculations 결과
5. DAX Use Relationships in a Calculation Power BI나 PowerPivot, Tabular 등 OLAP 위에 하나의 Data Table 중 두 개의 서로 다른 컬럼이 Lookup Table 하나의 컬럼과 관계를 만들어 각각 기준이 다른 Measure를 구하는 계산식 먼저, 두 개의 서로 다른 컬럼은 Lookup Table의 컬럼과 관계가 맺어져 있어야 USERELATIONSHIP을 사용할 수 있다. Lookup Table의 Datekey와 Data Table의 Datekey를 주관계로, Lookup Table의 Datekey와 Data Table의 Updatedate를 부관계로 지정한다.
5. DAX Use Relationships in a Calculation Lookup Table과 주 관계에 있던 Sales[Datekey] 컬럼을 기준이 아닌 Sales[UpdateDate] 컬럼을 사용하기 위해 다음과 같은 계산식을 사용한다. Total Quantity by Update Date: = CALCULATE( [Total Quantity] , USERELATIONSHIP( Sales[UpdateDate] , 'Date'[Datekey] ) ) 결과
7. DAX Year Over Year Growth Calculation 올 한 해 성장을 구하는 계산식 성장 여부를 알기 위해서는 현재 Data와 작년 Data를 구해야 한다. Previous Year Total Sales Amount: = CALCULATE( [Total Sales Amount] , SAMEPERIODLASTYEAR( 'Date'[Datekey] ) ) YOY Growth Total Sales Amount: =[Total Sales Amount]-[Previous Year Total Sales Amount] 결과
6. DAX YOY Percent Growth Calculation 올 한 해 성장률을 구하는 계산식 올 해 Data값을 작년 Data값으로 백분율 계산한다. [위 슬라이드 14 Measure를 참고] 방법1 - 산술 연산자 사용 YOY Percent Growth Total Sales Amount: =[YOY Growth Total Sales Amount] / [Previous Year Total Sales Amount] 이 경우 과거 Data가 없을 경우 에러값이 리턴되므로, IFERROR를 추가한다. = IFERROR( [YOY Growth Total Sales Amount]/[Previous Year Total Sales Amount], BLANK() )
6. DAX YOY Percent Growth Calculation 방법2 - DIVIDE DAX YOY Percent Growth Total Sales Amount: = DIVIDE( [YOY Growth Total Sales Amount] , [Previous Year Total Sales Amount] ) 결과
8. DAX Previous QTD and MTD Calculation 위 슬라이드 3에서 사용한 PREVIOUSQUARTER, PREVIOUSMONTH와 기본적인 개념은 비슷하나 아래의 계산식은 DATESBETWEEN을 사용하여 Day Data까지 내려가므로 좀 더 세부적인 계산식이다. Previous QTD Total Cost: = CALCULATE( [Total Cost] , DATESBETWEEN( 'Date'[Datekey] , FIRSTDATE( PREVIOUSQUARTER( 'Date'[Datekey] ) ), LASTDATE( DATEADD( 'Date'[Datekey],-1,QUARTER )) )
8. DAX Previous QTD and MTD Calculation Previous MTD Total Cost: = CALCULATE( [Total Cost] , DATESBETWEEN( 'Date'[Datekey], FIRSTDATE( PREVIOUSMONTH( 'Date'[Datekey] ) ), LASTDATE( DATEADD( 'Date'[Datekey], -1, MONTH ) ) )
10. DAX YTD, QTD and MTD Calculations 조회 날짜의 연말, 분기말, 월말 Data를 구하는 계산식 YTD Total Cost: = CALCULATE( [Total Cost] , DATESYTD( 'Date'[Datekey] ) ) QTD Total Cost: = CALCULATE( [Total Cost] , DATESQTD( 'Date'[Datekey] ) ) MTD Total Cost: = CALCULATE( [Total Cost] , DATESMTD( 'Date'[Datekey] ) )
10. DAX YTD, QTD and MTD calculations 결과
9. DAX Previous YTD, Year QTD, Year MTD Calculation 조회 날짜 작년의 연말, 분기말, 월말 Data를 구하는 계산식 위 슬라이드 10에서 SAMEPERIODLASTYEAR를 추가하면 된다. Previous YTD Total Cost: = CALCULATE( [YTD Total Cost] , SAMEPERIODLASTYEAR( 'Date'[Datekey] ) ) Previous Year QTD Total Cost: = CALCULATE( [QTD Total Cost] , SAMEPERIODLASTYEAR( 'Date'[Datekey] ) ) Previous Year MTD Total Cost: = CALCULATE( [MTD Total Cost] , SAMEPERIODLASTYEAR( 'Date'[Datekey] ) )
9. DAX Previous YTD, Year QTD, Year MTD Calculation 결과
출처 http://sqldusty.com/2015/09/01/10-dax-calculations-for-your- tabular-or-power-pivot-model-part-1/ http://sqldusty.com/2015/10/21/10-dax-calculations-for-your- tabular-or-power-pivot-model-part-2/