关于上年同期的计算,可以直接用时间智能函数SAMEPERIODLASTYEAR或者DATEADD来实现,更多关于时间智能函数的用法可参考:
时间智能函数介绍
各种时间指标的度量值,让你一次看个够
最近有伙伴在做周的上年同期的计算时,遇到了一个奇怪的问题,它同样是使用SAMEPERIODLASTYEAR来进行计算的:
上年同期销售额 =
CALCULATE(
[销售额],
SAMEPERIODLASTYEAR('日期表'[日期])
)
也计算出了结果:
但是经过仔细核对,发现上年同期数据是不正确的,以下面这几周为例:
为什么会出现这种情况呢?
因为时间智能函数目前只能识别并计算年、季、月、日这四个粒度,并没有对周粒度的计算。当上下文是周时,即使用了SAMEPERIODLASTYEAR,它也无法识别计算上年的相同周编号的数据,而是将周自动转换为当周所在的日期期间,并计算上年的相同期间的数据。
如果还不是很理解,让我们用某周的数据来说明上年同期是如何计算的,以2021年第51周W51为例(见上图),当期数据是42449,上年同期SAMEPERIODLASTYEAR计算的结果是36957,并不等于2020年W51的销售额40675。
这个36957是怎么得来的呢?
由于SAMEPERIODLASTYEAR无法识别周粒度,不会去计算2020年W51的数据,而是会计算2021年W51所对应日期的上期,也就是2021.12.13-2021.12.19这个期间的上年同期,通过验证2020.12.13-2020.12.19的销售额,结果正是36957。
通过这个例子,你应该理解了上面关于周的上年同期计算出错的原因。
那么如果要获得正确的周的上年同期,应该怎么做呢?
对于非标准年、季、月、日粒度的计算,就不要再使用时间智能函数了,直接使用通用的业务逻辑来计算就可以了,某周的上年同期就是(年份-1)并且周编号相同的期间,用DAX表达如下:
上年同期销售额 =
CALCULATE(
[销售额],
FILTER(
ALL('日期表'),
'日期表'[年]=MAX('日期表'[年])-1&&'日期表'[周编号]=MAX('日期表'[周编号])
)
)
用这个度量值来计算来看看结果:
这样每周的上年同期就得到了正确的结果。
关于周的相关计算,之前也已经专门介绍过,用相同的思路写DAX计算即可:
学会了这个思路,你也可以轻松进行周分析!
你可能也注意到了,上图虽然每周的上年同期是正确的,但是在年度合计上是错误的,这种错误修正起来很简单,直接套用总计修正的方法即可:
关于总计修正请参考:
PowerBI 总计错误的终极解决方案
Power BI 总计错误的终极解决方案(二)
更多干货教程:Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved