防止在PowerBI中多次查询远程数据库



当以下多个查询依赖于查询的数据表以防止多次查询远程数据表时,在Power BI中查询远程数据表的最佳方法/设计是什么?

细节

假设我有一个远程数据库服务器my_db_server和一个数据库my_db,我查询一个特定的数据表my_source_data_table。之后,我在PowerBI中使用另外两个查询,这取决于远程数据表的初始查询。我想只执行一次对远程表的查询,然后以一种有效的方式使用缓存的数据进行其他两次查询,以防止多次查询远程数据库服务器。


步骤1 -访问远程数据库

因此,我在PowerBI中添加了以下查询来访问远程表

let
Source = Sql.Databases("<my_db_server>"),
Database = Source{[Name="<my_db>"]}[Data],
MySourceDataTable = Database {[Schema="dbo",Item="<my_source_datatable>"]}[Data],
in
MySourceDataTable 

步骤2 -根据查询

我现在有两个子查询,它们使用这个表作为输入并查询它们,例如

查询A -按Foo,Bar排序

let
Source = MySourceDataTable,
ReorderColumnsFooBar = Table.ReorderColumns(Source ,{"Foo", "Bar"})
in
ReorderColumnsFooBar

查询B -按Bar, Foo排序

let
Source = MySourceDataTable,
ReorderColumnsBarFoo = Table.ReorderColumns(Source ,{"Bar", "Foo"})
in
ReorderColumnsBarFoo 

在这种情况下PowerBI如何进行?是不是这样:

  1. 查询远程数据库解析MySourceDataTable

  2. 使用缓存的MySourceDataTable解析ReorderColumnsFooBar

  3. 使用缓存的MySourceDataTable解析ReorderColumnsBarFoo

是否使用1)的缓存版本,还是步骤2)和步骤3)每个都再次执行查询1)?我可以在1)的末尾使用Table.Buffer(MySourceDataTable)来显式缓存表来改善这种情况吗?

测试这些不同的方法似乎并没有带来速度的提高。目前我的整个查询大约需要90秒,我想加快它,因为远程查询占用了80%的时间。

Power Query每次从源发送数据流。例如,如果您有两个查询,它们都从数据库中获取数据,并且在执行查询1和查询2之间的瞬间数据发生了变化,那么您将获得不同的数据提取。

表。缓冲只缓存在一个单一的查询,所以回答你的问题,步骤2 &;3 .再次执行查询1 .

您可以在这里阅读更多背景信息:https://bengribaudo.com/blog/2020/08/26/5417/how-power-query-thinks

如果您想提高查询时间(90秒并不长),您可以通过重新排序您的步骤来充分利用查询折叠。您还可以优化在每个查询中运行的M -转换选择和操作顺序会对性能产生很大影响。

相关内容

  • 没有找到相关文章

最新更新