Power Query/PowerBI 中的条件联接

Conditional Join in Power Query/PowerBI

提问人:dougp 提问时间:11/4/2023 最后编辑:dougp 更新时间:11/7/2023 访问量:61

问:

我需要根据一个数据集中的值与另一个数据集中的值之间的值来连接两个数据集。

数据集 1 (foo):

编号 瓦尔
一个 3
b 7
c 13

数据集 2 (bar):

描述 beginval 恩德瓦尔
x 2 5
y 8 14
z 17 20

在SQL中,我会写:

select bar.descr
, bar.beginval
, bar.endval
, foo.id
from bar
  left outer join foo on foo.val between bar.beginval and bar.endval

这将产生:

描述 beginval 恩德瓦尔 编号
x 2 5 一个
y 8 14 c
z 17 20 (空)

但是,由于数据集不是来自同一源,并且源不一定是 SQL 数据库,因此我无法编写 SQL 来在 Power BI 中执行此操作。

在 Power BI 中,我看到我可以联接一列 = 一列。我没有看到加入范围的能力。这是否适用于 DAX 或查询编辑器中的某种类型的操作?

更新

在我的具体案例中,数据集 2 是一个电子表格,数据集 1 来自数据集市。如果我在 Power Query 编辑器中使用 M 联接数据集(如 Davide Bacci 建议的那样),它会强制结果进入导入模式。Power BI 变得无响应,当我注意到它有 2000 万行进入下载时,我最终不得不使用任务管理器来杀死 Power BI,而下载可能只有几亿行。

有没有办法在 DAX 中执行此操作,以便我可以将数据集市部分保留在直接查询模式下?或者这是否仍然会导致某个地方缓慢、消耗资源的加入?(请记住,“慢”是相对的,主要问题是所需的计算资源量。我目前正在 IBM Cognos Analytics 中执行此操作,唯一的问题是报告可能需要大约 18 分钟才能运行。但至少我不需要将 400 GB 的数据集从笔记本电脑上传到报表服务器。

我可以问一些 A-B 问题吗?我很高兴得知生态系统中还有其他工具可以帮助解决这个问题。只要它不是 Power Automate。这在这里是被禁止的。

PowerBI PowerQuery 数据操作 PowerBI-Desktop M

评论

0赞 Davide Bacci 11/6/2023
你的问题解决了吗?
0赞 dougp 11/7/2023
还不完全是。我可能需要更新我的问题。

答:

1赞 Davide Bacci 11/4/2023 #1

在 Power Query 中:

一个:

enter image description here

B:

enter image description here

添加列并展开:

enter image description here

Table.SelectRows(B, (x)=> x[val] >= [beginval] and x[val] <= [endval])

enter image description here

let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"descr", type text}, {"beginval", Int64.Type}, {"endval", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each Table.SelectRows(B, (x)=> x[val] >= [beginval] and x[val] <= [endval])),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"id"}, {"id"})
in
    #"Expanded Custom"

评论

0赞 dougp 11/7/2023
这是一个非常巧妙的技巧,从技术上讲,它符合我的要求——但前提是用于琐碎的数据。Microsoft 的文档甚至没有涉及 .(或者,也许我需要更全面地理解 M 中的一些核心概念。Table.SelectRows()
0赞 Davide Bacci 11/7/2023
我不确定我是否关注?这适用于任何类型的数据,并解决了您提供的示例数据的问题。如果您有一些不同的问题,我建议将其标记为已解决,并提出一个新问题,其中包含您想到的不同数据和输出。
0赞 dougp 11/7/2023
除了它使 Power BI Desktop 在下载数据时数小时无法使用。然后,将所有导入的数据以下载速度的 1/12 上传到 Power BI 服务,将永远不会发生。此外,联机服务还对 Power BI (.pbix) 文件实施了大小限制。这里的问题是一个规模问题。您提供的函数和语法将适用于普通数据集,例如合并两个小型 Excel 文件或示例数据集(如 AdventureWorks),但对于非普通大小的数据,它会导致更多问题。
0赞 Davide Bacci 11/7/2023
这是一个与最初提出的问题不同的问题。我的建议是用所有相关信息开始一个新的,因为这个现在可能已经过时了。
0赞 dougp 11/7/2023
除了声明我使用的是真实数据,而不是样本中的 6 行之外,问题没有改变。我将删除关于 A-B 问题的部分,这会让你感觉更好。