【问题标题】:How can I combine (join) ranges from multiple tables?如何组合(连接)来自多个表的范围?
【发布时间】:2019-02-19 16:03:10
【问题描述】:

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

我有两个表,其中包含 Id 和累积数据。这两个字段都是独立于表的。

我需要创建一个新表 table3,它是 table1 和 table2 中的累积 2 字段之间的连接。连接条件是找到第一个优于cumulative1的cumulative2值,如示例所示:

【问题讨论】:

    标签: range powerbi powerquery m


    【解决方案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])),
    

    【讨论】:

    • 只是效率问题。每行运行查询大约需要 2 或 3 秒。有什么建议吗?谢谢。
    • 以下可能会快一点:(T1) => List.First(List.Select(Table2[Cumulative2], each _ >= T1[Cumulative1]))
    • 谢谢,但性能问题依然存在,我也尝试了一个Buffer,但没有好转。
    • 在您的实际数据中Table2 中有多少个桶,该表的静态程度如何?如果是一张变化不大的小桌子,那还有更好的选择。
    • 两个表都是日常数据输入,此时我只为每个表添加了 30 条记录,但可能到今年年底将有 1000 行。抱歉,我不太明白你所说的水桶是什么意思。谢谢
    猜你喜欢
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多