提问人:dougp 提问时间:11/4/2023 最后编辑:dougp 更新时间:11/7/2023 访问量:61
Power Query/PowerBI 中的条件联接
Conditional Join in Power Query/PowerBI
问:
我需要根据一个数据集中的值在另一个数据集中的值之间连接两个数据集。
数据集 1 (foo):
编号 | 瓦尔 |
---|---|
一个 | 3 |
b | 7 |
c | 13 |
数据集 2 (bar):
描述权 | 开始瓦尔 | 恩德瓦尔 |
---|---|---|
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
这将产生:
描述权 | 开始瓦尔 | 恩德瓦尔 | 编号 |
---|---|---|---|
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 中执行此操作,以便我可以将数据集市部分保留在 Direct Query 模式下?或者这是否仍然会导致某个位置的缓慢、消耗资源的加入?(请记住,“慢”是相对的,主要问题是所需的计算资源量。我目前正在 IBM Cognos Analytics 中执行此操作,唯一的问题是报告可能需要大约 18 分钟才能运行。但至少我不需要将 400 GB 的数据集从笔记本电脑上传到报表服务器。
我可以问一些 AB 问题吗?我很高兴得知生态系统中还有其他工具可以帮助解决这个问题。只要它不是 Power Automate。这是被禁止的。
答:
1赞
Davide Bacci
11/4/2023
#1
在 Power Query 中:
一个:
B:
添加列并展开:
Table.SelectRows(B, (x)=> x[val] >= [beginval] and x[val] <= [endval])
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 问题的部分,这会让你感觉更好。
评论