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

Power Query函数开发:生成含列名及值长度的新列

问题描述

我有多个包含不同属性的文件(部分含Job Name,部分含Location,部分含Grade等)。

示例数据

Job NameJob LocationJob Grade
Controller若干值High
Director无值Low
Analyst其他若干值
VP Of Finance空值Medium
Director

需求

开发一个Power Query函数,新增一列,每个单元格内容为列名(如示例中的Job Name)+ 该列对应单元格值的长度。

期望输出

Job NameJob LocationJob GradeDesired Output
Controller若干值HighJob Name 10
Director无值LowJob Name 8
Analyst其他若干值Job Name 7
VP Of Finance空值MediumJob Name 13
DirectorExecutiveJob Name 8

当前代码及问题

当前函数代码:

(MyColumn) as text =>

let 

Source = Text.Length(MyColumn),
NewSource = Number.ToText(Source),
FinalText = Text.Combine({MyColumn,NewSource}," ")

in FinalText

错误输出:

Job Name当前输出(错误)
EngineerEngineer 1
DirectorDirector 2
AnalystAnalyst 3
EngineerEngineer 1

尝试用Record.Field(_, MyColumn)引用列名时,出现错误:

An error occurred in the ‘‘ query. Expression.Error: The name '_' wasn't recognized.  Make sure it's spelled correctly.

解决方案

问题出在原函数只接收了列的单元格值,没有传入列名参数。要同时获取列名和对应值的长度,需要调整函数参数,让它接收每行的完整记录和目标列名两个参数,这样就能同时拿到列名和对应单元格的值。

修正后的函数代码

(RecordRow as record, TargetColumnName as text) as text =>
let
    // 获取当前行中目标列的值,空值转为空文本避免报错
    ColumnValue = Record.FieldOrDefault(RecordRow, TargetColumnName, ""),
    // 计算值的长度
    ValueLength = Text.Length(ColumnValue),
    // 拼接列名和长度
    FinalOutput = Text.Combine({TargetColumnName, Number.ToText(ValueLength)}, " ")
in
    FinalOutput

使用方法

  1. 在Power Query中加载你的数据表格
  2. 点击添加列 -> 自定义列
  3. 在自定义列公式中调用该函数,比如基于Job Name列生成结果,输入:
    = GetColumnWithLength([当前行], "Job Name")
    
    (把GetColumnWithLength替换成你保存的函数名称)
  4. 点击确定即可得到符合要求的输出列。

关键说明

  • RecordRow as record:接收每行的完整数据记录,通过列名提取对应单元格的值
  • TargetColumnName as text:明确传入目标列的名称,直接用于最终文本拼接
  • Record.FieldOrDefault:处理单元格为空的情况,避免空值导致的运行错误

内容的提问来源于stack exchange,提问作者MarekMarek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:15:41