Power Query文件夹导入时Transform File如何接收Transform Sample File内容
你观察到的「Transform Sample File内容出现在Transform File里」是Power Query编辑器的编辑阶段同步机制,不是运行时的数据传递,二者运行时完全独立,没有内容接收关系,具体逻辑如下:
核心运行逻辑拆解
1. 四个辅助对象的生成关系
你使用「从文件夹批量导入文件」功能时,Power Query为了降低自定义函数的编写门槛,自动生成了四个绑定关系的对象:
Sample File:固定取文件夹内第一个文件的二进制内容,作为转换操作的样本源Parameter 1:二进制类型参数,默认绑定Sample File的内容,给样本查询做输入源Transform Sample File:给用户可视化编辑用的样本查询,所有你在界面上做的拆分列、改格式、筛选等操作,都会直接保存为这个查询的步骤Transform File:系统自动维护的自定义函数,你每次保存对Transform Sample File的修改,编辑器会自动把完全相同的步骤同步写入这个函数的内部逻辑里,这就是你看到的内容“凭空出现”的原因。
你可以对比你给出的两段代码,二者的转换步骤完全一致:Transform Sample File的代码:
let Source = Csv.Document(Parameter1,[Delimiter="|", Columns=5, Encoding=65001, QuoteStyle=QuoteStyle.None]), A = custom_step_a, B = custom_step_b, C = custom_step_c in C
Transform File函数的内部逻辑:
let Source = (Parameter1 as binary) => let Source = Csv.Document(Parameter1,[Delimiter="|", Columns=5, Encoding=65001, QuoteStyle=QuoteStyle.None]), A = custom_step_a, B = custom_step_b, C = custom_step_c in C in Source
二者唯一的区别是Transform File把输入变成了可动态传入的二进制参数,没有绑定固定的Sample File内容。
2. 运行时的实际执行流程
主查询运行时,完全不会调用Transform Sample File,流程如下:
- 先拉取目标文件夹下所有文件的元数据表,包含每个文件的二进制内容字段
[Content] - 遍历元数据表的每一行,把当前行的
[Content](单个文件的二进制)传入Transform File函数 - 函数执行内部预存的转换步骤,返回处理后的单文件表,最后把所有表合并成总表
3. 设计目的
这个机制是为了降低批量处理的操作门槛:你不需要手动编写自定义函数,只需要对着可视化的样本文件做操作,系统自动把你的操作步骤转换成可复用的批量处理函数,大幅减少手动写M代码的成本。
内容的提问来源于stack exchange,提问作者Mitten Wald
相关产品推荐
相关产品推荐

