引用另一个查询的 Power Query 代码(以及缓冲的工作原理)

问题描述 投票:0回答:2

我正在尝试重用一个电源查询来从另一个电源查询中提取信息。 似乎有多种方法可以做到这一点。 我从这个问题看到了两种方法。 我也在我自己的电子表格中看到它。 在我的电子表格中,我显然有:

Source = Excel.CurrentWorkbook(){[Name="Project_List"]}[Content],

在其他疑问中我有:

Source = Project_List,

其中一种方法有优势吗?

最终我希望实现的是通过网络查询一次数据,将其转储到表A中,然后在后续查询中继续引用表A,而不是通过网络拉取数据以进行后续查询。

我注意到,当我使用

Source = Project_List,
构建最近的查询时,在后续查询的每一步中,它实际上都重新加载了 Project_list 查询加载的所有文件。

这只是构建过程的一部分吗? 或者,如果我有一个通过网络加载的查询 A 和 5 个引用查询 A 的后续查询,查询/Excel 是否会通过网络读取 1 次或 5 次?

Power Query 中引用现有查询并减少通过网络拉取数据的正确方法是什么?

powerquery m
2个回答
2
投票

Power Query 将始终从源流式传输数据 - 请参阅此处以获得更全面的理解。

https://www.youtube.com/watch?v=AIvneMAE50o

解决这个问题的唯一方法是使用 Table.Buffer 或 List.Buffer 临时缓存数据。

对于这一行,那么您可能有另一个名为 Project_List 的查询,该查询又从工作簿中获取数据?

Source = Project_List,

0
投票

如果你想测试缓冲查询,你可以尝试这个。查询 A 是

let
 Source = {1..1e1},
 #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
 #"Added to Column" = Table.TransformColumns(#"Converted to Table", {{"Column1", each _ + Number.Random(), type number}}),
 A = Table.Buffer(#"Added to Column")
in
 A

B 是

 let
 Source = {1..1e1},
 #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
 BufferedA = Table.Buffer(A), 
 #"Added Custom" = Table.AddColumn(#"Converted to Table", "Custom", each A),
 #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"Column1"}, {"Custom.Column1"})
in
 #"Expanded Custom"

您可以测试 3 种方式 - 无缓冲区、B 中的缓冲区和 A 中的缓冲区。没有缓冲区总是随机的,而 A 或 B 中的缓冲区被缓存并重复

右键单击并创建一个空白查询:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.