在 Power BI 中记录查询诊断

在Power Query创作查询时,基本工作流是连接到数据源、应用一些转换、在Power Query编辑器中刷新数据,然后将其加载到Power BI模型。 将数据加载到 Power BI 模型后,除了在服务中进行的刷新之外,还可以在 Power BI Desktop 中不时刷新它(如果你使用 Power BI Desktop 查看分析内容)。

虽然在创作工作流结束时、在编辑器中刷新时,或在 Power BI 本身中刷新时,你最终可能会得到类似的结果,但软件针对其提供的不同用户体验所执行的评估却截然不同。 请务必了解在这些不同工作流中执行查询诊断时会发生什么情况,以便对不同的诊断数据并不感到惊讶。

若要启动查询诊断,请转到 Power Query 编辑器功能区中的 “工具 ”选项卡。 你会看到几个不同的选项。

Power Query编辑器功能区的屏幕截图。

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

连接器细节

本文不能介绍查询诊断中提供的所有不同排列。 许多操作可能会更改你看到的结果,包括:

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

为了尽可能广泛地涵盖相关内容,本文重点讲解 SQL 和 OData 中的 Northwind Customers 表的查询诊断。 OData 相关说明使用 OData.org 网站上的公共端点,而你则需要自行提供 SQL Server。 许多数据源与这些源明显不同。 随着时间推移,Microsoft 会陆续添加连接器专属文档。

启动和停止诊断

“启动诊断”和“停止诊断”命令涵盖了诊断步骤以外的更多方案。 它们还会提供更多你需要梳理的信息。 例如,启动诊断、刷新预览,然后停止诊断可提供等效的信息,以便在每个步骤上运行 诊断步骤 。 之所以存在这种等效关系,是因为 Power Query 在编辑器中会独立刷新每个步骤。

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

创作

创作工作流主要不同于其他工作流,因为它通常生成更多单独的评估。 如《Query Diagnostics》主要文章中所述,这些评估是由填充各种用户界面(如导航器或筛选器下拉列表)而产生的。

本节将介绍一个示例。 该示例使用 OData 连接器,但在查看输出时,还查看同一数据库的 SQL 版本。 对于这两个数据源,可以通过 “新建源”、“ 最近使用源”或 “获取数据”连接到数据源。 对于 SQL 连接,您需要输入服务器凭据;而对于公共 OData 终结点,您可以输入前文链接的终结点。

显示 OData 连接的屏幕截图。

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

显示 Northwind 导航的屏幕截图。

可在Power Query界面中看到 Customers 表。 假设你想知道不同国家或地区有多少销售代表。 首先,右键单击“联系人标题”列下的“销售代表”,将鼠标悬停在“文本筛选器”上,然后选择“等于”。

显示文本筛选器选项的屏幕截图。

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

显示分组依据操作的屏幕截图。

你将看到下图中看到的相同数据。

显示结果的屏幕截图。

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

如果跟踪整个创作过程,通常会看到类似这样的情况:先是对源查询的评估,然后是与相关导航器有关的评估,接着你应用的每个步骤至少都会生成一个查询(具体数量可能更多,这取决于执行了哪些具体的界面操作)。 在某些连接器中,并行评估因产生类似数据集的性能原因而进行。

刷新预览

完成数据转换后,在查询中创建一系列步骤。 在Power Query编辑器中选择“刷新预览”或“全部刷新”时,查询诊断中不会只看到一个步骤。 在 Power Query 编辑器中执行刷新操作时,会显式刷新应用了最后一个步骤后的查询。 然后,它会逐步执行已应用的步骤,并将查询刷新到该点,返回到源。

此过程意味着,如果查询中有五个步骤(包括源和导航器),则诊断中会显示五个不同的评估。 第一次评估,按时间顺序排列,通常(但并不总是)需要最长的时间。 两个不同的原因会导致持续时间更长:

  • 它可能会缓存输入数据,以便在其后运行的查询能够更快地在本地访问这些数据(这些数据代表用户查询中的较早步骤)。
  • 它已应用转换,可显著截断其返回的数据量。

选择“ 全部刷新”时,它会刷新所有查询。 你需要筛选出你关心的那些,正如你所预料的那样。

完全刷新

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

显示用于应用查询更改的按钮的屏幕截图。

无论哪种方式,请确保在编辑器的“工具”选项卡的“诊断”部分中选择“启动诊断”。 选择此选项后,请刷新模型,甚至只刷新所关心的表。

显示刷新数据选项的屏幕截图。

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

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

请务必注意,只是因为你在诊断中看到资源(数据库、Web 终结点等)或数据源查询,并不意味着它必然执行网络活动。 Power Query可能会从其缓存中检索此信息。

诊断步骤

诊断步骤功能可让您了解截至某一步会进行哪些评估。 此信息可帮助你了解截至该步骤的性能表现,以及查询的哪些部分在本地运行,哪些部分在远程运行。

如果在前面生成的查询上使用 “诊断步骤” ,则会看到它返回大约 10 行。 如果查看数据源查询的最后一行,可以清楚地了解最终向数据源发出的查询的外观。 在这种情况下,可以看到Power Query远程筛选销售代表,但分组发生在本地。

显示已筛选和分组的“客户”表的屏幕截图。

如果启动和停止诊断并刷新同一查询,将获得 40 行。 如前所述,Power Query获取每个步骤的信息,而不仅仅是最后一步。 这种行为使得更难深入了解查询的一个特定部分。