SSRS技术求助:如何计算非零值期间的总计平均值?
解决SSRS中计算非零总计期间平均值的问题
我完全懂你的需求——要把所有月份的总计总和,除以那些总计不为零的月份数量,得到正确的平均值对吧?你之前尝试用CountDistinct结合IIF没成功,是因为CountDistinct是用来统计不同值的个数,而咱们需要的是非零行的数量,换个方式就能搞定了。
核心表达式实现
直接用下面的表达式就能得到你要的结果:
=IIF(Sum(IIF(Fields!Total.Value <> 0, 1, 0)) = 0, 0, Sum(Fields!Total.Value) / Sum(IIF(Fields!Total.Value <> 0, 1, 0)))
拆解一下这个表达式的逻辑:
Sum(Fields!Total.Value):计算所有月份总计的总和(也就是你例子里的27,377)Sum(IIF(Fields!Total.Value <> 0, 1, 0)):遍历每一行,遇到总计非零的就计1,最后求和得到非零月份的数量(你的例子里是5)- 外层的
IIF是做容错处理:如果所有月份的总计都是0,分母为0会报错,这时候返回0避免错误。
为什么不用CountDistinct?
CountDistinct(Fields!Total.Value)会统计所有不同的总计值的数量,比如如果有多个月份的总计是同一个非零值,它只会算一次,这显然不是你想要的“非零月份的个数”,所以用Sum(IIF(...))来计数才是准确的。
格式设置
把这个表达式放到你需要显示平均值的文本框里后,记得在文本框的格式设置里选择数值或货币格式,保留两位小数,这样就能得到你想要的5,475.40的展示效果啦。
内容的提问来源于stack exchange,提问作者knick_kname




