如何使用 DAX 函数计算上年值
工坊的小伙伴们,周五好啊!关于同期的计算是一个老生常谈的问题,今天我们来看一下计算上年值的几个DAX函数吧~
数据准备
我们虚拟从2018年1月至2019年4月的数据,如下:
构造日期表,可采用如下DAX语句构建:
Calendar =
ADDCOLUMNS (
CALENDAR ( DATE ( 2017, 1, 1 ), DATE ( 2020, 12, 31 ) ),
"年", YEAR ( [Date] ),
"季度", "第"
& ROUNDUP( MONTH ( [Date]) / 3, 0) & "季度",
"月", MONTH ( [Date] ),
"月份", MONTH ( [Date] )& "月",
"年月", FORMAT ( [Date], "YYYY/MM" )
)
使用此表达式构造的日期表如下:
此表达式友友们可以研究下用到的几个函数,但无需深究,存起来到时直接使用即可。
DATEADD
将日期表与事实表建立关系,如下:
计算当前年的实际销售金额:
Sales =
SUM ( 'Fact'[订单金额] )
计算上年同期销售金额,我们可以写如下的度量值
Sales_同期 =
CALCULATE ( [Sales],DATEADD ( 'Calendar'[Date],-1, YEAR ))
在报表视图呈现结果如下,与2018年同期数据是吻合的:
而当表中字段为年时,得到的结果不是截至去年同期四月的销售额,而是去年全年的销售额:
同期显示的是全年的数据。
PREVIOUSYEAR
如果使用PREVIOUSYEAR来写上年值的话,那么度量值应该写成:
Sales_PY =
CALCULATE ( [Sales],PREVIOUSYEAR ( 'Calendar'[Date]) )
报表视图中呈现的结果如下:
无论表格中当前行是哪个月,Sales_PY均计算上年一整年的销售额。
SAMEPERIODLASTYEAR
如果使用SAMEPERIODLASTYEAR函数来写上年值的话,那么度量值应该写成:
Sales_SP =
CALCULATE ( [Sales],SAMEPERIODLASTYEAR ( 'Calendar'[Date]) )
报表视图中呈现的结果是:
当表格中放置的列是年时,结果与使用DATEADD计算结果是相同的。
PARALLELPERIOD
如果使用PARRELLPERIOD函数来写上年值的话,那么度量值应该写成:
Sales_PP =
CALCULATE ( [Sales],PARALLELPERIOD ( 'Calendar'[Date],-1, YEAR ))
根据验证,呈现结果与DATEADD函数计算结果相同:
总结
计算上年(同期)值,可使用如下几个函数:
DATEADD,PREVIOUSYEAR,SAMEPERIODLASTYEAR,PARRELLPERIOD。
以下几个表达式从今天的实验结果来看是等价的:
Sales_同期 =
CALCULATE ( [Sales],DATEADD ( 'Calendar'[Date],-1, YEAR ))
Sales_SP =
CALCULATE ( [Sales],SAMEPERIODLASTYEAR ( 'Calendar'[Date]) )
Sales_PP =
CALCULATE ( [Sales],PARALLELPERIOD ( 'Calendar'[Date],-1, YEAR ))
以下表达式总是返回上年一整年的销售额:
Sales_PY =
CALCULATE ( [Sales],PREVIOUSYEAR ( 'Calendar'[Date]) )
当选择的不是完整的月份而是一个日期段时,这些函数又会有怎么样的表现呢?敬请期待~
* PowerPivot工坊原创文章,转载请注明出处!
如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。
长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~
Power Pivot工坊
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)