无需重新拉取数据即可加载Excel查询的列名
提取大型数据集原始列名的高效方案
问题背景
我的Excel工作簿用于比较从外部文件读取的两个大型数据集,对应查询为Data_A和Data_B,已加载为工作表中的Data_A和Data_B表格。需要提取它们的原始列名,分别生成工作表中的Fields_A和Fields_B表格。
现有方案的不足
- 引用新查询:通过
Table.ColumnNames(Data_*)获取列名,但即使已对Data_A和Data_B使用.Buffer(),仍会重新拉取整个大型数据集,导致查询耗时极长。 - 读取工作表内容:从已加载的表格读取列名,但用户可能手动修改表格(重命名、删除或添加列),导致结果不稳定。
核心需求
必须加载Data_A和Data_B的原始列名(未被用户编辑前的名称)到工作表,且不能因重新拉取数据导致加载耗时过长。能否在Data_*查询中存储列名作为中间步骤,并将该步骤加载到单独工作表,无需重新执行整个Data_*查询?
可行解决方案:拆分查询步骤并缓存列名
完全可以实现,具体操作步骤如下:
1. 修改Data_A/Data_B查询,拆分步骤提取列名
打开Power Query编辑器,找到目标查询(以Data_A为例):
- 在原始数据集加载完成的步骤后(即获取到未被编辑的原始数据的步骤,比如
Source之后的最终加载步骤),添加新步骤,命名为Extract_Column_Names,输入公式:
替换= Table.ColumnNames(上一步骤名称)上一步骤名称为实际加载完原始数据的步骤名(例如Changed Type或你自定义的步骤名)。 - 将列名列表转换为可加载到工作表的表格,添加新步骤:
= Table.FromList(Extract_Column_Names, Splitter.SplitByNothing(), {"Original_Field_Name"}) - 对
Data_B查询重复以上操作,生成对应的列名表格步骤。
2. 将列名步骤单独加载为工作表
- 在Power Query编辑器中,选中
Data_A查询里的最终列名表格步骤,点击【加载到】,选择「仅创建连接」;之后右键该连接,选择【加载到】→ 工作表,命名为Fields_A。 - 对
Data_B的对应步骤执行同样操作,生成Fields_B工作表。
3. 优化缓存避免重复读取
在原始数据加载步骤后添加Table.Buffer(),确保原始数据的列名被缓存,后续提取列名时无需重新读取外部文件:
= Table.Buffer(上一步骤名称)
方案优势
- 保留原始列名:直接从原始数据集的加载步骤提取,完全不受用户手动编辑工作表列的影响。
- 大幅缩短加载时间:仅执行到提取列名的步骤,无需拉取整个大型数据集。
- 复用现有查询:无需创建独立查询,直接利用
Data_*查询的中间步骤,维护成本低。
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

