解决Power Query透视表中上月费用DAX度量仅显示总计值的问题
解决方法及原因分析
问题根源
你写的度量之所以只有总计行能正确显示上月数据,核心问题有两个:
MAX(Billing[Billing Period End Date (Month Index)])在明细行(比如某公司某月份的行)里,只会取当前行的月份索引,但原代码没清除当前行的维度筛选(比如公司),如果该公司上月没有账单数据,就会返回空值;- 总计行没有维度筛选,
MAX会取所有数据里的最大月份索引,减1后得到上月,所以只有这一行能出结果。
修正后的DAX代码
基础版(仅按月份汇总)
Previous Month = VAR CurrentMonthIndex = SELECTEDVALUE(Billing[Billing Period End Date (Month Index)]) RETURN CALCULATE( SUM(Billing[Total Charges excl. Vat]), Billing[Billing Period End Date (Month Index)] = CurrentMonthIndex - 1, ALL(Billing[Billing Period End Date (Month Index)]) )
多维度版(比如透视表包含公司、部门等分组)
如果你的透视表是按「公司+月份」这类多维度分组,需要保留其他维度的筛选,改用ALLEXCEPT:
Previous Month = VAR CurrentMonthIndex = SELECTEDVALUE(Billing[Billing Period End Date (Month Index)]) RETURN CALCULATE( SUM(Billing[Total Charges excl. Vat]), Billing[Billing Period End Date (Month Index)] = CurrentMonthIndex - 1, ALLEXCEPT(Billing, Billing[Company]) // 把Company换成你实际用的分组列 )
关键细节说明
SELECTEDVALUE:专门用来获取当前筛选上下文里的单值,比MAX更适合这种每行对应一个月份的场景;ALL(Billing[Billing Period End Date (Month Index)]):清除当前行的月份筛选,让CALCULATE能遍历全表找到所有上月的账单数据;- 如果你的月份索引是跨年格式(比如202404代表2024年4月),只要索引的数值逻辑是连续的(202401-1=202312),这个代码直接就能用,不用额外调整。
内容的提问来源于stack exchange,提问作者Gordon Penman
相关产品推荐
相关产品推荐

