Power Query重复项处理:将第二项及以后重复值替换为Null
实现重复项标记为Null的Power Query方案
要实现保留所有行,仅将第二个及以后出现的重复值标记为Null的需求,你原来的代码仅完成了表合并,没有区分重复项的出现顺序,所以无法达到预期效果。以下是修正后的完整方案:
正确的Power Query代码
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}), #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type), #"Grouped Rows" = Table.Group(#"Added Index", {"Column1"}, {{"AllRows", each _, type table [Column1=text, Index=number]}}), #"Added Custom" = Table.AddColumn(#"Grouped Rows", "ProcessedRows", each Table.TransformColumns([AllRows], {{"Column1", (x) => if List.PositionOf([AllRows][Column1], x) = 0 then x else null}})), #"Expanded ProcessedRows" = Table.ExpandTableColumn(#"Added Custom", "ProcessedRows", {"Column1", "Index"}), #"Sorted Rows" = Table.Sort(#"Expanded ProcessedRows",{{"Index", Order.Ascending}}), #"Removed Columns" = Table.RemoveColumns(#"Sorted Rows",{"Index"}) in #"Removed Columns"
代码逻辑说明
- 添加索引列:给每行添加连续索引,用于后续恢复原始数据的排列顺序,避免分组后打乱行的位置
- 按目标列分组:将
Column1中值相同的行归为一组,方便单独处理每组内的重复项 - 标记重复项为Null:对每组内的
Column1值,判断其在组内的首次出现位置(索引为0),仅保留首次出现的值,其余全部设为Null - 恢复原始顺序:展开分组后的表,按之前添加的索引重新排序,最后移除索引列,得到符合要求的结果
原代码问题分析
你之前的代码仅通过Table.NestedJoin将原表与去重表做左连接,这种方式无法区分重复项的出现顺序——所有行都会匹配到去重后的记录,自然无法实现“仅标记非首次出现项为Null”的需求。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

