Power Query使用参数时运行缓慢问题排查及优化方案咨询
问题原因
核心问题出在新增列的逻辑上:你在Table.AddColumn的each表达式中直接引用PARAMETER查询,Power Query会逐行重复执行PARAMETER查询。因为each是行上下文,每处理一行数据就会重新加载一次PARAMETER对应的单值表,6300行数据就会触发6300次重复查询,这是导致速度慢的根本原因。而Excel单元格公式是直接引用固定单元格值,不会重复读取源数据,所以几乎瞬间完成。
优化方案
1. 提前提取PARAMETER单值(关键优化)
先把PARAMETER查询的唯一数值提取为变量,后续新增列时直接使用该变量,避免重复执行PARAMETER查询。修改后的M代码如下:
// 一次性提取PARAMETER的单值,仅执行一次 ParamValue = PARAMETER{0}[Column1], // 请将Column1替换为PARAMETER表的实际列名 Source = Excel.CurrentWorkbook(){[Name="LOGDATA"]}[Content], ChangeTypes = Table.TransformColumnTypes(Source,{{"POWER_AVG", type number}, {"TIMESTAMP", type datetime}}), Diff = Table.AddColumn(ChangeTypes, "Differanse", each ParamValue - [POWER_AVG], type number) in Diff
解释:PARAMETER{0}[Column1]会直接取出单值表中的唯一数值并存储到变量ParamValue中,后续新增列时仅调用该变量,不会重复触发PARAMETER查询,能大幅提升执行速度。
2. 额外优化建议
- 确保
LOGDATA是Excel结构化表(List Object):将普通单元格区域转为结构化表(选中区域→Ctrl+T),Power Query读取结构化表的效率远高于普通区域。 - 按需保留类型转换:如果后续流程不需要
TIMESTAMP列的datetime类型,可以跳过Table.TransformColumnTypes中对该列的转换,减少不必要的操作。 - 关闭自动类型检测:在Power Query选项中关闭"自动检测列类型",避免额外的类型检测开销(路径:文件→选项和设置→查询选项→数据加载→取消勾选"自动检测列类型")。
内容的提问来源于stack exchange,提问作者Jos
相关产品推荐
相关产品推荐

