查询折叠指示器
注意
在阅读本文之前,建议阅读 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 表。 初始加载与初始示例类似,如下图所示。
添加更多折叠步骤会延长右侧的绿线。 出现这种延长是因为此步骤也会折叠。
添加不折叠的步骤会显示不同的指示器。 例如,将每个单词大写永远不会折叠。 指示器会发生变化,表明从此步骤开始,它停止折叠。 如前所述,上述步骤仍会折叠。
在下游添加更多依赖于“每个字词首字母大写”的步骤会继续不折叠。
但是,如果移除应用了大写的列,以便优化后的查询计划可以再次折叠,就会得到如下图所示的结果。 不过,像这样的情况并不常见。 此这幅图片说明,不仅是步骤顺序,实际转换也是如此。