如何合并(联接)来自多个表的范围?

时间:2019-02-19 16:03:11

标签: range powerbi powerquery m

我不想要基于DAX或Excel公式的答案。

我有两个具有ID和累积数据的表。这两个字段都是与表无关的。

我需要创建一个新表table3,该表是table1和table2中的cumulative2字段之间的联接。联接条件是查找比cumulative1更高的第一个cumulative2值,如示例所示:

enter image description here

1 个答案:

答案 0 :(得分:1)

我不认为您可以使用“连接”本身来完成此操作,但是您绝对可以使用自定义列来完成此操作。

let
    Source = Table.FromRows({{1,1000},{2,2000},{3,3000},{4,4000}},{"ID1","Cumulative1"}),
    #"Added Custom" = Table.AddColumn(Source, "Cumulative2", (T1) => List.Min(Table.SelectRows(Table2, each [Cumulative2] >= T1[Cumulative1])[Cumulative2]), type number)
in
    #"Added Custom"

或格式化

let
    Source = Table.FromRows({{1,1000},
                             {2,2000},
                             {3,3000},
                             {4,4000}},
                            {"ID1","Cumulative1"}
             ),
    #"Added Custom" = Table.AddColumn(Source, "Cumulative2",
                          (T1) => List.Min(
                                      Table.SelectRows(Table2, 
                                          each [Cumulative2] >= T1[Cumulative1]
                                      )[Cumulative2]
                                  ),
                          type number
                      )
in
    #"Added Custom"

因此,在Table1的每一行中,我取Table2并仅选择其中的行

Table2[Cumulative2] >= Table1[Cumulative1]

,然后仅返回该表中的Cumulative2列(并且单列是列表)。

因为我想要该列表中的第一个值,所以我使用List.Min


编辑:这样做可能会更简洁,更高效:

(T1) => List.First(List.Select(Table2[Cumulative2], each _ >= T1[Cumulative1])),