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

在PowerBI中创建名为RequiredOutput的计算列求助

在PowerBI中创建RequiredOutput计算列的解决方案

需要基于包含ID、Date、OldStatus、NewStatus字段的数据集,创建名为RequiredOutput的计算列,实现状态的连续继承逻辑:初始状态为ID的第一个变更记录的旧状态,后续状态随变更记录更新为新状态,无变更的行继承最近一次的状态。

样本数据

IDDateOldStatusNewStatusRequiredOutput
1234530/09/2021Self
1234531/10/2021Self
1234530/11/2021SelfTeamTeam
1234531/12/2021Team
1234531/01/2022TeamSelfSelf
1234528/02/2022Self
5678930/09/2021Team
5678931/10/2021Team
5678930/11/2021TeamSelfSelf
5678931/12/2021Self
5678931/01/2022SelfTeamTeam
5678928/02/2022Team

DAX计算列代码

请将代码中的TableName替换为你的实际表名:

RequiredOutput = 
VAR CurrentID = 'TableName'[ID]
VAR CurrentDate = 'TableName'[Date]
-- 筛选当前ID下所有状态变更行(OldStatus和NewStatus均非空)
VAR ChangeRows = 
    FILTER(
        ALL('TableName'),
        'TableName'[ID] = CurrentID 
        && NOT(ISBLANK('TableName'[OldStatus])) 
        && NOT(ISBLANK('TableName'[NewStatus]))
    )
-- 获取当前日期及之前的最后一次变更记录的日期
VAR LastChangeDate = 
    CALCULATE(
        MAX('TableName'[Date]),
        FILTER(ChangeRows, 'TableName'[Date] <= CurrentDate)
    )
-- 获取最后一次变更对应的新状态
VAR LatestStatus = 
    CALCULATE(
        VALUES('TableName'[NewStatus]),
        FILTER(ChangeRows, 'TableName'[Date] = LastChangeDate)
    )
-- 获取当前ID的初始状态(最早变更记录的旧状态)
VAR InitialStatus = 
    CALCULATE(
        VALUES('TableName'[OldStatus]),
        FILTER(ChangeRows, 'TableName'[Date] = MIN(ChangeRows[Date]))
    )
-- 优先返回最近一次变更的状态,无变更则返回初始状态
RETURN
    IF(NOT(ISBLANK(LastChangeDate)), LatestStatus, InitialStatus)

逻辑说明

  1. 先捕获当前行的ID和日期,筛选出当前ID下所有有效的状态变更行(即OldStatus和NewStatus都不为空的行)。
  2. 找到当前日期及之前的最后一次变更记录,获取对应的NewStatus作为最新状态。
  3. 如果当前行在所有变更记录之前,取该ID最早变更记录的OldStatus作为初始状态。
  4. 根据是否存在最近变更,返回对应的状态值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:54:52