小懒爱科比

2020-06-11   阅读量: 1417

Power BI

时间智能函数的数值比较

扫码加入数据分析学习群

概况:
基于时间的汇总可能是最基础、最普遍用到的计算之一:计算年度销售总额,计算月度消费金额,某个店某个时期的销售情况等等。
这里的时间模式介绍用DAX实现时间相关的计算,它不依赖于DAX自带的时间函数(譬如YTD,MTD等等)。
如果你有特殊的日历,特定特定时间段的计算(例如:按周计算、按trimester计算),用这个这个模式都能够解决。
此文涉及前文DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比的扩展部分,给出具体实例和解决方法。
日期维度表参见:如何生成日期维度表
应用场景:
以下是几个应用场景:
• 计算年底销售总额
• 计算月度流量总额
• 进一步计算同比,环比

数据模型:
Date(日期表)
Product(产品表)
Sales (销售表) 
Inventory(库存表)

要点:
首先定义一个度量值(measure),它基于销售额列(SalesAmount),(注:销售额(SalesAmount)此列是数据表中的列,不是度量值)


  1. 有些盆友觉得定义这个度量值是多余的,但是细看下面你就会发现这样定义是十分有用的:

  2. 1. 易懂

  3. 2. 简化引用这个度量值的其他度量值

  4. 3. 易于维护



度量值 Amount
[Amount] := SUM(Sales[SalesAmount])


月初至今 MTD
[Amount MTD] := CALCULATE ( [Amount], FILTER ( ALL ( 'Date' ), 'Date'[Year] = MAX ( 'Date'[Year] ) && 'Date'[Month] = MAX ( 'Date'[Month] ) && 'Date'[Date] <= MAX ( 'Date'[Date] ) ) )

月初至今(上月)  LMTD
[Amount LMTD] := VAR maxSalesDate = MAX ( 'Sales 0'[skDate] ) VAR dateRng = FILTER ( ALL ( 'Date' ), 'Date'[Date] <= maxSalesDate ) RETURN CALCULATE ( [Amount MTD], DATEADD ( 'Date'[Date], -1, MONTH ), dateRng )
dateRng: 见文末详解。


月初至今(去年) LYMTD
1 [Amount LYMTD] := 2 VAR maxSalesDate = 3 MAX ( 'Sales 0'[skDate] ) 4 VAR dateRng = 5 FILTER ( ALL ( 'Date' ), 'Date'[Date] <= maxSalesDate ) 6 RETURN 7 CALCULATE ( [Amount MTD], DATEADD ( 'Date'[Date], -1, YEAR ), dateRng )

月度环比 MoM
1 [MoM] := 2 IF ( 3 [Amount MTD] <> BLANK (), 4 DIVIDE ( [Amount MTD] - [Amount LMTD], [Amount LMTD] ) 5 )
月度同比 LMoM
[LMoM] := IF ( [Amount MTD] <> BLANK (), DIVIDE ( [Amount MTD] - [Amount LYMTD], [Amount LYMTD] ) )

年初至今 YTD
[Sales YTD] := CALCULATE ( [Amount], FILTER ( ALL ( 'Date' ), 'Date'[Year] = MAX ( 'Date'[Year] ) && 'Date'[Date] <= MAX ( 'Date'[Date] ) ) )

 年初至今(去年)  LYTD
[Amount LYTD] := VAR maxSalesDate = MAX ( 'Sales 0'[skDate] ) VAR dateRng = FILTER ( ALL ( 'Date' ), 'Date'[Date] <= maxSalesDate ) RETURN CALCULATE ( [Amount YTD], DATEADD ( 'Date'[Date], -1, YEAR ), dateRng )
年同比 YoY
[YoY] := IF ( [Amount YTD] <> BLANK (), DIVIDE ( [Amount YTD] - [Amount LYTD], [Amount LYTD] ) )


^如何在图表中显示LYTD,LMTD的数据
一般来说日期表(Date)中含有的未来的月份,譬如未来5年的日期,或者事实表(Fact)中没有的日期,为了防止图表中显示出来LMTD,LYTD之类的,用这个筛选日期达到目的。
例子:在事实表(Fact)中,最大的交易日期是2013-06-13。
如图:
左边因为2014年计算LYTD的时候不为空,所以X轴显示到了2014年到6月份,但是用最大的交易日期筛选后,就可以正常显示了。
没有用dateRng筛选 用dateRng筛选 [x Amount YTD] := CALCULATE ( [Amount], FILTER ( ALL ( 'Date' ), 'Date'[Year] = MAX ( 'Date'[Year] ) && 'Date'[Date] <= MAX ( 'Date'[Date] ) ) )
[Amount YTD] := VAR maxSalesDate = MAX ( 'Sales 0'[skDate] ) VAR dateRng = FILTER ( ALL ( 'Date' ), 'Date'[Date] <= maxSalesDate )
RETURN CALCULATE ( [Amount], FILTER ( ALL ( 'Date' ), 'Date'[Year] = MAX ( 'Date'[Year] ) && 'Date'[Date] <= MAX ( 'Date'[Date] ) ), dateRng )





Time-Pattern,日期度量值对比,度量值汇总, 同比,环比,YoY, MoM,库存对比,年度环比,月度环比

转载于:https://www.cnblogs.com/lizardbi/p/DAX-PATTERN-POWERBI-Time-Pattern.html

16.6494 6 4 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子