SSRS计算百分比偏差出现NaN、infinity异常如何解决
SSRS偏差率计算异常修复方案
原公式Deviation=(Today- yesterday)/yesterday未做边界值判断,触发0/0、非0值除以0的算术异常,才会返回NaN、无穷值的错误结果,可通过多条件分支判断覆盖所有规则场景解决。
可用计算表达式
直接在SSRS报表文本框的表达式编辑器中填入以下代码即可,使用Switch函数按优先级匹配计算规则,命中对应条件后直接返回结果,不会触发后续异常计算:
=Switch( CDbl(Fields!Today.Value) = 0 And CDbl(Fields!yesterday.Value) = 0, -1, CDbl(Fields!yesterday.Value) = 0, 1, CDbl(Fields!Today.Value) = 0, -1, True, (CDbl(Fields!Today.Value) - CDbl(Fields!yesterday.Value))/CDbl(Fields!yesterday.Value) )
配置说明
- 表达式中用
CDbl()包裹字段,是为了兼容字段为整数、空值的类型转换问题,如果你的字段本身为确定的非空数值类型,可以省略该包裹。 - 选中文本框后,在属性窗口找到
Format项,填入P0即可显示无小数位的百分比格式,填入P2则保留2位小数,不需要在公式中手动乘100,SSRS会自动完成百分比格式转换。
场景验证
所有边界和常规场景的返回结果均符合预期:
- Today=0、yesterday=0:返回-1,显示为-100%
- Today为任意非0值、yesterday=0:返回1,显示为+100%
- Today=0、yesterday为任意非0值:返回-1,显示为-100%
- 两个值均为非0值:按原公式正常计算偏差率,无算术异常
内容的提问来源于stack exchange,提问作者Lekshmi priya
相关产品推荐
相关产品推荐

