在Power Query中使用M语言创建忽略空值的自定义百分比列的方法
在Power Query中用M语言实现忽略空值的列平均值计算
这个需求用M语言的列表函数就能轻松搞定,核心思路就是先把非空的数值筛选出来,再基于有效数据计算平均值,完美避开null的干扰。下面是具体的实现步骤和代码:
步骤1:添加自定义列
打开Power Query编辑器,选中你的数据表,点击顶部菜单栏的「添加列」→「自定义列」,在弹出的编辑框里输入以下M代码,同时把自定义列命名为% column:
let // 将当前行A、B、C列的值打包成列表,自动移除空值 NonNullValues = List.RemoveNulls({[A], [B], [C]}), // 计算有效数值的总和 Total = List.Sum(NonNullValues), // 统计有效数值的数量 ValidCount = List.Count(NonNullValues), // 计算平均值,同时处理全空的情况(避免除以0报错) AverageResult = if ValidCount > 0 then Total / ValidCount else null in AverageResult
代码细节解释
List.RemoveNulls({[A], [B], [C]}):这一步会把当前行的三个列值放进一个列表里,自动剔除所有null值。比如第2行C是null,得到的列表就是{[A], [B]};第3行A是null,得到的就是{[B], [C]},完全贴合你的需求场景。List.Sum和List.Count:分别对筛选后的有效列表求和、计数,这两个函数本身就对null兼容,但我们提前移除null后结果会更精准。- 最后的条件判断:如果有效数值的数量大于0,就计算平均值;如果三个列全是null,就返回null(你也可以改成
else 0,根据实际业务需求调整)。
效果验证
- 当A、B、C都有值时,有效列表包含三个元素,结果就是
(A+B+C)/3,符合你的基础计算逻辑。 - 当某一列或两列为null时,有效列表自动排除空值,用剩下的数值计算平均值,完全匹配你提到的第2、3行的场景。
内容的提问来源于stack exchange,提问作者adame
相关产品推荐
相关产品推荐

