查询折叠指示器

注释

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

查询折叠指示器可帮助你了解哪些步骤可折叠,哪些步骤不可折叠。 当 Power Query 将某个步骤中的转换操作转换为数据源查询并在数据源上运行时,该步骤就会发生折叠。

使用查询折叠指示器时,当你进行会破坏查询折叠的更改时,就能清楚地看出来。 此功能可帮助你解决问题、避免性能问题,并更好地了解查询。 在大多数情况下,步骤要么会折叠,要么不会折叠。 但许多情况都存在,结果并不明显。 “步骤诊断指示器”部分涵盖这些情况(可能折叠、不透明和未知)。

注释

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

解读查询折叠诊断

在 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"

在查询折叠指标中,你具有与之前相同的指标,但最后一步未折叠。 在数据源上执行所有步骤,直到最后一步,而最终步骤是在本地执行。

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

步骤诊断指示器

查询折叠指示器使用底层查询计划,并要求其提供有关该查询的信息。 目前,查询计划仅支持表,因此在某些情况下(列表、记录、基元)不会报告为是否折叠。 同样,常量表会被报告为不透明的。

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

分析查询折叠指示器

若要分析查询折叠指示器,请连接到 AdventureWorks(SQL)中的 Production.Product 表。 初始加载将 源 步骤显示为无结论, 导航 步骤显示为折叠,如下图所示。

用于加载 Product 表的初始步骤指示器的屏幕截图。

添加更多折叠步骤时,可向右扩展绿色线条。 之所以出现此扩展,是因为此步骤也会折叠。

显示如何通过在之前的查询中添加删除列步骤来扩展绿色折叠指示器线的屏幕截图。

当你添加一个无法折叠的步骤时,会看到一个不同的指示器。 例如, 将每个单词大写 永远不会折叠。 指示器发生变化,显示完成此步骤时它停止折叠。 如前所述,前面的步骤仍然适用。

显示添加“Capitalize Each Word”步骤如何导致折叠失效的屏幕截图。

当你在下游添加更多依赖于 每个单词首字母大写 的步骤时,它们仍然无法折叠。

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

但是,如果删除已应用大写转换的列,则优化的查询计划可以再次进行折叠。 在此不常见的结果中,即使前面的步骤不折叠,最终步骤也会折叠,如下图所示。 这一结果表明,折叠如何进行既取决于步骤的顺序,也取决于所应用的转换。

屏幕截图显示如何删除有问题的列,使得在不删除步骤的情况下能够折叠布局。