Power Query 会评估 M 查询,以确定为了生成结果所需的数据和转换操作。 在评估期间,查询折叠尝试将支持的转换转换为数据源可执行的操作。 无法折叠的转换由 Power Query 引擎执行。
什么是 Power Query M 脚本?
M 脚本(也称为 M 代码)是Power Query M 公式语言函数和语法集,Power Query计算结果以生成查询结果。 每个查询都有一个 M 脚本,无论Power Query创建它,还是在高级编辑器中编写它,还是在空白查询中输入它。
小窍门
可以将 M 脚本视为描述如何准备数据的食谱。
创建 M 脚本的最常见方法是使用Power Query编辑器。 例如,连接到数据源(如SQL Server数据库)时,请注意屏幕右侧有一个名为“已应用步骤”的部分。 本部分显示查询中使用的所有步骤或转换。 从这个意义上说,Power Query编辑器充当一个接口,可帮助你为所需的转换创建适当的 M 脚本,并确保所使用的代码有效。
注释
M 脚本在Power Query编辑器中使用,以便:
- 将查询显示为一系列步骤,并允许创建或修改步骤。
- 显示关系图视图。
在此SQL Server示例中,“应用的步骤”窗格包含以下步骤:
- 源:与数据源建立连接。 在本例中,它是与SQL Server数据库的连接。
- 导航:导航到数据库中的特定表。
- 删除了其他列:选择要保留的表中的哪些列。
- 已排序的行:使用一个或多个列对表进行排序。
- 保留前几行:筛选表以仅保留表顶部的某些行。
在Power Query中查看和编辑 M 脚本
这组步骤名称是查看 Power Query 为您创建的 M 脚本的一种便捷方式。 可以通过多种方式查看完整的 M 脚本。 在 Power Query 中,在视图选项卡中选择 高级编辑器。还可以在主页选项卡的查询组中选择高级编辑器。在某些版本的 Power Query 中,还可以更改公式栏的视图以显示查询脚本,方法是转到视图选项卡,然后在布局组中选择脚本视图>查询脚本。
在 “应用的步骤 ”窗格中找到的大多数名称也与 M 脚本中一样使用。 使用 M 语言中的 标识符 来命名查询的步骤。 有时,额外的字符环绕 M 中的步骤名称,但这些字符不会显示在应用的步骤中。 例如 #"Kept top rows",由于这些额外的字符,它被归类为 带引号的标识符 。 带引号的标识符允许将任何零个或多个 Unicode 字符序列用作标识符,包括关键字、空格、注释、运算符和标点符。 若要详细了解 M 语言中的 标识符 ,请参阅 词法结构。
通过Power Query编辑器对查询所做的任何更改都会自动更新查询的 M 脚本。 例如,如果将 “保留前 20 行”步骤名称更改为 “前 20 行”,则名称也会在查询脚本视图中更改。
虽然我们建议使用Power Query编辑器为你创建所有或大部分 M 脚本,但可以手动添加或修改 M 脚本的片段。 若要了解详细信息,请参阅 M 语言参考。
在本文中,M 脚本是指查询中的 Power Query M 代码,可以通过高级编辑器或编辑栏中的查询脚本视图进行访问。
Power Query 如何对 M 查询求值
Power Query 通过确定所需的输出以及如何生成该输出来对 M 脚本进行求值。 对于使用外部数据源的查询,评估包括从源请求数据、处理在Power Query引擎中运行的任何转换,以及将结果加载到目标。
下图探讨了在Power Query中计算查询时发生的过程。
- 在高级编辑器中找到的 M 脚本将提交到Power Query引擎。 还包括其他重要信息,例如凭据和数据源隐私级别。
- Power Query确定需要从数据源中提取哪些数据,并向数据源提交请求。
- 数据源通过将请求的数据传输到Power Query来响应来自Power Query的请求。
- Power Query从数据源接收传入数据,并在必要时使用Power Query引擎执行任何转换。
- Power Query将转换的结果加载到目标。
注释
此流显示从SQL Server数据库读取的查询。 对于没有外部数据源的查询,Power Query仍会评估 M 脚本并生成结果,但数据源请求和传输阶段不适用。
查询折叠如何优化查询评估
Power Query读取 M 脚本时,它会通过优化过程运行脚本,以更有效地评估查询。 在此过程中,它会确定查询中的哪些步骤(转换)可转移给数据源。 它还确定需要使用Power Query引擎评估哪些其他步骤。
此优化过程称为 查询折叠。 查询折叠可将支持的 M 转换转换为数据源可执行的操作。 Power Query尝试在数据源中尽可能多地运行查询,并评估Power Query引擎中的任何剩余转换。
重要
遵循来自 Power Query M 公式语言(也称为 M 语言)的所有规则。 最值得注意的是, 延迟评估 在优化过程中起着重要作用。 在此过程中,Power Query能够识别并评估您的查询中需要进行的特定转换操作。 Power Query还能够识别哪些转换不需要被评估,因为它们对查询的输出没有必要。
此外,当涉及多个源时,评估查询时,将考虑每个数据源的数据隐私级别。 详细信息: 数据隐私防火墙的幕后
下图演示了在此优化过程中执行的步骤。
- 在高级编辑器中找到的 M 脚本将提交到Power Query引擎。 还提供了其他重要信息,例如凭据和数据源隐私级别。
- 查询折叠机制提交元数据请求,以确定数据源、表架构、数据源表之间的关系和其他元数据的功能。
- 根据接收的元数据,查询折叠机制确定要从数据源中提取哪些信息,以及哪些转换必须在Power Query引擎内发生。 它向另外两个组件发送指令,这些组件从数据源中检索数据,并在必要时转换Power Query引擎中的传入数据。
- Power Query的内部组件收到说明后,Power Query使用数据源查询向数据源发送请求。
- 数据源接收来自Power Query的请求,并将数据传输到Power Query引擎。
- 数据进入 Power Query 后,Power Query 内部的转换引擎(也称为混合引擎)会执行那些无法折叠回数据源或下推到数据源的转换。
- Power Query将转换的结果加载到目标。
注释
根据 M 脚本中使用的转换和数据源,Power Query确定是流式传输还是缓冲传入数据。
查询折叠在 Power Query 中的作用
查询折叠的目标是将查询的大部分计算转移或推送给可以计算查询转换的数据源。
查询折叠机制通过将 M 脚本转换为数据源可以解释和执行的语言来实现此目标。 然后,它将评估推送到数据源,并将评估结果发送到Power Query。
此操作通常提供比从数据源提取所有所需数据并运行Power Query引擎中所需的所有转换更快的查询执行速度。
使用 获取数据体验时,Power Query 将指导你完成连接到数据源的整个过程。 执行此操作时,Power Query 使用 M 语言中的一系列函数,这些函数被归类为访问数据函数。 这些特定函数使用机制和协议通过数据源可以理解的语言连接到数据源。
对于在数据源函数之后执行的转换,查询折叠机制会检查是否可以将其下推到数据源,而不是由 Power Query 引擎处理。
重要
数据源函数通常显示为查询中的 Source 步骤,并使用数据源的原生语言在数据源处查询数据。 对于在数据源函数之后执行的转换,Power Query 仅在连接器和这些转换都支持查询折叠时,才会尝试进行查询折叠。 该机制可以将支持的转换转换为单个数据源查询并合并。
Power Query 中的查询折叠结果
根据查询的结构,查询折叠机制可能有三种可能的结果:
| 查询折叠结果 | 数据源处的处理 | 在Power Query引擎中进行处理 |
|---|---|---|
| 完整查询折叠 | 数据源处理所有查询转换。 | 仅在 Power Query 引擎中进行少量处理。 |
| 部分查询折叠 | 数据源会处理那些 Power Query 能够转换为原生查询语言的转换操作。 | Power Query引擎处理剩余的转换。 |
| 无查询折叠功能 | 数据源返回请求的源数据,而无需处理查询转换。 | Power Query引擎处理所有必需的转换。 |
支持查询折叠的数据源
查询折叠支持取决于连接器、数据源和查询中的转换。 具有查询处理功能的结构化数据源(如 SQL Server 和 OData 源)的连接器通常支持查询折叠。 没有查询引擎(如 CSV 和Excel文件)的源不支持查询折叠。
在优化期间,Power Query引擎可能会重新排序查询步骤。 使用具有更多处理资源和查询折叠功能的数据源可以减少查询加载时间,因为处理发生在数据源而不是Power Query引擎中。
在 Power Query Online 中验证查询折叠
在 Power Query Online 中,使用应用步骤旁边的查询折叠指示器来确定哪些步骤折叠。 还可以使用查询计划来查看在数据源上运行哪些操作,以及哪些操作在Power Query引擎中运行。 这些功能仅在 Power Query Online 中可用。
如果可用,请使用 查看本机查询 或 查看数据源查询 以检查 Power Query 发送到数据源的请求。 可用性取决于连接器。