在 Power BI 中可视化和解释查询诊断

介绍

记录要使用的诊断后,下一步是需要能够了解其所说的内容。

充分了解查询诊断架构中每个列的确切含义很有用,本简短教程不重述这方面的内容。 此处有这方面的详细描述。

通常,在生成可视化效果时,最好使用完整的详细表。 因为无论有多少行,你可能看到的是对在不同资源上花费的时间如何累加的某种描述,或者发出的本机查询是什么。

正如在关于记录诊断的文章中所提到的那样,我正在对同一个表(来自 Northwind 的 Customers 表)使用 OData 和 SQL 跟踪(或几乎是这样)。 具体而言,我将专注于客户的常见请求,以及其中一个更容易解释的跟踪集:数据模型完全刷新。

构建可视化效果

完成跟踪时,你可以通过多种方式评估这些跟踪。 在本文中,我们将重点介绍两个可视化拆分 - 一个显示你关心的详细信息,另一个用于轻松查看各种因素的占用时间。 对于第一个可视化效果,使用了一个表。 你可以选取喜欢的任何字段,但建议选取用于轻松、深入了解有关情况的字段:

对于第二个可视化效果,一种选择是使用堆积柱形图。 在“Axis”参数中,你可能需要使用“Id”或“步骤”。 如果我们正在查看“刷新”,因为它与编辑器本身中的步骤无关,那么我们可能只想查看“Id”。 对于“Legend”参数,应设置“类别”或“操作”(具体取决于所需的粒度)。 对于“值”,请设置“独占持续时间”(并确保它不是百分比,以便获取原始持续时间值)。 最后,对于“工具提示”,请设置“最早开始时间”。

生成可视化效果后,请确保按“最早开始时间”升序排序,以便查看事情的发生顺序。

详细信息和时间聚合的可视化效果。

虽然确切的需求可能有所不同,但这种图表组合是开始查看许多诊断文件以及实现多种目的的适当位置。

解释可视化效果

如上所述,你可以尝试通过查询诊断来回答许多问题,但最常见的两个问题是:花费了多少时间以及发送到源的查询是什么。

询问花费了多少时间很简单,这对于大多数连接器而言是相似的。 如其他地方所述,包含查询诊断的警告是:根据连接器的不同,你将看到截然不同的功能。 例如,许多基于 ODBC 的连接器不会准确记录发送到实际后端系统的具体查询,因为 Power Query 只查看它发送到 ODBC 驱动程序的内容。

如果想要了解时间的花费方式,只需查看上面生成的可视化效果。

现在,由于我们在此处使用的示例查询的时间值太小,因此,如果想要使用 Power BI 报告时间的方式,最好在 Power Query 编辑器中将独占持续时间 列转换为“秒”。 完成此转换后,我们可以查看图表,并大致了解时间花在哪里了。

对于我的 OData 结果,我在图像中看到绝大部分时间都花在从源检索数据上 - 如果我选择图例上的“数据源”项,则会显示与向数据源发送查询相关的所有其他操作。

OData Northwind 查询诊断摘要。

如果我们执行所有相同的操作并生成类似的可视化效果,但使用 SQL 跟踪而不是 ODATA 跟踪,那么我们可以了解两个数据源的比较情况!

带有 SQL 跟踪的 OData Northwind 查询诊断摘要。

如果选择数据源表,那么就像使用 ODATA 诊断一样,我们可以看到第一个评估(此图中的 2.3)发出元数据查询,第二个评估实际检索我们关心的数据。 由于我们在本例中检索的数据量少,因此提取回数据需要少量时间(整个第二次评估发生的时间不到十分之一秒,数据检索本身的时间不到二十分之一秒) ,但并非在所有情况下都是如此。

如上所述,我们可以在图例中选择“数据源”类别以查看发出的查询。

挖掘数据

查看路径

查看此情况时,如果花费的时间很奇怪,例如,在 OData 查询上,你可能会看到数据源查询具有以下值:

Request:
https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle%20eq%20%27Sales%20Representative%27&$select=CustomerID%2CCountry HTTP/1.1
Content-Type: application/json;odata.metadata=minimal;q=1.0,application/json;odata=minimalmetadata;q=0.9,application/atomsvc+xml;q=0.8,application/atom+xml;q=0.8,application/xml;q=0.7,text/plain;q=0.7

<Content placeholder>

Response:
Content-Type: application/json;odata.metadata=minimal;q=1.0,application/json;odata=minimalmetadata;q=0.9,application/atomsvc+xml;q=0.8,application/atom+xml;q=0.8,application/xml;q=0.7,text/plain;q=0.7
Content-Length: 435

<Content placeholder>

此数据源查询与仅占用独占持续时间 1% 的操作关联。 同时,存在一个类似项:

Request:
GET https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales Representative'&$select=CustomerID%2CCountry HTTP/1.1

Response:
https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales Representative'&$select=CustomerID%2CCountry
HTTP/1.1 200 OK

此数据源查询与几乎占用独占持续时间 75% 的操作关联。 如果打开 路径,则会发现后者实际上是前者的子项。 这意味着第一个查询基本上自行增加了少量时间,实际数据检索由“内部”查询进行跟踪。

这些是极端值,但它们位于可能看到的内容边界内。