在 Power Query 中刷新时,在后台做了大量工作,以便尝试提供流畅的用户体验,并高效且安全地执行查询。 但是,在某些情况下,你可能会注意到刷新数据时,Power Query 会触发多个数据源请求。 有时,这些请求是正常的,但有时可以阻止这些请求。
发生多个请求时
以下部分介绍 Power Query 向数据源发送多个请求时的一些实例。
连接器设计
连接器可以出于各种原因对数据源进行多次调用,包括元数据、结果缓存、分页等。 此行为是正常的,旨在以这种方式工作。
引用单个数据源的多个查询
如果多个查询从该数据源拉取,则可能会对同一数据源发出多个请求。 即使在只有一个查询引用数据源的情况下,这些请求也会发生。 如果一个或多个其他查询引用该查询,则单独评估每个查询以及它依赖的所有查询。
在桌面环境中,使用单个共享缓存运行数据模型中所有表的单个刷新。 缓存可以减少对同一数据源的多个请求的可能性,因为一个查询可以受益于已针对不同查询运行和缓存的相同请求。 不过,即使在此处,你也可能会收到多个请求,因为:
- 数据源未缓存(例如本地 CSV 文件)。
- 请求数据源的请求与因下游操作(可能会更改折叠)而缓存的请求不同。
- 缓存太小(相对不太可能)。
- 查询的运行时间大致相同。
在云环境中,每个查询都使用自己的单独缓存进行刷新。 因此,查询无法从针对其他查询已缓存的相同请求中受益。
折叠
有时,Power Query 的折叠层会根据在下游执行的操作生成对数据源的多个请求。 在这种情况下,你可能会通过使用 Table.Buffer 来避免多个请求。 详细信息:对你的表进行缓冲
加载到 Power BI Desktop 模型
在 Power BI Desktop 中,Analysis Services(AS)使用两个过程刷新数据:一个用于提取架构(AS 通过请求零行实现),另一个用于提取数据。 如果计算零行架构需要提取数据,则可能会出现重复的数据源请求。
数据隐私分析
数据隐私对每个查询进行自己的评估,以确定查询是否安全地一起运行。 此评估有时可能会导致对数据源发出多个请求。 给定请求来自数据隐私分析的一个指示信号是,它具有“TOP 1000”条件(尽管并非所有数据源都支持此类条件)。 通常,禁用数据隐私(假设可以接受)会在刷新期间消除“TOP 1000”或其他数据隐私相关请求。 详细信息: 禁用数据隐私防火墙
后台数据下载(也称为“后台分析”)
与为数据隐私执行的评估类似,Power Query 编辑器默认下载每个查询步骤的前 1,000 行预览。 下载这些行有助于确保在选择步骤后立即显示数据预览,但也可能导致数据源请求重复。 详细信息: 禁用后台分析
其他 Power Query 编辑器后台任务
各种 Power Query 编辑器后台任务还可以触发额外的数据源请求(例如,查询折叠分析、列分析、Power Query 在将结果加载到 Excel 后触发的 1000 行预览自动刷新等)。
在数据库中隔离多个查询
可以通过关闭查询过程的特定部分来隔离多个查询的实例,以隔离重复请求的来源。 例如,如果开始:
- 在 Power Query 编辑器中
- 禁用防火墙
- 禁用后台分析
- 禁用列分析及其他后台任务
- [可选]执行
Table.Buffer
在此示例中,您在刷新 Power Query 编辑器预览时,只会经历一个 M 评估。 如果此时发生重复的请求,那是因为查询的编写方式固有地导致了这种情况。 如果没有,并且如果逐个启用前面描述的设置,则可以观察重复请求开始发生的时间点。
以下部分更详细地介绍了这些步骤。
设置 Power Query 编辑器
无需重新连接或重新创建查询,只需在 Power Query 编辑器中打开要测试的查询。 如果不想更改现有查询,可以在编辑器中重复查询。
禁用数据隐私防火墙
下一步是禁用数据隐私防火墙。 此步骤假定你不关心源之间的数据泄露,因此可以使用 Excel 中的 “设置快速组合”选项所述的 “始终忽略隐私级别设置”,或在 Power BI Desktop 中使用 Power BI Desktop 隐私级别所述的 “忽略隐私级别并可能改善性能”设置来禁用数据隐私防火墙。
在恢复正常测试之前,请务必撤消此步骤。
禁用后台分析
下一步是禁用后台分析。 后台分析由“允许数据预览在后台下载”设置控制,该设置描述于“禁用 Power Query 后台刷新”的 Power BI 设置中。 还可以在 Excel 中禁用此选项。
缓冲你的数据表
(可选)还可以用于 Table.Buffer 强制读取所有数据,从而模仿加载过程中发生的情况。 要在 Power Query 编辑器中使用 Table.Buffer:
在 Power Query 编辑器编辑栏中,选择 fx 按钮以添加新步骤。
在公式栏中,用 Table.Buffer(<上一步名称在此处>)括起上一步的名称。 例如,如果上一步已命名
Source,则公式栏将显示= Source。 编辑公式栏中的步骤为= Table.Buffer(Source)。
详细信息: Table.Buffer
运行测试
若要运行测试,请在 Power Query 编辑器中刷新。