PowerBI如何正确计算周的上年同期?

您看看需不需要 2024-04-10 01:37:04

关于上年同期的计算,可以直接用时间智能函数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 总计错误的终极解决方案(二)

更多干货教程:

0 阅读:0

您看看需不需要

简介:感谢大家的关注