使用SAMEPERIODLASTYEAR函数报‘连续日期选择’错误求助
解决SAMEPERIODLASTYEAR触发“连续日期选择”错误的问题
这问题我之前处理过好几次,确实是2016年2月29日这个闰年特殊日期搞的鬼!SAMEPERIODLASTYEAR函数的逻辑是直接匹配上年同期的日期,但2015年不是闰年,根本没有2月29日,这就导致当你的筛选上下文包含2016-02-29时,SAMEPERIODLASTYEAR返回的是空日期集合,进而触发“连续日期选择”错误——而之前计算销售额没问题,是因为SUM函数对空值的兼容性更好,即使没有对应日期数据,它会默认返回0或者忽略,但COUNT函数对筛选上下文的完整性要求更高。
给你几个靠谱的解决方案:
方案一:用DATEADD替代SAMEPERIODLASTYEAR(最简单)
DATEADD函数会自动处理闰年日期偏移,比如把2016-02-29转换成2015-02-28,完美避开无对应日期的问题。修改后的度量值如下:
PY Retails := CALCULATE([Retails], DATEADD('Date'[DateKey], -1, YEAR))
方案二:针对性处理闰年2月29日(保留SAMEPERIODLASTYEAR逻辑)
如果你想继续使用SAMEPERIODLASTYEAR,可以先判断当前日期是否是闰年2月29日,是的话就用上年的2月28日来计算同期值:
PY Retails := VAR CurrentDate = MAX('Date'[DateKey]) VAR IsLeapDay = DAY(CurrentDate) = 29 && MONTH(CurrentDate) = 2 RETURN IF( IsLeapDay, CALCULATE([Retails], SAMEPERIODLASTYEAR(DATE(YEAR(CurrentDate), 2, 28))), CALCULATE([Retails], SAMEPERIODLASTYEAR(CurrentDate)) )
方案三:批量处理日期范围(适合多日期筛选场景)
如果你的报表经常需要筛选日期范围(比如整月、整季度),可以用这个更通用的写法,自动把所有闰年2月29日映射到上年2月28日:
PY Retails := VAR CurrentPeriod = VALUES('Date'[DateKey]) VAR PYPeriod = SELECTCOLUMNS( CurrentPeriod, "PYDate", IF( DAY([DateKey]) = 29 && MONTH([DateKey]) = 2, DATE(YEAR([DateKey])-1, 2, 28), DATEADD([DateKey], -1, YEAR) ) ) RETURN CALCULATE([Retails], 'Date'[DateKey] IN PYPeriod)
建议先试试方案一,最简单直接,基本能解决90%的闰年日期同期计算问题。
内容的提问来源于stack exchange,提问作者Dries Weytjens
相关产品推荐
相关产品推荐

