Power Query数据聚合求助:NewPay列值不符合预期
Power Query 数据聚合问题修正方案
问题分析
你的核心问题在于原代码未正确关联每个事件(creation/increase/decrease)对应的Pay值,且分组、Unpivot后的逻辑无法匹配预期的NewPay填充规则,导致结果不符合预期。
修正后的M代码
let Source = Excel.CurrentWorkbook(){[Name="Table14"]}[Content], // 清理无关列 #"Removed Unneeded Columns" = Table.RemoveColumns(Source,{"Column1", "Column2", "Column3", "Column4"}), // 按ID分组,在组内完成状态判断与过滤 #"Grouped by ID" = Table.Group(#"Removed Unneeded Columns", {"ID"}, { {"GroupData", each let // 提取当前ID的creation日期 CreationRecord = Table.SelectRows(_, each [Event] = "creation"), CreationDate = if Table.RowCount(CreationRecord) > 0 then CreationRecord{0}[Date] else null, // 判断当前ID的状态:ok/yes/no Status = if Table.RowCount(Table.SelectRows(_, each [Event] <> "creation")) = 0 then "ok" else if List.AllTrue(List.Transform(Table.SelectRows(_, each [Event] <> "creation"), each [Date] = CreationDate)) then "yes" else "no", // 仅保留非no状态的组数据 FilteredGroup = if Status <> "no" then Table.AddColumn(_, "Status", each Status) else null in FilteredGroup, type table} }), // 移除标记为no的ID组 #"Removed Null Groups" = Table.SelectRows(#"Grouped by ID", each [GroupData] <> null), // 展开组内的完整数据 #"Expanded GroupData" = Table.ExpandTableColumn(#"Removed Null Groups", "GroupData", {"Pay", "Event", "Date", "Status"}, {"Pay", "Event", "Date", "Status"}), // 按规则填充NewPay列 #"Added NewPay Column" = Table.AddColumn(#"Expanded GroupData", "NewPay", each if [Status] = "ok" then [Pay] else if [Status] = "yes" and [Event] <> "creation" then [Pay] else null ) in #"Added NewPay Column"
关键修改说明
- 分组内直接处理状态:在ID分组时就完成
ok/yes/no的标记,同时过滤掉标记为no的组,避免后续重复操作。 - 准确判断状态逻辑:用
List.AllTrue检查所有非creation事件的日期是否与creation日期一致,替代原代码中List.Max的取最大值逻辑,确保符合需求。 - 保留事件与Pay的关联:不再使用Pivot/Unpivot操作破坏原数据的事件-Pay对应关系,直接基于原始事件类型填充NewPay。
- 精准填充NewPay:
- 状态为
ok时(仅存在creation),直接填充对应Pay值 - 状态为
yes时,仅给increase/decrease事件填充对应Pay,creation事件留空
- 状态为
内容的提问来源于stack exchange,提问作者Ninella23
相关产品推荐
相关产品推荐

