为什么我的查询运行了多次?

在 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 编辑器默认下载每个查询步骤的前 1000 行进行预览。 下载这些行有助于确保在选择步骤后立即显示数据预览,但也可能导致数据源请求重复。 详情请见:禁用后台分析

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 BI 的“禁用 Power Query 后台刷新”。 你也可以在 Excel 中禁用此选项。

图像,其中显示禁用了后台分析的 Excel 的“查询选项”。

缓冲表

(可选)还可以用 Table.Buffer 强制读取所有数据,从而模仿加载过程中发生的情况。 若要在Power Query 编辑器中使用 Table.Buffer

  1. 在 Power Query 编辑器编辑栏中,选择 fx 按钮添加新步骤。

    图像,其中突出显示“fx”按钮位置。

  2. 在编辑栏中,用 Table.Buffer 将上一步的名称包围(<上一步名称放在此处>)。 例如,如果上一步命名为 Source,则编辑栏将显示 = Source。 编辑编辑栏中的步骤显示 = Table.Buffer(Source)

详情请见:Table.Buffer

运行测试

若要运行测试,请在 Power Query 编辑器中刷新。

图像,其中突出显示刷新按钮位置。