在 Power BI 中记录查询诊断

在 Power Query 中创作时,基本工作流是连接到数据源、应用某些转换、可能在 Power Query 编辑器中刷新数据,然后将其加载到 Power BI 模型。 一旦进入 Power BI 模型后,除了通过服务执行的任何刷新外,您还可以在 Power BI Desktop 中定期刷新数据(如果您使用 Power BI Desktop 查看数据分析)。

在创作工作流结束时、在编辑器中刷新或在 Power BI 主程序中刷新时,您可能会获得类似的结果,但是软件会根据提供的不同用户体验运行截然不同的评估。 请务必了解在这些不同工作流中执行查询诊断时需要期待什么,因此你对非常不同的诊断数据并不感到惊讶。

若要启动查询诊断,请转到 Power Query 编辑器功能区中的 “工具 ”选项卡。 此处提供了一些不同的选项。

查询诊断控件。

此处有两个主要选项:“诊断步骤”和“启动诊断”(与“停止诊断”配对)。 前者将提供关于查询前至所选步骤的信息,并且最有助于理解在查询中本地或远程执行的操作。 后者可让你更深入地了解下面讨论的各种其他情况。

连接器细节

请务必说明,查询诊断中看到的所有的不同情形无法完全涵盖。 有很多事情可以完全改变你在结果中看到的内容:

  • Connector
  • 已应用的转换
  • 正在运行的系统
  • 网络配置
  • 高级配置选项
  • ODBC 配置

为了提供最广泛的覆盖,本文档将重点关注 Northwind 客户表的查询诊断,包括 SQL 和 OData。 OData 说明使用 在 OData.org 网站上找到的公共终结点,而你需要自己提供 SQL 服务器。 许多数据源将明显不同于这些,并且随着时间推移会添加有关连接器的特定文档。

启动/停止诊断

“启动诊断”和“停止诊断”的应用范围比“诊断步骤”更广泛,但也会提供大量信息需要你去整理。 例如,启动诊断、刷新预览,然后停止将为你提供与在每个步骤上运行“诊断步骤”等效的信息(由于 Power Query 在编辑器中的工作方式可以独立刷新每个步骤)。

若要开始录制,请选择 “启动诊断”,执行所需的任何评估(创作、预览刷新、完全刷新),然后选择“ 停止诊断”。

创作

创作工作流的主要区别在于,它通常会生成比在其他工作流中看到的更多的单独评估。 如主要查询诊断文章中所述,这是填充各种用户界面(如导航器或筛选器下拉列表)的结果。

我们将演练一个示例。 我们在此示例中使用 OData 连接器,但在查看输出时,我们还将查看同一数据库的 SQL 版本。 对于这两个数据源,我们将通过“新建源”、“最近源”或“获取数据”连接到数据源。 对于 SQL 连接,您需要输入服务器的凭据,但对于公共 OData 终结点,您可以使用上面链接的终结点。

OData 连接。

连接并选择身份验证后,从 OData 服务中选择 “客户 ”表。

Northwind 导航。

这将在 Power Query 界面中显示 Customers 表。 假设我们希望了解不同国家/地区有多少销售代表。 首先,右键单击“联系人标题”列下的“销售代表”,将鼠标悬停在“文本筛选器”上,然后选择“等于”。

将文本筛选器应用于联系人标题。

现在,从功能区中选择 “分组依据 ”,然后按 国家/地区执行分组,聚合为 计数

应用分组依据。

这应该会显示下面看到的相同数据。

结果。

最后,导航回功能区的 “工具 ”选项卡,然后选择“ 停止诊断”。 这将停止跟踪并生成诊断文件,摘要和详细表将显示在左侧。

如果跟踪整个创作会话,通常会看到类似于源查询评估的内容,然后是与相关导航器相关的评估,然后至少会为您应用的每个步骤发出一个查询(具体数量可能取决于执行的精确 UX 操作)。 在某些连接器中,出于性能原因,并行评估将产生非常相似的数据集。

刷新预览

完成数据转换后,查询中有一系列步骤。 在 Power Query 编辑器中按“刷新预览”或“全部刷新”时,查询诊断中不会只看到一个步骤。 在 Power Query 编辑器中刷新时,原因是它会显式刷新查询到应用的最后一个步骤,然后倒退通过已应用的步骤,并将查询刷新到起始源头。

这意味着,如果查询中有五个步骤(包括源和导航器),则预计诊断中会出现五个不同的评估。 第一个,按时间顺序排列,往往(但并不总是)需要最长的时间。 这是因为有两个不同的原因:

  • 它可能会缓存输入数据,从而使随后运行的查询(代表用户查询中的早期步骤)能够更快地在本地访问这些数据。
  • 它可能应用了转换,从而显著减少了所需返回的数据量。

请注意,当谈到“全部刷新”时,所有查询都会被刷新,因此就像预期的一样,您需要筛选出您关注的查询。

完全刷新

查询诊断可用于诊断 Power BI 中刷新期间发出的所谓“最终查询”,而不仅仅是 Power Query 编辑器体验。 为此,首先需要将数据加载到模型一次。 如果打算执行此作,请确保你意识到,如果选择“ 关闭并应用 ”,编辑器窗口将关闭(中断跟踪),因此你要么需要在第二次刷新时执行此作,要么选择 “关闭”和“应用 ”下的下拉列表图标,然后改为选择“ 应用 ”。

应用查询更改。

无论哪种方式,请确保在编辑器的“工具”选项卡的“诊断”部分选择“启动诊断”。 在完成此步骤后,刷新你的模型,或甚至只需刷新你关注的表。

刷新表。

将数据加载到模型后,选择“ 停止诊断”。

可以预期看到元数据和数据查询的一些组合。 元数据调用函数会获取能获取到的关于数据源的信息。 数据检索涉及访问数据源,生成包含压缩操作的最终数据源查询,并在本地进行缺失评估的执行。

请务必注意,只是因为你在诊断中看到资源(数据库、Web 终结点等)或数据源查询,并不意味着它必然执行网络活动。 Power Query 可以从其缓存中检索此信息。 在未来的更新中,我们将指示是否从缓存中检索信息,以便更轻松地进行诊断。

诊断步骤

“诊断步骤”非常有助于深入了解在单个步骤中正在进行的评估。在此过程中,它可以帮助你识别出直到该步骤为止的性能表现,以及查询的哪些部分是在本地执行,哪些部分是在远程执行。

如果在上面生成的查询上使用了“诊断步骤”,你会发现它只返回 10 行左右,如果查看数据源查询的最后一行,我们可以很好地了解最终向数据源发出的查询是什么。 在这种情况下,我们可以看到销售代表已通过远程过滤,但分组(通过排除法)发生在本地。

诊断筛选和分组的客户表。

如果启动和停止诊断并刷新同一查询,我们将获得 40 行,因为如上所述,Power Query 会获取有关每个步骤的信息,而不仅仅是最后一步。 这样,当你只是尝试深入了解查询的一个特定部分时,会更加困难。

补充阅读

功能简介

详细了解如何读取和可视化录制的跟踪

如何使用查询诊断了解哪些查询操作被折叠