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

如何在DAX中用计算列获取上一个就诊阶段的最近日期?

解决Power BI计算列中获取上一就诊阶段最大日期的问题

我完全懂你的困扰——当患者有超过两个就诊阶段时,用earlier()只能拿到整个就诊周期的首尾日期,根本没法精准定位到上一个阶段的最大日期,而且还必须用计算列来保留人员级的数据,方便后续的分析操作。下面给你一套可行的解决方案:

前提假设

先假设你的数据表(比如叫VisitRecords)包含以下核心字段:

  • PersonID:唯一标识患者的ID
  • VisitStage:就诊阶段(建议是数字类型,比如1、2、3...,如果是文本类型后面会有补充处理方案)
  • VisitDate:每次就诊的日期

核心DAX计算列公式

直接用下面的公式创建计算列,就能精准获取当前行对应的上一阶段最大日期:

PreviousStageMaxDate = 
VAR CurrentPatient = [PersonID]
VAR CurrentStageNum = [VisitStage]
RETURN
CALCULATE(
    MAX([VisitDate]),
    FILTER(
        ALL('VisitRecords'),
        [PersonID] = CurrentPatient && [VisitStage] = CurrentStageNum - 1
    )
)

公式解释

  1. 变量定义:先用VAR把当前行的患者ID和就诊阶段存起来,既避免重复计算,也让公式逻辑更清晰;
  2. 筛选逻辑:FILTER(ALL('VisitRecords'), ...)用ALL突破当前行的上下文限制,遍历整个表中同一个患者的所有记录,精准筛选出阶段号比当前小1的所有就诊记录;
  3. 取最大值:对筛选出的上一阶段记录,用MAX([VisitDate])拿到该阶段的最晚就诊日期。

边界情况处理

如果当前行是患者的第一个就诊阶段(比如VisitStage=1),这个计算列会返回BLANK(),这是合理的(因为没有上一阶段)。如果你需要把空值替换成特定内容(比如"无前置阶段"),可以修改公式为:

PreviousStageMaxDate = 
VAR CurrentPatient = [PersonID]
VAR CurrentStageNum = [VisitStage]
VAR PrevStageMax = CALCULATE(
    MAX([VisitDate]),
    FILTER(
        ALL('VisitRecords'),
        [PersonID] = CurrentPatient && [VisitStage] = CurrentStageNum - 1
    )
)
RETURN
IF(ISBLANK(PrevStageMax), "无前置阶段", PrevStageMax)

如果就诊阶段是文本类型怎么办?

如果你的VisitStage是类似"初诊"、"复诊1"、"复诊2"的文本,需要先创建一个阶段排序辅助列,给每个文本阶段分配一个数字顺序:

StageOrder = 
SWITCH(
    [VisitStage],
    "初诊", 1,
    "复诊1", 2,
    "复诊2", 3,
    "随访", 4,
    // 按你的实际阶段类型补充
    0 // 未知阶段默认赋值0
)

然后把之前的核心公式中的VisitStage替换成StageOrder即可。

示例效果

假设你的原始数据是这样的:

PersonIDVisitStageVisitDate
10112023-01-10
10112023-01-15
10122023-02-05
10132023-03-01
10212023-01-02

生成的计算列结果会是:

PersonIDVisitStageVisitDatePreviousStageMaxDate
10112023-01-10BLANK()
10112023-01-15BLANK()
10122023-02-052023-01-15
10132023-03-012023-02-05
10212023-01-02BLANK()

完全符合你要的人员级上一阶段最大日期的需求,后续可以直接基于这个计算列做进一步分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:52:54