如何通过Power Query获取其他查询的可刷新M代码?
问题:如何通过Power Query自动获取其他查询的M代码?
能否通过Power Query返回其他查询的M代码?这里并非指手动在Power Query编辑器中选择Reference、Duplicate或Advanced Editor,而是希望Query2的结果能包含Query1的M代码(如let Source =...),且当Query1变更时可自动刷新。
在Excel中,可通过VBA的ActiveWorkbook.Queries(x).Formula获取查询代码,但需将其加载到表格再导入查询,且每次查询更新都需重新运行VBA。
在Power BI中,可使用DMVs获取查询代码及依赖关系,相关语句如下:
select * from $SYSTEM.TMSCHEMA_PARTITIONS; select * from $SYSTEM.TMSCHEMA_EXPRESSIONS; select * from $SYSTEM.DISCOVER_CALC_DEPENDENCY;
但在Power BI Desktop中,使用DMVs需连接localhost:12345这类随机端口,目前尚无无需手动更新端口的便捷可重复方法。
通过#shared或#sections可获取当前文件的所有查询列表,但这些命令仅返回查询结果而非查询代码本身。
请问是否存在通过查询获取其他查询M代码的方法?
可行方案说明
目前没有纯Power Query原生的方法能直接获取其他查询的M代码并自动刷新,但可以通过以下优化方案实现近似需求:
Excel环境下的优化
- 编写VBA脚本遍历所有查询,将
ActiveWorkbook.Queries(x).Formula的内容写入指定工作表 - 设置VBA自动触发条件(如工作簿打开时、查询更新后),无需手动运行脚本
- 在Power Query中引用该工作表,即可让Query2随Query1的M代码变更自动刷新
Power BI环境下的替代方案
- Power BI REST API(仅云端服务):调用API获取数据集的查询定义,直接拿到M代码,支持自动刷新,但需配置API权限,本地Desktop无法使用
- 第三方工具辅助:用Tabular Editor等工具批量导出查询M代码,再将导出内容导入Power Query作为数据源,但仍需手动触发导出,无法完全自动同步
关键结论
如果追求完全自动、纯Power Query内实现,目前没有可行方案。只能通过VBA(Excel)或API/第三方工具(Power BI)的组合方式,实现近似的自动同步效果。
内容的提问来源于stack exchange,提问作者TheRizza
相关产品推荐
相关产品推荐

