如何编写参数列表长度不固定的Power Query表函数?
实现支持可变列参数的Power Query trimupper函数
问题描述
需要编写trimupper(TableName, ColumnName1, ColumnName2,...)函数,对指定列执行两步操作:1. TRIM去除空格;2. UPPERCASE转换为大写。以下是固定两列的示例代码:
(tbl as table, cn1 as text, cn2 as text) => let #"Trimmed Text" = Table.TransformColumns(tbl,{{cn1, Text.Trim , type text}, {cn2, Text.Trim , type text}}), #"Uppercased Text" = Table.TransformColumns(tbl,{{cn1, Text.Upper, type text}, {cn2, Text.Upper, type text}}), trimupperResult = #"Uppercased Text" in trimupperResult
请问如何实现支持可变数量ColumnName参数的版本?
解决方案
核心思路
- 用Power Query的
vararg关键字定义可变数量的列名参数,支持任意个数的列名输入 - 将
Text.Trim和Text.Upper合并为一个复合函数,避免两次遍历表格,提升处理效率 - 通过
List.Transform把所有传入的列名转换为Table.TransformColumns所需的规则格式
完整实现代码
(tbl as table, columnNames as vararg text) as table => let // 为每个列名构造转换规则:先去空格再转大写 transformRules = List.Transform(columnNames, (col) => { col, (textValue) => Text.Upper(Text.Trim(textValue)), type text }), // 批量处理指定列 trimupperResult = Table.TransformColumns(tbl, transformRules) in trimupperResult
代码说明
vararg text:声明参数columnNames可接受任意数量的文本类型列名List.Transform(columnNames, ...):遍历每个传入的列名,生成对应的转换规则项,每个项包含列名、复合转换函数(先执行Text.Trim再执行Text.Upper),以及指定输出类型为文本Table.TransformColumns(tbl, transformRules):一次性对所有指定列完成转换操作,比原示例的两次调用更高效
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

