查询诊断
通过查询诊断,可以更好地了解 Power BI Desktop 中 Power Query 在编写和刷新时正在执行的操作。 我们将在未来扩展此功能,包括添加在完全刷新期间使用的功能,但目前可以使用此功能来了解所发出的查询类型、创作刷新期间可能会遇到的慢速问题以及发生的后台事件类型。
要使用查询诊断,请转到 Power Query 编辑器功能区中的工具选项卡。
默认情况下,查询诊断可能需要管理权限才能运行(具体取决于 IT 策略)。 如果发现自己无法运行查询诊断,请打开 Power BI Desktop 选项页面,在“诊断”选项卡中选择“在查询编辑器中启用(不需要以管理员身份运行)”。 此选择将限制你在对 Power BI(而不是 Power Query 编辑器)进行完全刷新时跟踪诊断。 但允许你在预览、创作等情况下仍使用诊断。
每次开始诊断时,Power Query 就会开始跟踪你引起的任何评估。 大多数用户认为的评估是在按下刷新或首次检索数据时。 但根据连接器的不同,有许多操作可能会导致评估。 例如,在 SQL 连接器中,检索要筛选的值列表时,也会启动评估,但它与用户查询无关,这在诊断中有所体现。 其他系统生成的查询可能包括导航器或获取数据体验。
按下“诊断步骤”时,Power Query 会对你正在查看的步骤运行特殊评估。 然后,它会显示该步骤的诊断结果,而不显示查询中其他步骤的诊断结果。 此评估会更容易缩小问题视图。
若要记录“开始诊断”中的所有轨迹,请务必按下“停止诊断”。 停止诊断允许引擎收集记录的跟踪并将其解析为适当的输出。 如果没有此步骤,将丢失跟踪。
我们目前提供三种类型的诊断,其中一种具有两个级别的详细信息。
第一种诊断是初级诊断,其中包含详细视图和汇总视图。 汇总视图旨在让你立即了解查询中时间使用情况。 详细视图更深入,逐行查看,一般情况下,只有高级用户在进行认真诊断时才需要使用。
对于此视图,某些功能(如数据源查询列)目前仅适用于某些连接器。 今后,我们将努力扩大覆盖范围。
数据隐私分区可让你更好地了解用于数据隐私的逻辑分区。
备注
Power Query 可能会执行你可能未直接触发的评估。 执行其中一些评估是为了检索元数据,以便优化查询或提供更好的用户体验(例如检索列中显示的“筛选行”体验中的非重复值列表)。 其他可能与连接器如何处理并行评估有关。 同时,如果在查询诊断中看到你认为无意义的重复查询,请随时通过正常的支持渠道联系我们,您的反馈可以帮助我们改进产品。
查询诊断提供两种视图:汇总视图和详细视图。 汇总视图将多个相关操作“折叠”成单个操作。 在此过程中,将合并每个操作收集的详细信息,并求和独占持续时间。 在此过程中不会丢失任何信息。
汇总视图概述了评估期间发生的情况,便于进行高级评审。 如果需要进一步细分特定操作,可以查看组 ID,并查看在“详细信息”视图中分组的相应操作。
在 Power Query 编辑器中进行刷新时,会有大量后台操作,以便提供流畅的用户体验。 例如,刷新预览时,评估器将执行每个给定查询的最后一步。 但在后台,它会依次运行 n-1、n-2 等步骤。 因此,如果回退步骤,它已经可用了。
为了提供更高的性能,目前会进行一些缓存,这样在回退步骤时就不必重新运行最终查询计划的每个部分。 虽然此缓存对于正常创作很有用,但这意味着,由于后续评估会使用缓存数据,并不总是能获得正确的步骤比较信息。
分析记录结果时,请务必按 ID 筛选记录会话,这样独占持续时间 % 等列才有意义。
ID 是复合标识符。 它由两个数字组成,一个数字在点前,一个在点之后。 第一个数字对于单个用户操作产生的所有评估都是相同的。 换句话说,如果按两次刷新键,点前就会有两个不同的数字,每个用户活动都会有一个数字。 对于给定的诊断记录,此编号是连续的。
第二个数字代表引擎的评估。 在评估排队的进程生存期内,此数字是连续的。 如果运行多个诊断记录会话,则会看到此数字在不同会话中持续增长。
总之,如果开始记录,按一次评估键并停止记录,诊断中就会出现一定数量的 ID。 但是,由于只采取了一个操作,这些 ID 将都是 1.1、1.2、1.3,以此类推。
activityId 与 evaluationId 的组合用点分隔,为单个记录会话的评估提供唯一标识符。
Power Query 编辑器左侧窗格中的“查询”名称。
Power Query 编辑器右侧窗格中的步骤名称。 即使不刷新步骤,筛选器下拉列表等内容通常也会与筛选的步骤相关联。
操作的类别。
数据会告诉你正在访问哪种数据源,例如 SQL 或 Oracle。
正在执行的实际操作。 此操作包括评估器工作、打开连接、向数据源发送查询等。
操作开始的时间。
操作结束的时间。
事件的“独占持续时间”列表示事件处于活动状态的时间。 这与事件的“开始时间”列和“结束时间”列中的值相减后得到的“持续时间”值不同。 此“持续时间”值表示事件从开始到结束的总时间,其中可能包括事件处于暂停或非活动状态的时间,以及另一个事件正在消耗资源的时间。
在 ID 列所代表的给定评估中,独占持续时间百分比加起来约为 100%。 例如,如果筛选 ID 为 1.x 的行,则独占持续时间百分比总和约为 100%。 如果对给定诊断表中所有行的独占持续时间百分比值求和,则情况并非如此。
独占持续时间的绝对时间,而不是百分比 (%) 评估的总持续时间(即独占持续时间 + 事件处于非活动状态的时间)有两种计算方法:
找到名为“评估”的操作。结束时间与开始时间之间的差值即为事件的总持续时间。
用最长结束时间减去事件中所有操作的最短开始时间。 如果收集到的事件信息未计入总持续时间,则会生成名为“跟踪间隔”的操作来计算此时间差距。
要访问的数据资源。 此资源的确切格式取决于数据源。
Power Query 可以进行折叠操作,即针对后端数据源运行尽可能多的查询部分。 在 DirectQuery 模式(通过 Power Query)中(如启用),则只有折叠的转换才会运行。 在导入模式下,无法折叠的转换将改为在本地运行。
通过“数据源查询”列,可以查看针对后端数据源发送的查询或 HTTP 请求/响应。 在编辑器中创作查询时,会发出许多数据源查询。 其中一些查询是用于呈现预览的实际最终数据源查询。 但其他查询可能用于数据分析、筛选器下拉列表、联接信息、检索架构的元数据以及任意数量的其他小型查询。
一般情况下,除非有特殊原因,否则不应担心发出的数据源查询数量。 相反,应专注于确保检索正确的内容。 此列还可能有助于确定 Power Query 评估是否已完全折叠。
连接器会检索到大量信息。 其中很多信息都很粗糙,并不适合标准列层次结构。 这些信息将放入其他信息列的记录中。 自定义连接器记录的信息也在此处显示。
由数据源查询返回的行数 未在所有连接器上启用。
通常定义为 HTTP 请求返回的内容长度。 此架构并非在所有连接器中启用,而且对于分区块检索请求的连接器来说,这并不准确。
布尔值,用于指示是由用户创作并显示在左侧窗格中的查询,还是由其他用户操作生成的查询。 其他用户操作可以包括在获取数据体验中选择筛选器或使用导航器等。
路径表示操作的相对路径,是单个评估中所有操作的间隔树的一部分。 在树的顶部(根),有一个名为“评估”的操作,路径为“0”。此评估的开始时间与整个评估的开始时间相对应。 此评估的结束时间表示整个评估完成的时间。 此顶级操作的独占持续时间为 0,因为其唯一目的是充当树的根。
根目录的进一步操作分支。 例如,某个操作的路径可能是“0/1/5”。 此路径可理解为:
- 0:树根
- 1:当前操作的父级
- 5:当前操作的索引
操作“0/1/5”可能具有子节点,在这种情况下,路径的格式为“0/1/5/8”,其中 8 表示子节点的索引。
如果合并两个(或更多)操作会导致详细信息丢失,则不会进行合并。 分组的目的是为估算评估期间执行的“命令”。 在详细视图中,多个操作共享一个组 ID,该 ID 与“汇总”视图中汇总的组相对应。
与大多数列一样,组 ID 仅在特定评估中相关,如 ID 列筛选的那样。
与其他查询诊断结果的 ID 相同。 整数部分表示单个活动 ID,而小数部分表示单个评估。
与用作防火墙分区的查询/步骤相对应。
解释为何必须单独评估此分区的分类,包括分区隐私级别的详细信息。
此分区访问的所有资源的资源路径列表,一般用于唯一标识数据源。
当前分区所依赖的分区键列表(此列表可用于构建图形)。
在分区的查询/步骤的基础上进行评估的表达式。 在某些情况下,它与查询/步骤相吻合。
开始评估此分区的时间。
此分区评估结束的事件。
由结束时间减去开始时间得出的值。
如果假定分区在单个线程中执行,则独占持续时间是可归因于此分区的“实际”持续时间。
独占持续时间的百分比。
仅当同时捕获“汇总”或“详细”查询诊断时,才会显示此列,以便用户对应两种诊断的输出。
运行性能计数器时,Power Query 每半秒都会拍摄一次资源利用率快照。 此快照对非常快速的查询没有用,但对占用较多资源的查询很有帮助。
处理器花在查询上的时间百分比。 由于有多个处理器,此百分比可能超过 100%。
处理器在查询上花费的总持续时间。
从数据源接收数据的吞吐量速度(以每秒字节数表示)。
评估保留的虚拟内存量。
评估预留的内存量。