注释
在阅读本文之前,建议阅读 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"
在查询折叠指标中,你具有与之前相同的指标,但最后一步未折叠。 在数据源上执行所有步骤,直到最后一步,而最终步骤是在本地执行。
步骤诊断指示器
查询折叠指示器使用基础查询计划,并要求它能够获取有关查询的信息来报告它。 目前,查询计划仅支持表,因此在某些情况下(列表、记录、基元)不会报告为是否折叠。 同样,常量表会被报告为不透明的。
指示器 | 图标 | DESCRIPTION |
---|---|---|
折叠 | ![]() |
这个折叠指示器告诉您,数据源会在这个步骤之前评估查询。 |
不折叠 | ![]() |
未折叠指示器会告诉你,到这一步为止,查询的某些部分是在数据源外部进行评估的。 可以将它与最后一个折叠指示器进行比较(如果有)以查看是否可以重新排列查询,使其性能更高。 |
可能折叠 | ![]() |
折叠指示器可能并不常见。 它们表示查询“可能”折叠。 它们表示在运行时决定是否折叠,并且在从查询中提取结果时,查询计划是动态的。 这些指示器可能仅与 ODBC 或 OData 连接一起显示。 |
不透明 | ![]() |
不透明指示器告诉你,由于某种原因,生成的查询计划是不确定的。 它通常表示存在一个真正的“常量”表,或者该指示器和查询规划工具不支持此转换或连接器。 |
未知 | ![]() |
未知指示器表示缺少查询计划,这可能是由于出现错误或尝试对非表格的数据(如记录、列表或基元)进行查询计划评估所致。 |
示例分析
有关示例分析,请首先连接到 Adventure Works (SQL) 中的 Production.Product 表。 初始加载类似于初始示例,如下图所示。
添加更多可折叠的步骤可以使右侧的绿色线条延展。 之所以出现此扩展,是因为此步骤也会折叠。
显示如何通过在之前的查询中添加删除列步骤来扩展绿色折叠指示器线的屏幕截图。
添加不折叠的步骤将显示不同的指示器。 例如, 将每个单词大写 永远不会折叠。 指示器发生变化,显示完成此步骤时它停止折叠。 如前所述,前面的步骤仍然适用。
在下游添加更多依赖于 每个步骤大写 的步骤仍然不折叠。
但是,如果删除应用了大写的列,以便优化查询计划可以再次折叠,则会收到如下图所示的结果。 然而,这样的事情并不常见。 此图说明了不仅仅是步骤的顺序,实际的转换也同样关键。