一对多合并查询时如何去重的问题

Power Query Levyna ⋅ 于 2018-08-27 14:35:53 ⋅ 最后回复由 Alex 2018-08-27 15:20:51 ⋅ 3341 阅读

file

本帖已被设为精华帖!
本帖由 Alex 于 6年前 加精
最佳答案
  • Alex MOD 社区清洁工
    2018-08-27 15:20:51

    因为只需要保留第一次出现的数据,而源数据中并没有反映出现次数的列,所以首先得添加次数列,可参考 《模拟绝对引用累计计数》

    合并查询时,将次数列添加到合并条件中,因为表 1 中的值都是第一次出现,这样表 2 中只有第一次出现的行才会匹配到表 1 中的数据,后面出现的就不会匹配到了 。

    共 3 个查询:

    // 表1
    let
        源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
        分组 = Table.Group(源, {"A"}, {"a", each Table.AddIndexColumn(_,"times")}),
        展开 = Table.ExpandTableColumn(分组, "a", {"B", "times"})
    in
        展开
    
    // 表2
    let
        源 = Excel.CurrentWorkbook(){[Name="表2"]}[Content],
        索引 = Table.AddIndexColumn(源, "索引"),
        分组 = Table.Group(索引, {"C"}, {"a", each Table.AddIndexColumn(_,"times")}),
        展开 = Table.ExpandTableColumn(分组, "a", {"D", "索引", "times"})
    in
        展开
    
    // 结果
    let
        源 = Table.NestedJoin(表1,{"A", "times"},表2,{"C", "times"},"表1",JoinKind.RightOuter),
        展开 = Table.ExpandTableColumn(源, "表1", {"C", "D", "索引"}, {"C", "D", "索引"}),
        排序 = Table.Sort(展开,{"索引"})
    in
        排序
回复数量: 1
  • Alex MOD 社区清洁工
    2018-08-27 15:20:51

    因为只需要保留第一次出现的数据,而源数据中并没有反映出现次数的列,所以首先得添加次数列,可参考 《模拟绝对引用累计计数》

    合并查询时,将次数列添加到合并条件中,因为表 1 中的值都是第一次出现,这样表 2 中只有第一次出现的行才会匹配到表 1 中的数据,后面出现的就不会匹配到了 。

    共 3 个查询:

    // 表1
    let
        源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
        分组 = Table.Group(源, {"A"}, {"a", each Table.AddIndexColumn(_,"times")}),
        展开 = Table.ExpandTableColumn(分组, "a", {"B", "times"})
    in
        展开
    
    // 表2
    let
        源 = Excel.CurrentWorkbook(){[Name="表2"]}[Content],
        索引 = Table.AddIndexColumn(源, "索引"),
        分组 = Table.Group(索引, {"C"}, {"a", each Table.AddIndexColumn(_,"times")}),
        展开 = Table.ExpandTableColumn(分组, "a", {"D", "索引", "times"})
    in
        展开
    
    // 结果
    let
        源 = Table.NestedJoin(表1,{"A", "times"},表2,{"C", "times"},"表1",JoinKind.RightOuter),
        展开 = Table.ExpandTableColumn(源, "表1", {"C", "D", "索引"}, {"C", "D", "索引"}),
        排序 = Table.Sort(展开,{"索引"})
    in
        排序
暂无评论~~
  • 请务必阅读并严格遵守《社区管理规范与使用说明》
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 发送表情,可用的 Emoji 见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板粘贴上传, 格式限制 - jpg, png, gif
  • 不支持上传附件,请尽可能用文字和图片将问题描述清楚,如实在需要上传附件,可上传到 共享网盘 后分享链接
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter