Power BI可视化表格中按产品类别用平均值替换零值
在Power BI中用对应产品类别的平均值替换零值
需求说明
现有数据表如下:
Product Customer Value ------------------------ x A 10 y A 20 x B 0 x C 12 y C 24 x D 15 y D 30
需要将Value列中的零值替换为对应Product类别下的非零值平均值,最终得到如下结果:
Product Customer Value ------------------------- x A 10 y A 20 x B 12.33 x C 12 y C 24 x D 15 y D 30
解决方案:创建计算列
通过DAX创建计算列实现零值替换,步骤如下:
- 进入Power BI的数据视图,选中目标数据表
- 点击「新建列」,输入以下DAX公式(注意将
'Table'替换为你实际的数据表名称):
Adjusted Value = VAR CurrentProduct = 'Table'[Product] -- 计算当前产品下所有非零值的平均值 VAR ProductNonZeroAvg = CALCULATE( AVERAGE('Table'[Value]), FILTER( 'Table', 'Table'[Product] = CurrentProduct && 'Table'[Value] <> 0 ) ) -- 判断当前值是否为0,是则返回保留两位小数的平均值,否则返回原值 RETURN IF('Table'[Value] = 0, ROUND(ProductNonZeroAvg, 2), 'Table'[Value])
- 在可视化面板的表格组件中,选择
Product、Customer和新创建的Adjusted Value列,即可得到期望结果。
结果验证
以Product x为例,非零值为10、12、15,平均值为(10+12+15)/3 ≈ 12.33,与期望结果中Customer B的x产品值完全匹配,符合需求。
可选方案:使用度量值(动态筛选场景)
如果需要在动态筛选的场景下生效,可创建度量值替代计算列:
Adjusted Value Measure = VAR CurrentProduct = SELECTEDVALUE('Table'[Product]) VAR ProductNonZeroAvg = CALCULATE( AVERAGE('Table'[Value]), ALLSELECTED('Table'), 'Table'[Product] = CurrentProduct, 'Table'[Value] <> 0 ) RETURN IF(SELECTEDVALUE('Table'[Value]) = 0, ROUND(ProductNonZeroAvg, 2), SELECTEDVALUE('Table'[Value]))
在可视化表格中选择Product、Customer和该度量值即可正常显示。
内容的提问来源于stack exchange,提问作者Parvez Alam
相关产品推荐
相关产品推荐

