Power BI动态将列名转为新表表头并统计非零行数
Power Query 动态统计各列非零行数解决方案
需求回顾
从筛选后的Table 1生成Table 2:
Type列:对应Table 1的列名Total列:统计对应列的非零行数(非求和)- 需适配
Table 1列的动态变化(比如后续筛选不同列)
错误原因分析
你之前的公式存在两个问题:
- 无法直接通过
#"Table 2"[Type]在计算列中引用当前行的Type值来定位原表列 List.NonNullCount是统计非空值,而非非零值,不符合需求
解决方案步骤
以下是完整的M语言实现,支持动态列适配:
- 确保已对
Table 1完成列筛选操作,新建空白查询后输入代码:
let // 引用筛选后的原表 Source = #"Table 1", // 动态获取当前表的所有列名(适配后续列变更) ColumnNames = Table.ColumnNames(Source), // 将列名转换为以Type为列名的表 TypeTable = Table.FromList(ColumnNames, Splitter.SplitByNothing(), {"Type"}), // 添加Total列,统计对应列的非零行数 AddTotalColumn = Table.AddColumn(TypeTable, "Total", each List.Count( List.Select( Table.Column(Source, [Type]), (value) => value <> 0 ) ) ) in AddTotalColumn
关键逻辑说明
Table.ColumnNames(Source):自动获取Table 1筛选后的列名,后续列变更时无需修改代码Table.Column(Source, [Type]):根据当前行的Type值,精准提取Table 1对应列的全部数据List.Select(..., (value) => value <> 0):筛选出列中所有非零值List.Count:统计筛选后的非零值数量,即目标非零行数
测试结果
用你提供的Table 1数据执行后,将得到预期结果:
| Type | Total |
|---|---|
| X | 1 |
| Y | 2 |
| Z | 0 |
内容的提问来源于stack exchange,提问作者NE2011
相关产品推荐
相关产品推荐

