【发布时间】:2019-02-19 16:03:10
【问题描述】:
我不想要基于 DAX 或 Excel 公式的答案。
我有两个表,其中包含 Id 和累积数据。这两个字段都是独立于表的。
我需要创建一个新表 table3,它是 table1 和 table2 中的累积 2 字段之间的连接。连接条件是找到第一个优于cumulative1的cumulative2值,如示例所示:
【问题讨论】:
标签: range powerbi powerquery m
我不想要基于 DAX 或 Excel 公式的答案。
我有两个表,其中包含 Id 和累积数据。这两个字段都是独立于表的。
我需要创建一个新表 table3,它是 table1 和 table2 中的累积 2 字段之间的连接。连接条件是找到第一个优于cumulative1的cumulative2值,如示例所示:
【问题讨论】:
标签: range powerbi powerquery m
我认为您不能通过“加入”本身来做到这一点,但您绝对可以通过自定义列来做到这一点。
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])),
【讨论】:
(T1) => List.First(List.Select(Table2[Cumulative2], each _ >= T1[Cumulative1]))
Table2 中有多少个桶,该表的静态程度如何?如果是一张变化不大的小桌子,那还有更好的选择。