You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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())

代码说明

  1. ALLEXCEPT('Customer Table', 'Customer Table'[CustomerID]):清除表格中除CustomerID外的所有行上下文筛选,确保CALCULATE能遍历该客户的所有年份数据。
  2. MAX('Customer Table'[Year]):筛选出符合条件的年份中最大的那个,即你需要的“最近年份”。
  3. 最终判断仅在当前行Bal units<1时返回计算结果,否则返回空白,完全匹配需求。

内容的提问来源于stack exchange,提问作者Murtaza Naqi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:07:43