2024年是个闰年,2月有29天,在这种情况下,关于上年同期相关计算可能会出问题,这里就将最近星友问到的典型问题介绍一下。
上年同期的日期
返回上年同期的日期,有星友是这么写的度量值:
上年同期 日期 = MAX('日期表'[日期])-365
如果还没有到2月29日,比如今天是2024年2月17日,它可以正常返回2023年2月17日,这是没问题的。
但是如果在2月29日之后,比如2024年3月15日,上述写法返回的结果将不再是2023年3月15日,而是2023年3月16日。
因为闰年是366天,日期减去365是不准确的,那应该怎么做呢?是不是要先判断某个年份是否为闰年,然后确定是减366还是365吗?
这个思路是可以的,但是太麻烦了,其实返回上年同期的日期,还有个更简单的方法,不管一年多少天,直接返回12个月前的相同日期就可以了,这个算法有专门的函数:EDATE
上年同期 日期 = EDATE(MAX('日期表'[日期]),-12)
如果是2024年2月29日,上年2023年,没有2月29日,它将返回2023年2月28日,同样为2月的最后一天。
上年同期的数据
计算上年同期的数据,有星友是这样写的度量值:
销售额 上年同期 =
CALCULATE(
[销售额],
DATEADD('日期表'[日期],-365,DAY)
)
这个逻辑是计算往前推365天的日期的数据,在闰年的情况下,与上面介绍的一样,并不一定是上年同期,更精确的写法是往前推 12个 月:
销售额 上年同期 =
CALCULATE(
[销售额],
DATEADD('日期表'[日期],-12,MONTH)
)
或者往前推 1 年:
销售额 上年同期 =
CALCULATE(
[销售额],
DATEADD('日期表'[日期],-1,YEAR)
)
也可以直接用SAMEPERIODLASTYEAR来计算上年同期,更多关于日期相关 的计算请参考:各种时间指标的度量值,让你一次看个够
在计算上年同期时,不要想当然的按一年365天的逻辑写度量值,而是尽量用时间智能函数/日期函数,用月/季/年的粒度,它们的内部计算逻辑,和天数无关,是否为闰年对结果没有影响。
关于时间智能函数是如何处理闰年的,其实我在4年之前的2020闰年就已经介绍过,还没有看过的星友请仔细看一下这篇文章:
2月29日就要到了,Power BI时间智能函数是如何处理闰年的?