Power Query 是Excel中的强大数据处理与转换工具,如果需要“动态”处理数据,大家第一时间想到的是可以使用VBA,利用代码创建M公式,进而创建PQ查询,但是复杂的M公式可能有很多行, 使用VBA处理起来并不是很方便,并且用户打开工作簿文件时必须启用宏功能,代码才能发挥作用。
其实无需借助VBA,PQ内置功能就可以实现动态加载M公式,接下来使用一个简单的PQ示例进行演示。这个技巧通常用于动态执行Power Query脚本或表达式,允许在运行时构建和执行Power Query代码,以满足特定的需求。
基础原始数据保存在A列和B列中,使用PQ按照第一列统计汇总销售额,结果保存在E1开始的单元格区域,效果如下图所示。
PQ公式如下。
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
更改的类型 = Table.TransformColumnTypes(源,{{"Date", type date}, {"Sales", Currency.Type}}),
分组的行 = Table.Group(更改的类型, {"Date"}, {{"TotalSales", each List.Sum([Sales]), type nullable number}})
in
分组的行
新建一个文本文件,将PQ公式保存为文本文件,此处文件名称为TotalSales.m
,保存在D:\Temp目录中,如下所示。
新建一个PQ查询,在【高级编辑器】中替换为如下公式。
let
Source = Text.FromBinary(File.Contents("d:\temp\TotalSales.m")),
EvaluatedFormula = Expression.Evaluate(Source, #shared)
in
EvaluatedFormula
如下图所示。
保存查询,关闭PQ编辑器并上载至H1单元格开始的区域,如下图所示。
【代码解析】
使用 File.Contents
函数从文件 d:\temp\TotalSales.m
中读取文本内容,然后将这个文本内容作为表达式传递给 Expression.Evaluate
函数。同时,#shared
作为第二个参数传递给 Expression.Evaluate
,以便表达式能够访问Power Query中共享的函数和变量。
注意:使用 Expression.Evaluate
时要小心,确保表达式的来源可信,以避免潜在的安全问题。