PowerQuery动态加载M公式

Power Query 是Excel中的强大数据处理与转换工具,如果需要“动态”处理数据,大家第一时间想到的是可以使用VBA,利用代码创建M公式,进而创建PQ查询,但是复杂的M公式可能有很多行, 使用VBA处理起来并不是很方便,并且用户打开工作簿文件时必须启用宏功能,代码才能发挥作用。

其实无需借助VBA,PQ内置功能就可以实现动态加载M公式,接下来使用一个简单的PQ示例进行演示。这个技巧通常用于动态执行Power Query脚本或表达式,允许在运行时构建和执行Power Query代码,以满足特定的需求。

基础原始数据保存在A列和B列中,使用PQ按照第一列统计汇总销售额,结果保存在E1开始的单元格区域,效果如下图所示。
PowerQuery动态加载M公式_第1张图片

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目录中,如下所示。
PowerQuery动态加载M公式_第2张图片
新建一个PQ查询,在【高级编辑器】中替换为如下公式。

let
    Source = Text.FromBinary(File.Contents("d:\temp\TotalSales.m")),
    EvaluatedFormula = Expression.Evaluate(Source, #shared)    
in
    EvaluatedFormula

如下图所示。

PowerQuery动态加载M公式_第3张图片

保存查询,关闭PQ编辑器并上载至H1单元格开始的区域,如下图所示。

PowerQuery动态加载M公式_第4张图片

【代码解析】
使用 File.Contents 函数从文件 d:\temp\TotalSales.m 中读取文本内容,然后将这个文本内容作为表达式传递给 Expression.Evaluate 函数。同时,#shared 作为第二个参数传递给 Expression.Evaluate,以便表达式能够访问Power Query中共享的函数和变量。

注意:使用 Expression.Evaluate 时要小心,确保表达式的来源可信,以避免潜在的安全问题。

你可能感兴趣的:(数据清洗,VBA,Power,Query,动态加载,PQ公式,加载M公式,加载PQ公式,动态公式)