在Power Query中基于其他列的最新日期创建True/False判断列的实现方法
在Power Query中创建“是否当前随访中”的True/False列
我来给你一步步拆解怎么实现这个需求——要给每个患者新增一列,判断他们最新状态日期对应的状态是否为"On Followup",是就返回TRUE,否则返回FALSE。结合你举的例子,Bob和Joe的最新状态是随访中所以为TRUE,Tiffany曾经是但最新状态不是、John从未处于该状态,所以都是FALSE。
方法一:用Power Query界面操作(适合可视化操作偏好者)
按患者分组,获取最新状态日期
- 选中患者姓名列,点击「转换」选项卡 → 「分组依据」
- 分组依据选择患者姓名列,新列名设为
LatestStatusDate,操作选「最大值」,列选你的状态日期列(比如叫StatusDate),点击确定。
这一步会生成一个只有患者姓名和对应最新状态日期的表。
合并原表和分组后的表
- 回到原数据表,点击「开始」选项卡 → 「合并查询」→ 「合并查询作为新查询」
- 原表选择患者姓名列 + 状态日期列,分组后的表选择患者姓名列 +
LatestStatusDate列,关联方式选「完全外部」(其实用内部也可以,因为我们只需要匹配最新状态的行),点击确定。
添加自定义列判断状态
- 在合并后的表中,展开合并的分组表,只保留状态列(比如叫
Status) - 点击「添加列」选项卡 → 「自定义列」,输入公式:
= [Status] = "On Followup" - 把这个新列重命名为
IsCurrentOnFollowup之类的名字,然后删掉不需要的中间列(比如展开后的重复列、LatestStatusDate)。
- 在合并后的表中,展开合并的分组表,只保留状态列(比如叫
方法二:直接写M代码(适合高效操作偏好者)
如果你习惯直接编辑M代码,可以把下面的代码替换到你的查询编辑器中(记得替换对应的列名:PatientName、StatusDate、Status为你实际的列名):
let Source = 你的数据源, // 替换成你的原始数据源步骤 // 按患者分组获取最新状态日期 Grouped = Table.Group(Source, {"PatientName"}, {{"LatestStatusDate", each List.Max([StatusDate]), type date}}), // 合并原表和分组表,匹配最新状态的行 Merged = Table.NestedJoin(Source, {"PatientName", "StatusDate"}, Grouped, {"PatientName", "LatestStatusDate"}, "GroupedData", JoinKind.LeftOuter), // 展开状态列 Expanded = Table.ExpandTableColumn(Merged, "GroupedData", {"LatestStatusDate"}, {"LatestStatusDate"}), // 添加判断列 AddedCustom = Table.AddColumn(Expanded, "IsCurrentOnFollowup", each if [Status] = "On Followup" then true else false), // 清理不需要的列 Cleaned = Table.RemoveColumns(AddedCustom, {"LatestStatusDate"}) in Cleaned
这样处理后,每个患者的每一行都会显示IsCurrentOnFollowup的True/False值,如果你需要每个患者只显示一行结果,可以再做一次分组聚合,根据你的需求调整就行。
内容的提问来源于stack exchange,提问作者Joe Crozier
相关产品推荐
相关产品推荐

