【问题标题】:in Poweryquery/pivot Merging two tables based on multiple column with unique values in both relative to other在 Poweryquery/pivot 中合并基于多个列的两个表,其中两个表都具有唯一值
【发布时间】:2021-11-28 17:19:17
【问题描述】:

我有两张表:一张用于销售,一张用于目标,如下所示:

目标表:

Date mat Tar
01/01/2020 A 10
01/01/2020 B 12
01/01/2020 C 5
01/02/2020 A 10
01/02/2020 B 12
01/02/2020 C 5
01/03/2020 A 10
01/03/2020 B 12
01/03/2020 C 5

销售表:

Date mat S
01/01/2020 A 5
01/01/2020 B 6
01/01/2020 C 8
01/01/2020 D 1
01/02/2020 A 1
01/02/2020 B 2
01/02/2020 D 12
01/03/2020 B 1
01/03/2020 C 4
01/03/2020 A 5
01/03/2020 F 2

如您所见,Target 表中的某些物料日期组合不在 Sale 表中,反之亦然。

我想以这样一种方式组合它们,即任何不在 Target 中的缺失材料日期组合都将作为一行与新材料一起添加,而销售额将作为新列添加。下面是理想的输出:

Date mat Tar S
01/01/2020 A 10 5
01/01/2020 B 12 6
01/01/2020 C 5 8
01/02/2020 A 10 1
01/02/2020 B 12 2
01/02/2020 C 5 0
01/03/2020 A 10 5
01/03/2020 B 12 1
01/03/2020 C 5 4
01/01/2020 D 0 1
01/02/2020 D 0 12
01/03/2020 F 0 2

但是,当我选择基于列 Date 和 mat 的合并时,当我选择完整的外部联接以保留两个表中的行时,我没有在 PowerQuery 中得到这个。我的输出是创建两个日期和材料列,而不是如上所示的一个合并列。

【问题讨论】:

    标签: merge powerquery outer-join m


    【解决方案1】:

    执行此操作的一种方法是将两个表附加在一起,并按 Datemat 列分组以获得您需要的这两者的所有组合,然后加入 TargetSale 到那个新表。

    let
        Source = Table.Combine({Target, Sale}),
        #"Grouped Rows" = Table.Group(Source, {"Date", "mat"}, {}),
        #"Sorted Rows" = Table.Sort(#"Grouped Rows",{{"Date", Order.Ascending}, {"mat", Order.Ascending}}),
        #"Merged Queries" = Table.NestedJoin(#"Sorted Rows", {"Date", "mat"}, Target, {"Date", "mat"}, "Target", JoinKind.LeftOuter),
        #"Expanded Target" = Table.ExpandTableColumn(#"Merged Queries", "Target", {"Tar"}, {"Tar"}),
        #"Merged Queries1" = Table.NestedJoin(#"Expanded Target", {"Date", "mat"}, Sale, {"Date", "mat"}, "Sale", JoinKind.LeftOuter),
        #"Expanded Sale" = Table.ExpandTableColumn(#"Merged Queries1", "Sale", {"S"}, {"S"})
    in
        #"Expanded Sale"
    

    如果需要,将 null 替换为 0。


    编辑:我太复杂了。您可以通过在这些列上取最大值来处理 Group By 中的 TarS

    let
        Source = Table.Combine({Target, Sale}),
        #"Grouped Rows" = Table.Group(Source, {"Date", "mat"}, {{"Tar", each List.Max([Tar])}, {"S", each List.Max([S])}})
    in
        #"Grouped Rows"
    

    【讨论】:

      猜你喜欢
      • 2019-04-03
      • 1970-01-01
      • 2018-03-15
      • 2021-12-17
      • 2021-12-16
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多