Power Query:统计Sprint_开头列非空值并删除该类列的实现
Power Query 处理动态Sprint列解决方案
核心思路
先提取所有符合规则的Sprint列名,再针对每行仅统计这些列的非空值,最后批量删除Sprint列。
分步实现代码
提取Sprint列名列表
先定义一个列表存储所有以Sprint_开头的列名,后续操作复用这个列表:SprintColumns = List.Select(Table.ColumnNames(Source), each Text.StartsWith(_, "Sprint_"))添加非空值统计列
用Record.SelectFields从每行记录中仅筛选出Sprint列,再提取字段值并统计非空数量,解决之前的类型不匹配问题:TableWithCount = Table.AddColumn(Source, "Sprint_NonNull_Count", each List.NonNullCount(Record.FieldValues(Record.SelectFields(_, SprintColumns))))批量删除Sprint列
直接用之前定义的列名列表删除所有目标列:FinalTable = Table.RemoveColumns(TableWithCount, SprintColumns)
完整可运行代码
将以下代码替换到Power Query编辑器的脚本中(注意替换Source为你实际读取CSV的步骤):
let Source = Csv.Document(File.Contents("你的CSV文件路径"), [Delimiter=",", Encoding=1252, QuoteStyle=QuoteStyle.Csv]), // 替换为你读取CSV的实际Source代码 SprintColumns = List.Select(Table.ColumnNames(Source), each Text.StartsWith(_, "Sprint_")), TableWithCount = Table.AddColumn(Source, "Sprint_NonNull_Count", each List.NonNullCount(Record.FieldValues(Record.SelectFields(_, SprintColumns)))), FinalTable = Table.RemoveColumns(TableWithCount, SprintColumns) in FinalTable
问题原因解释
之前的类型不匹配是因为错误地将「列总数统计代码(返回单个数值)」和「整行字段值统计代码(返回每行的列表)」强行结合,逻辑上不兼容。正确的做法是先筛选目标列,再针对每行提取这些列的字段值进行统计,确保数据类型统一。
内容的提问来源于stack exchange,提问作者Naama Efrati
相关产品推荐
相关产品推荐

