Spotfire中基于匹配键计算患者事件日期差的技术咨询
在Spotfire中基于匹配键计算患者日期差
需求说明
现有含数千患者的数据集,以patient_ID区分患者,需结合Intersect/Over逻辑,通过match_key匹配,计算同一患者下对应匹配键的Date2与Date1的时间差,并生成类似[匹配到的Date2] - [对应Date1]的格式列(参考示例中的Desired_column)。
示例数据
| patient_ID | match_key | Date1 | Date2 | Desired_column |
|---|---|---|---|---|
| patient5 | 2234 | 21/10/2023 14:34 | 21/10/2023 14:36 | 21/10/2023 14:55 - 21/10/2023 14:34 |
| patient5 | 7889 | 21/10/2023 14:34 | 21/10/2023 14:38 | 21/10/2023 15:45 - 21/10/2023 14:34 |
| patient5 | 21/10/2023 16:17 | 21/10/2023 14:40 | ||
| patient5 | 2234 | 21/10/2023 14:34 | 21/10/2023 14:55 | |
| patient5 | 21/10/2023 16:45 | 21/10/2023 15:36 | ||
| patient5 | 7889 | 21/10/2023 17:03 | 21/10/2023 15:45 |
实现步骤
1. 匹配对应match_key的目标Date2
新建计算列,获取同一patient_ID和match_key分组下的目标Date2(示例中为分组内最大的Date2):
Max(Date2) OVER (Intersect([patient_ID], [match_key]))
若业务逻辑需筛选特定Date2,可替换Max为FirstIf并添加过滤条件。
2. 获取对应分组的Date1
新建计算列,获取同一patient_ID和match_key分组下的Date1(示例中分组内Date1一致,取第一个即可):
First(Date1) OVER (Intersect([patient_ID], [match_key]))
若分组内Date1有多个,可根据需求改用Max/Min或添加过滤条件。
3. 生成Desired_column格式文本列
将上述两个计算列组合成目标格式,同时跳过match_key为空的行:
If(IsNull([match_key]), "", Date([匹配到的Date2], "dd/MM/yyyy HH:mm") + " - " + Date([对应Date1], "dd/MM/yyyy HH:mm"))
注意:将[匹配到的Date2]和[对应Date1]替换为你实际创建的列名。
4. 计算数值型时间差(可选)
若需要分钟/小时等数值型时间差,新建计算列:
DateDiff("minute", [对应Date1], [匹配到的Date2]) OVER (Intersect([patient_ID], [match_key]))
注意事项
- 确保
Date1和Date2为日期时间型,若为文本需先转换:ToDate([Date1], "dd/MM/yyyy HH:mm") - 若分组内存在多个匹配的Date2/Date1,需根据业务逻辑调整聚合函数(Max/Min/First/Last)
内容的提问来源于stack exchange,提问作者Irma
相关产品推荐
相关产品推荐

