Power BI: 分析DAX查询计划

2023-11-13 21:08:49 浏览数 (2)

文章背景: 最近在学习DAX权威指南第19章,介绍了DAX查询引擎的组件,解释了如何使用DAX Studio获取与特定DAX表达式相关的查询计划和性能计数器的信息。这些知识是优化任何DAX公式的基础。

1 捕获DAX查询2 DAX查询计划介绍3 收集查询计划

1 捕获DAX查询

收集报表生成的查询是优化DAX查询的第一步。可以通过DAX Studio来捕获和分析DAX查询。

打开要分析的Power BI Desktop文件,使用DAX Studio选择对应的文件名称可以连接这个Power BI模型,如下图所示。

连接成功后,激活Home功能区的Traces选项卡中的All Queries按钮,DAX Studio就可以开始捕获发送到表格模型引擎中的所有查询,如下图所示。

此时,客户端中执行的每个操作都可能产生一个或多个查询。例如,Power BI为页面中的每一个视觉对象生成至少一个DAX查询。下图显示了在大洲切片器中选择欧洲(Europe)时捕获的查询。

你可以很容易地发现第一个查询的持续时间约为3s。剩余的所有查询都非常快,因此不必花精力去关注。DAX Studio可以让你快速发现最慢的查询,然后将注意力集中在这些查询上。

当你双击All Queries列表中的某一列时,该查询将被复制到编辑器窗口中。当你按Home选项卡上高亮显示的Format Query按钮时,查询会使用DAX Formatter提供的Web服务格式化代码。

一旦按照这些步骤识别出慢速查询,就可以在DAX Studio中多次执行该查询。在这个过程中,可以分析它的查询计划和其他相关指标来评估瓶颈,并尝试执行可以提高性能的操作。

2 DAX查询计划介绍

查询计划是一组信息的通用定义,其中包括两种不同类型的查询计划(逻辑查询计划和物理查询计划),以及由物理查询计划使用的存储引擎查询的列表。除非另有说明,否则通用术语查询计划指的是所有关于查询计划的详细信息。

DAX查询引擎由两层组成:公式引擎(FE)和存储引擎(SE)。每个查询结果都是通过执行以下步骤生成的:

  1. 构建表达式树;
  2. 构建逻辑查询计划;
  3. 构建物理查询计划;
  4. 执行物理查询计划。

第1步和性能分析无关。第2和第3步涉及公式引擎,而第4步还涉及存储引擎。

3 收集查询计划

DAX查询会生成逻辑查询计划和物理查询计划。这些计划详细描述了查询引擎的操作。

观察下面这个在DAX Studio中执行的简单查询:

代码语言:javascript复制
EVALUATE
{ SUM (Sales[Quantity])}

结果是一个单行单列(列名为Value)的表,其中填充了销售表所有行在Quantity列的和。

DAX Studio会收集在其内部执行的一个或多个查询所产生的跟踪事件,并显示有关查询和存储引擎的相关信息。

在使用DAX Studio分析查询之前,必须要在Traces选项卡中启用Query Plan和Server Timings选项,如下图所示。

Query Plan窗格显示了查询生成的两个查询计划,如下图所示。

你可以在窗格的上半部分看到物理查询计划,在下半部分看到逻辑查询计划。对于物理查询计划,列表中还提供了一个列,其中包含spool操作迭代的记录数(spool操作是由公式引擎执行的迭代,通常在数据缓存上执行)。

Server Timings窗格显示了与存储引擎查询相关的信息,以及执行时间是如何在公式引擎和存储引擎之间分配的。

在Server Timings窗格的左侧,可以看到各种指标;中间的列表显示了执行的存储引擎查询,在右侧可以看到在中间列表中选择的存储引擎查询对应的代码。

DAX Studio使寻找DAX查询瓶颈的过程变得更加高效。其本身并不优化DAX,但它简化了优化任务。

视频讲解:

参考资料:

[1] DAX权威指南(https://www.powerbigeek.com/definitive-guide-to-dax-cn/

0 人点赞