在 Power BI 中记录查询诊断

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

虽然在创作工作流、在编辑器中刷新或在 Power BI 中正确刷新结束时可以得到类似的结果,但软件会针对所提供的不同用户体验运行截然不同的评估。 请务必了解在这些不同工作流中执行查询诊断时需要什么,这样,你对大不相同的诊断数据不会感到惊讶。

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

查询诊断控件。

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

连接器详细信息

值得一提的是,没有办法涵盖你将在查询诊断中看到的内容的所有不同排列。 有很多因素可以改变你在结果中看到的确切内容:

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

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

启动/停止诊断

“启动诊断”和“停止诊断”比“诊断步骤”更广泛适用,但也会为你提供更多需要排序的信息。 例如,如果启动诊断、刷新预览,然后停止,则将为你提供与在每个步骤上运行“诊断步骤”等效的信息(取决于如何在编辑器中使用 Power Query 独立刷新每个步骤)。

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

创作

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

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

OData 连接。

连接并选择身份验证后,请从 OData 服务中选择 Customers 表。

Northwind 导航。

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

将“文本筛选器”应用于“contact title”。

现在,从功能区中选择分组依据,然后按国家/地区进行分组,并将聚合设为计数

应用“分组依据”。

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

结果。

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

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

刷新预览

完成数据转换后,查询中会有一系列步骤。 在 Power Query 编辑器中按“刷新预览”或“全部刷新”时,你在查询诊断中不会只看到一个步骤。 其原因是,在 Power Query 编辑器中进行刷新会显式刷新以应用的最后一个步骤结束的查询,然后逐步回溯所应用的步骤,刷新查询到该点,并返回到源。

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

  • 它可能会缓存输入数据,以便在其之后运行的查询(表示用户查询中的较早步骤)可以在本地更快地进行访问。
  • 它可能应用了转换,从而显著截断了必须返回的数据量。

请注意,在谈到“全部刷新”时,它将刷新所有查询,并且你需要筛选出你关注的查询,正如您所期望的那样。

完全刷新

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

应用查询更改。

无论使用哪种方式,请确保在编辑器内工具选项卡的诊断部分中选择启动诊断。 完成此操作后,请刷新模型,甚至只刷新你关注的表。

刷新表。

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

你应该会看到元数据和数据查询的某种组合。 元数据调用可获取有关数据源的信息。 数据检索是指访问数据源,通过折叠操作发出最终构建的数据源查询,然后在本地执行上面缺少的任何评估。

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

诊断步骤

“诊断步骤”更有助于深入了解单个步骤中发生的具体评估,这可以帮助你识别截止到该步骤的性能情况,以及查询的哪些部分在本地或远程执行。

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

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

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

其他阅读材料

功能简介

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

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