查询折叠指示器

注意

在阅读本文之前,建议阅读 Power Query 中的查询评估和查询折叠概述,以便更好地了解 Power Query 中的折叠工作原理。

查询折叠指示器可帮助你了解折叠或不折叠的步骤。

有了查询折叠指示器,当你做出中断折叠的更改时就会一目了然。 此功能可帮助你更轻松快速地解决问题,避免从一开始就出现性能问题,并更好地了解查询。 在大多数情况下,步骤会折叠或不折叠。 但在很多情况下,结果并不那么明显,这些情况将在步骤诊断指标(动态、不透明和未知)中讨论。

注意

查询折叠指示器功能仅适用于 Power Query Online。

解释查询折叠诊断

在检查某个步骤旁边的查询折叠指示器时,最重要的一点是要了解诊断状态不是连续的。 换句话说,该步骤的指示器描述到该步骤为止的整个查询是否折叠。 如果有一个指示器显示查询未折叠,紧接着又有一个指示器显示查询折叠了,这意味着到此为止的查询确实折叠了。

此解释甚至适用于针对 SQL 源的简单查询。 例如,使用 AdventureWorks 示例数据库连接到 Production.Product 表并加载数据。 通过 Power Query 导航器加载此示例,会得到如下查询结果:

let
  Source = Sql.Database("ServerName", "AdventureWorks"),
  Navigation = Source{[Schema = "Production", Item = "Product"]}[Data]
in
  Navigation

如果检查此代码在查询折叠指示器中的显示情况,就会发现第一步没有结果。 但第二步确实折叠了,这意味着到此为止的查询确实折叠了。

“折叠指示器”窗格中的“源”和“导航”步骤的屏幕截图。

在此示例中,最初的步骤无法确认是否折叠(不确定),但最初加载数据时生成的最后一步确实折叠了。 如何处理第一步(,有时还有其他导航步骤)取决于连接器。 以 SQL 为例,它作为目录表值进行处理,不会折叠。 但是,一旦为该连接器选择数据,它就会折叠。

相反,此指示也可能意味着查询折叠到某个点,然后停止折叠。 与步骤的折叠指示器显示所有内容都折叠的情况不同,当你有一个不折叠指示器时,并不意味着所有内容都不折叠。 相反,这意味着“并非所有”都折叠。 通常,在最后一个折叠指示器之前的所有内容都会折叠,之后会进行更多操作。

修改前面的示例,你可以给出永不折叠的转换 — 每个字词首字母大写

let
  Source = Sql.Database("ServerName", "AdventureWorks"),
  Navigation = Source{[Schema = "Production", Item = "Product"]}[Data],
  #"Capitalized each word" = Table.TransformColumns(Navigation, {{"Name", each Text.Proper(_), type text}})
in
  #"Capitalized each word"

在查询折叠指示器中,除了最后一步不折叠外,其他指示器与上述指示器相同。 最后一步之前的所有操作都会在数据源上执行,而最终步骤会在本地执行。

“折叠指示器”窗格中的“源”、“导航”和“每个字词首字母大写”步骤的屏幕截图。

步骤诊断指示器

查询折叠指示器使用基础查询计划,并要求该计划能够获取有关查询信息以进行报告。 目前,查询计划仅支持表,因此某些情况(列表、记录、基元)不会报告是否折叠。 同样,常量表也会报告为不透明。

指示器 Icon 说明
折叠 折叠指示器会告诉你,数据源会对到这一步为止的查询进行评估。
不折叠 不折叠指示器会告诉你,到此步骤查询的某些部分会在数据源外部进行评估。 可以将它与最后一个折叠指示器(如果有)进行比较,查看是否可以重新排列查询,使其性能更高。
可能折叠 折叠指示器可能并不常见。 它们表示查询“可能”折叠。 它们表明,折叠或不折叠将在运行时从查询中拉取结果时确定,而且查询计划是动态的。 这些指示器可能只出现在 ODBC 或 OData 连接中。
不透明 不透明指示器会告诉你,由于某种原因,结果查询计划是不确定的。 这通常表示存在真正的“常量”表,或者指示器和查询计划工具不支持该转换或连接器。
Unknown 未知指示器表示由于出错或视图对表以外的内容(如记录、列表或基元)运行查询计划评估而缺少查询计划。

示例分析

有关示例分析,请首先连接到 Adventure Works (SQL) 中的 Production.Product 表。 初始加载与初始示例类似,如下图所示。

用于加载“产品”表的初始步骤指示器的屏幕截图。

添加更多折叠步骤会延长右侧的绿线。 出现这种延长是因为此步骤也会折叠。

屏幕截图显示了向上一个查询添加移除列步骤如何延长绿色折叠指示线。

添加不折叠的步骤会显示不同的指示器。 例如,将每个单词大写永远不会折叠。 指示器会发生变化,表明从此步骤开始,它停止折叠。 如前所述,上述步骤仍会折叠。

屏幕截图显示添加“每个字词首字母大写”步骤如何中断折叠。

在下游添加更多依赖于“每个字词首字母大写”的步骤会继续不折叠。

屏幕截图显示添加更多步骤后如何不会发生折叠。

但是,如果移除应用了大写的列,以便优化后的查询计划可以再次折叠,就会得到如下图所示的结果。 不过,像这样的情况并不常见。 此这幅图片说明,不仅是步骤顺序,实际转换也是如此。

屏幕截图显示如何移除有问题的列,允许在不移除步骤的情况下折叠内容。