求助:去年同期周累计销售额DAX度量值计算结果异常
问题排查与修正方案
原公式的问题点
ALLSELECTED('Date')滥用:这个函数会清除当前所有的日期筛选条件,导致SAMEPERIODLASTYEAR无法基于你选中的日期范围计算去年同期,反而会用整个日期表的最后日期来计算,结果自然不对。- 上下文传递错误:原
Weekly Sales里的CurrentDate是基于当前筛选的今年日期,即使加了SAMEPERIODLASTYEAR,也没把日期上下文切换到去年,计算的还是今年的周累计数值。
修正后的DAX公式
方案1:直接重写去年同期周累计度量值
Week To Date Sales LY:= VAR 当前日期 = LASTDATE('Date'[Date]) VAR 去年同期日期 = DATEADD(当前日期, -1, YEAR) VAR 去年同期周天数 = WEEKDAY(去年同期日期, 3) // 3表示周一为一周的第0天 VAR 去年同期周起始日 = DATEADD(去年同期日期, -1*去年同期周天数, DAY) RETURN CALCULATE( DetailSales[Sales], DATESBETWEEN('Date'[Date], 去年同期周起始日, 去年同期日期) )
方案2:重构可重用的周累计度量值
先修改原Weekly Sales,让它能正确响应日期上下文:
周累计销售额:= VAR 当前上下文日期 = LASTDATE('Date'[Date]) VAR 周内天数偏移 = WEEKDAY(当前上下文日期, 3) RETURN CALCULATE( DetailSales[Sales], DATESBETWEEN( 'Date'[Date], DATEADD(当前上下文日期, -1*周内天数偏移, DAY), 当前上下文日期 ) )
然后去年同期度量值就可以直接复用:
去年同期周累计销售额:= CALCULATE( [周累计销售额], SAMEPERIODLASTYEAR('Date'[Date]) )
说明
两种方案都能解决问题:
- 方案1更直接,明确计算出去年同期的周起始和结束日期,避免上下文传递的坑
- 方案2通过重构基础度量值,让代码更复用,后续如果要做其他同期对比(比如前年)也更方便
内容的提问来源于stack exchange,提问作者Rizwan Afgan
相关产品推荐
相关产品推荐

