You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写参数列表长度不固定的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参数的版本?

解决方案

核心思路

  1. 用Power Query的vararg关键字定义可变数量的列名参数,支持任意个数的列名输入
  2. 将Text.Trim和Text.Upper合并为一个复合函数,避免两次遍历表格,提升处理效率
  3. 通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:40:32