Power BI计算列:查找Bal Units小于1的最近年份
问题分析与修正方案
你的需求是:当当前行的Bal Units小于1时,返回该客户截至当前年份为止,最近一次Bal Units小于1的年份;否则返回空白。原代码存在几个关键问题,导致结果始终返回当前年份:
原代码的核心问题
- 逻辑错误:用
MIN('Customer Table'[Year])获取“最近年份”,但MIN会返回最早的符合条件年份,你需要的是最晚的年份,应该用MAX。 - 未清除行上下文:CALCULATE默认继承当前行的
Year筛选,只能读取当前年份的数据,需要移除无关筛选才能遍历客户的所有历史年份。 - 冗余条件:
IF里的'Customer Table'[CustomerID] = CurrentCustomerID完全多余,CurrentCustomerID本身就是当前行的客户ID,该条件永远成立。
修正后的DAX代码
FirstYearWhenZero = VAR CurrentCustomer = 'Customer Table'[CustomerID] VAR CurrentRowYear = 'Customer Table'[Year] VAR CurrentRowBal = 'Customer Table'[Bal units] -- 获取当前客户、截至当前年份前,所有Bal units<1的年份中的最大值(最近年份) VAR LatestValidYear = CALCULATE( MAX('Customer Table'[Year]), ALLEXCEPT('Customer Table', 'Customer Table'[CustomerID]), -- 仅保留当前客户的筛选 'Customer Table'[Year] <= CurrentRowYear, 'Customer Table'[Bal units] < 1 ) RETURN -- 仅当当前行Bal units<1时返回最近年份,否则返回空白 IF(CurrentRowBal < 1, LatestValidYear, BLANK())
代码说明
ALLEXCEPT('Customer Table', 'Customer Table'[CustomerID]):清除表格中除CustomerID外的所有行上下文筛选,确保CALCULATE能遍历该客户的所有年份数据。MAX('Customer Table'[Year]):筛选出符合条件的年份中最大的那个,即你需要的“最近年份”。- 最终判断仅在当前行
Bal units<1时返回计算结果,否则返回空白,完全匹配需求。
内容的提问来源于stack exchange,提问作者Murtaza Naqi
相关产品推荐
相关产品推荐

