如何在Power Query中基于参考列创建返回最大日期的新列
在Power Query中按组标记最新日期行
实现思路
按Number列分组,计算每组内Date列的最大值,再将该最大值与原表每行的Date对比,匹配则标记Yes,否则标记No。
分步操作(可视化界面)
- 打开Power Query编辑器,加载目标数据表
- 点击开始选项卡 → 分组依据:
- 分组列选择
Number - 新增列名设为
MaxDate,操作选最大值,列选择Date
- 分组列选择
- 点击合并查询 → 合并查询作为新查询:
- 原表和分组后的表均按
Number列匹配,连接类型选左外部
- 原表和分组后的表均按
- 展开合并后的
MaxDate列 - 点击添加列 → 自定义列,输入公式:
if [Date] = [MaxDate] then "Yes" else "No",命名为NewColumn - 删除临时的
MaxDate列
M代码实现
如果直接编写M代码,可使用以下脚本(替换YourDataSource为实际数据源):
let Source = YourDataSource, // 按Number分组,计算每组的最大日期 GroupedTable = Table.Group(Source, {"Number"}, {{"MaxDate", each List.Max([Date]), type date}}), // 合并原表与分组表,保留原表所有行 MergedTables = Table.NestedJoin(Source, {"Number"}, GroupedTable, {"Number"}, "GroupedData", JoinKind.LeftOuter), // 展开分组表中的MaxDate列 ExpandedMaxDate = Table.ExpandTableColumn(MergedTables, "GroupedData", {"MaxDate"}, {"MaxDate"}), // 添加判断列标记最新日期行 AddedFlagColumn = Table.AddColumn(ExpandedMaxDate, "NewColumn", each if [Date] = [MaxDate] then "Yes" else "No"), // 移除临时列 FinalTable = Table.RemoveColumns(AddedFlagColumn, {"MaxDate"}) in FinalTable
结果验证
运行上述操作后,数据表会生成符合需求的NewColumn:
| Number | Date | NewColumn |
|---|---|---|
| 1 | 23/12/2022 | No |
| 1 | 23/12/2022 | No |
| 1 | 30/12/2022 | No |
| 1 | 06/01/2023 | No |
| 1 | 13/01/2023 | No |
| 1 | 13/01/2023 | Yes |
| 2 | 20/01/2023 | No |
| 2 | 27/01/2023 | No |
| 2 | 03/02/2023 | No |
| 2 | 10/02/2023 | No |
| 2 | 10/02/2023 | Yes |
内容的提问来源于stack exchange,提问作者Rodrigo Camargo Jr.
相关产品推荐
相关产品推荐

