You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Power Query中如何使重复项对应字段值保持一致?

Power Query中如何使重复项对应字段值保持一致?

嗨,刚接触Power Query不用慌,这个需求其实很常见,咱们一步步来搞定它~

首先得明确你的核心需求:当ID(无字母)重复时,让对应的Stock Unit、Type、Has Types列的值保持统一——不管是现在这些字段有不一致的情况需要修正,还是想提前规范避免后续出现差异,下面两种方法都能解决:

方法一:分组提取统一值再合并(最稳妥,适合处理已有不一致的情况)

这个方法的思路是先按ID把数据分组,然后从每组里提取出你认可的统一值(比如第一个非空值、出现次数最多的值),最后再合并回原表替换掉原来的字段:

  1. 打开你的Power Query编辑器,确保数据已经加载进来
  2. 选中ID列,点击顶部菜单栏的转换分组依据
  3. 在弹出的分组窗口里,设置:
    • 分组依据:ID(默认就是选中的列)
    • 新列名:比如叫分组行
    • 操作:选择所有行,这样每个ID对应的所有数据都会被打包成一个子表
  4. 点击确定后,你会看到每个ID对应一行,后面跟着它的子表。接下来添加自定义列,提取每个组的统一值:
    • 点击添加列自定义列,分别为三个字段写公式:
      • 统一Stock Unit:List.First(List.RemoveNulls([分组行][Stock Unit]))(取组内第一个非空的Stock Unit值)
      • 统一Type:List.First(List.RemoveNulls([分组行][Type]))
      • 统一Has Types:List.First(List.RemoveNulls([分组行][Has Types]))

      如果你想取出现次数最多的值,可以把List.First(List.RemoveNulls(...))换成List.Mode([分组行][Stock Unit]),但要注意如果有多个值出现次数相同,List.Mode会返回列表,这时候可以再加个List.First()来取第一个

  5. 现在展开之前的分组行列(点击列名右侧的小箭头),只勾选原来的Stock UnitTypeHas Types列(可以给它们加个前缀比如“原”方便对比)
  6. 最后删掉原来的字段,保留统一后的字段,或者直接用统一字段替换原字段,就得到了每个ID对应字段值一致的表

方法二:排序后填充(适合字段正确值出现在每组第一条的情况)

如果你的数据里,每个ID的第一条记录对应的Stock Unit、Type、Has Types是正确的,那可以用更简单的填充方法:

  1. ID列排序(点击ID列标题旁的排序按钮)
  2. 选中Stock UnitTypeHas Types这三列
  3. 点击转换填充向下填充,这样每个ID组里的后续行都会自动填充成和第一行一样的值

附M代码示例(方法一的完整代码参考)

假设你的原表叫Source,可以直接把这段代码粘到高级编辑器里替换原有代码(记得根据实际列名调整):

let
    Source = 你的数据源, // 替换成你的实际数据源(比如Excel.CurrentWorkbook(){[Name="表1"]}[Content])
    Grouped = Table.Group(Source, {"ID"}, {{"分组行", each _, type table [ID=number, Stock Unit=text, Type=text, Has Types=text]}}),
    AddUnifiedColumns = Table.AddColumns(Grouped, 
        {
            "统一Stock Unit", each List.First(List.RemoveNulls([分组行][Stock Unit])),
            "统一Type", each List.First(List.RemoveNulls([分组行][Type])),
            "统一Has Types", each List.First(List.RemoveNulls([分组行][Has Types]))
        }
    ),
    Expanded = Table.ExpandTableColumn(AddUnifiedColumns, "分组行", {"Stock Unit", "Type", "Has Types"}, {"原Stock Unit", "原Type", "原Has Types"}),
    FinalTable = Table.RemoveColumns(Expanded, {"原Stock Unit", "原Type", "原Has Types", "分组行"})
in
    FinalTable

如果操作中有任何疑问,随时说~

备注:内容来源于stack exchange,提问作者newt335

火山引擎 最新活动