You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:36:28