Power Query查找筛选最早建议启动日期及数据保留问题
Power Query 实现保留最新数据并添加首次建议启动日期
问题核心
现有多源提取的表格,包含File_date、Project#、Sugg_Start_date及PM、描述等列,需要:
- 新增
First_Sugg_Start列,显示每个项目的首次建议启动日期 - 仅保留
File_date为最新的项目行,同时保留所有原有列 - 注意:未启动项目的
Sugg_Start_date每日会更新为当日,不能直接筛选最早日期的行
原代码错误分析
你提供的分组及添加列代码存在多处语法和逻辑错误:
- 语法错误:分组列的引号不匹配(如
Project#_with_Task"缺失前引号、Sugg_Start未加引号),Table.Group的聚合参数格式错误,多余括号导致语法解析失败 - 逻辑错误:用
List.First取分组后的第一个值,无法保证是该项目的最早日期;分组时错误包含Sugg_Start列,导致分组维度错误;Table.AddColumn用法完全错误,没有关联原表的逻辑 - 需求偏差:未处理“保留最新File_date数据”的核心要求,直接分组会丢失最新数据的原有列
正确解决方案
通过辅助表提取首次日期+筛选最新数据+合并关联的方式实现需求,以下是完整的M代码片段(假设原表名为Source):
// 1. 创建辅助表:按项目分组,提取每个项目的首次建议启动日期 #"提取首次启动日期" = Table.Group(Source, {"Project#"}, { {"First_Sugg_Start", each List.Min([Sugg_Start_date]), type date} }), // 2. 筛选出File_date为最新的所有行,保留全部原有列 #"获取最新日期" = List.Max(Source[File_date]), #"筛选最新数据" = Table.SelectRows(Source, each [File_date] = #"获取最新日期"), // 3. 合并最新数据与辅助表,添加首次启动日期列 #"合并查询" = Table.NestedJoin(#"筛选最新数据", {"Project#"}, #"提取首次启动日期", {"Project#"}, "临时表", JoinKind.LeftOuter), #"展开首次日期列" = Table.ExpandTableColumn(#"合并查询", "临时表", {"First_Sugg_Start"}, {"First_Sugg_Start"})
关键细节说明
- 用
List.Min而非List.First:由于未启动项目的Sugg_Start_date每日更新,分组后的行顺序不一定按日期排序,List.Min能确保取到该项目的最早建议启动日期 - 左连接合并:保证所有最新日期的项目行都被保留,即使极端情况下某个项目无历史启动日期数据
- 保留原有列:先筛选最新数据再合并的逻辑,不会丢失
PM、描述等任何原有列
内容的提问来源于stack exchange,提问作者Marie Rodriguez
相关产品推荐
相关产品推荐

