计算列前三年平均值的DAX表达式调试求助
修正DAX:计算指定日期前三年同期平均值
原表达式的问题分析
- 冗余无效条件:
MONTH('Summary Table'[Date]) = MONTH('Summary Table'[Date])和DAY('Summary Table'[Date]) = DAY('Summary Table'[Date])是恒真判断,对筛选没有任何帮助,完全可以删除 - 致命逻辑矛盾:
'Summary Table'[Date] = EARLIER('Summary Table'[Date])强制要求匹配当前行的完整日期,但当前行是本年日期,而外层已经限定年份为前三年,两个条件冲突,导致没有符合要求的数据行,平均值计算结果为空 - 同期匹配错误:原本要匹配前三年的同月同日数据,但原表达式没有正确引用当前行的年月信息,而是做了无意义的自相等判断
修正后的DAX表达式
Average_Prev_Three_Years_DA_Per_Date = VAR PresentYear = YEAR(TODAY()) RETURN ADDCOLUMNS( -- 筛选出本年的所有日期记录 FILTER(ALL('Summary Table'), YEAR('Summary Table'[Date]) = PresentYear), "Avg_Prev_Three_Years_DA", CALCULATE( AVERAGE('Summary Table'[Daily Adjustment]), -- 匹配前三年的同月同日数据 FILTER( ALL('Summary Table'), YEAR('Summary Table'[Date]) >= PresentYear - 3 && YEAR('Summary Table'[Date]) < PresentYear && MONTH('Summary Table'[Date]) = MONTH(EARLIER('Summary Table'[Date])) && DAY('Summary Table'[Date]) = DAY(EARLIER('Summary Table'[Date])) ) ) )
补充说明
- 使用
EARLIER('Summary Table'[Date])来提取当前行的月份和日期,准确匹配前三年的同期数据 - 如果你的数据模型中有独立的日期维度表,建议基于日期表进行筛选关联,这样逻辑更清晰,也能避免重复计算
内容的提问来源于stack exchange,提问作者sky
相关产品推荐
相关产品推荐

