自定义函数使用 M 公式语言,采用一组输入值,然后返回单个输出值。 如果有想要多次重复使用的逻辑或将同一组转换应用于不同的查询或值,请考虑创建自定义函数,然后在需要时随时随地调用该函数。 可通过多种方式创建自定义函数:
- 使用高级编辑器添加您自己的 let 语句并从头开始。
- 使用“ 调用自定义函数” 命令。
- 还有其他方法可以创建本帮助主题中未讨论的函数,包括 创建函数 和 添加为查询 命令。 有关深入讨论,请参阅了解 Power Query M 函数和使用自定义函数。
使用高级编辑器创建和调用简单的自定义函数
下面的示例演示了一个遵循长期编程传统的简单自定义函数。
创建空白查询:
Excel选择数据> 从其他源>获取数据>空白查询。
Power Query 右键单击左侧“查询”窗格中的空白位置,然后选择“新建查询>”“其他源>”空白查询“。
在左侧的 “查询” 窗格中,双击名称,然后将新的空白查询重命名为
HelloWorld。选择新查询,然后选择“主>高级编辑器”。
将模板起始代码替换为以下代码:
let
HelloWorld = () => ("Hello World")
in
HelloWorld选择“完成”。
已将查询更改
HelloWorld为自定义函数。 请注意其左侧的功能
。若要调用函数,请选择它, 然后选择“在 数据预览中调用”。
函数的结果将显示在“数据预览”中,并作为默认名称为 Invoked Function 的查询添加到“查询”窗格中。 你可能想要将其重命名为更有意义的名称,例如
HelloWorldResult。选择该查询,然后选择“ 开始>”“关闭”&“加载 ”以在工作表中查看结果。
结果
使用高级编辑器创建和调用具有参数的自定义函数
下面的示例演示如何将参数传递给自定义函数以将十进制数转换为十六进制数。
创建空白查询:
Excel选择数据> 从其他源>获取数据>空白查询。
Power Query 右键单击左侧“查询”窗格中的空白位置,然后选择“新建查询>”“其他源>”空白查询“。
在左侧的 “查询” 窗格中,将新的空白查询重命名为
MyHex.选择新查询,然后选择“主>高级编辑器”。
将模板起始代码替换为以下代码:
let
MyHex = (parameter1) => Number.ToText(parameter1,"X")
in
MyHex选择“完成”。
已将查询更改
MyHex为自定义函数。 请注意其左侧的功能
。若要调用该函数,请选择它。 在数据预览中,在参数 1 框中输入数字,然后选择调用。
函数的结果将显示在数据预览中。 Power Query 将结果作为查询添加到“查询”窗格中,默认名称为“调用的函数”。 你可能想要将其重命名为更有意义的名称,例如
MyHexResult。选择该查询,然后选择“ 开始>”“关闭”&“加载 ”以在工作表中查看结果。
结果
通过调用自定义函数来添加列
如果创建具有至少一个参数的函数,则可以将其作为自定义函数调用,以便为表中的每一行创建新列和新值。
若要打开查询,请找到之前从 Power Query 编辑器加载的查询,在数据中选择一个单元格,然后选择“查询编辑”>。 有关详细信息,请参阅在 Excel 中创建、编辑和加载查询 (Power Query) 。
注意
对于此示例,您的查询至少需要一列 “整数 ”数据类型。
MyHex创建自定义函数,如部分所述,使用高级编辑器创建和调用具有参数的自定义函数。在查询中,选择“添加列>”调用自定义函数“。 将显示“ 调用自定义函数” 对话框。
在“新列名称”框中输入新列名称,例如
HexConvert。从“函数查询”下拉列表中选择预定义自定义函数的名称。 在本示例中,选择
MyHex。由于自定义函数引用参数,因此现在将显示该参数。
选择整 数 数据类型的列作为函数的参数。
选择“确定”。
结果
将创建一个新列,显示您作为参数输入的整数列的十六进制值。