任何查询(无论是由 Power Query 创建、由高级编辑器手动编写还是使用空白文档输入)都由 Power Query M 公式语言中的函数和语法组成。 Power Query 引擎会对此查询进行解释和评估,以输出其结果。 M 脚本是评估查询所需的指令集。
提示
可以将 M 脚本视为描述如何准备数据的配方。
创建 M 脚本的最常见方法是使用 Power Query 编辑器。 例如,连接到数据源(如 SQL Server 数据库)时,请注意屏幕右侧有一个名为“已应用步骤”的部分。 本部分显示查询中使用的所有步骤或转换。 从这个意义上说,Power Query 编辑器就是一个接口,可帮助你为之后的转换创建适当的 M 脚本,并确保所使用的代码有效。
备注
Power Query 编辑器中使用 M 脚本可以:
将查询显示为一系列步骤,并允许创建或修改新步骤。
显示关系图视图。
上图强调已应用步骤部分,其中包含以下步骤:
源:建立与数据源的连接。 在本例中,它是与 SQL Server 数据库的连接。
导航:导航到数据库中的特定表。
删除其他列:从表中选择要保留的列。
已排序的行:使用一个或多个列对表排序。
保留前几行:筛选表以仅保留表顶部的某些行。
这组步骤名称是查看 Power Query 为你创建的 M 脚本的友好方式。 有几种方法可以查看完整的 M 脚本。 在 Power Query 中,可以在“视图”选项卡中选择“高级编辑器”。还可以从“主页”选项卡中的“查询”组中选择“高级编辑器”。在某些版本的 Power Query 中,还可以通过转到“视图”选项卡并从“布局”组中选择“脚本视图>查询脚本”,更改编辑栏视图以显示查询脚本。
在“已应用步骤”窗格中找到的大多数名称也在 M 脚本中按原样使用。 在 M 语言中,查询步骤的名称被称为标识符。 在 M 语言中,有时会在步骤名称周围加上额外的字符,但这些字符不会显示在应用步骤中。 例如 #"Kept top rows",由于这些额外的字符,被归类为带引号的标识符。 带引号的标识符可用于将零个或多个 Unicode 字符的任何序列用作标识符,包括关键字、空格、注释、运算符和标点符号。 若要详细了解 M 语言中的标识符,请转到词法结构。
通过 Power Query 编辑器对查询所做的任何更改都会自动更新查询的 M 脚本。 例如,使用上一个图像作为起点,如果将“保留前几行”步骤名称更改为前 20 行,则此更改将在脚本视图中自动更新。
虽然我们建议使用 Power Query 编辑器为你创建全部或大部分 M 脚本,但也可以手动添加或修改 M 脚本的片段。 若要了解有关 M 语言的详细信息,请转到 M 语言的官方文档网站。
备注
M 脚本(也称为 M 代码)是用于任何使用 Power Query M 语言的代码的术语。 在本文中,M 脚本还指 Power Query 查询中找到的代码,可以通过高级编辑器窗口或编辑栏中的脚本视图进行访问。
Power Query 中的查询评估
下图探讨了在 Power Query 中计算查询时发生的过程。
在高级编辑器中找到的 M 脚本将提交到 Power Query 引擎。 还包括其他重要信息,例如凭据和数据源隐私级别。
Power Query 确定需要从数据源中提取哪些数据,并向数据源提交请求。
数据源通过将请求的数据传输到 Power Query 来响应来自 Power Query 的请求。
Power Query 从数据源接收传入数据,并在必要时使用 Power Query 引擎进行任何转换。
从上一个点得到的结果将加载到目标。
备注
虽然本例展示了将 SQL 数据库作为数据源的查询,但该概念适用于具有或不带数据源的查询。
Power Query 读取 M 脚本时,会通过优化过程运行该脚本,以便更有效地评估查询。 在此过程中,它会确定可将查询中的哪些步骤(转换)卸载到数据源。 它还确定需要使用 Power Query 引擎评估哪些其他步骤。
此优化过程称为查询折叠,其中 Power Query 视图将尽可能多的执行推送到数据源以优化查询执行。
重要
需要遵循 Power Query M 公式语言(也称为 M 语言)的所有规则。 最值得注意的是,延迟评估在优化过程中发挥着重要作用。 在此过程中,Power Query 了解需要评估查询的特定转换。 Power Query 还了解哪些其他转换不需要评估,因为这些转换不需要放在查询的输出中。