SSRS表达式除以零误差

时间:2013-10-04 19:19:07

标签: reporting-services ssrs-tablix ssrs-expression

我有一个带有除法表达式的Tablix框。除以零或空值后,我的报告中会显示#Error。我尝试创建一个IIF语句并使用静态值进行测试。这验证了我的语法是正确的,但我仍然在报告中看到错误。

Report Preview

=IIF(Sum(Fields!CY_Dollars.Value)=0, 0, (Sum(Fields!CY_Dollars.Value) - Sum(Fields!PY_Dollars.Value))/(Sum(Fields!PY_Dollars.Value)))

因此,我采用当年美元,扣除上一年的美元,并将该总额除以上一年的美元,以获得百分比变化。有没有一个技巧,我没有得到?!

3 个答案:

答案 0 :(得分:45)

您可以在报表代码中添加一个处理除零条件的函数,这样可以更容易在多个单元格中实现,例如

Public Function Divider (ByVal Dividend As Double, ByVal Divisor As Double)
If IsNothing(Divisor) Or Divisor = 0
  Return 0
Else
  Return Dividend/Divisor
End If
End Function 

然后你可以在这样的单元格中调用它:

=Code.Divider(Fields!FieldA.Value, Fields!FieldB.Value)

答案 1 :(得分:10)

我怀疑你遇到了SSRS实际上没有短路IIF声明的问题;即使你正在检查 0 ,你仍然会遇到零除错误。

尝试类似:

=IIf(Sum(Fields!PY_Dollars.Value) = 0, 0, Sum(Fields!CY_Dollars.Value) - Sum(Fields!PY_Dollars.Value))
  / IIf(Sum(Fields!PY_Dollars.Value) = 0, 1, Sum(Fields!PY_Dollars.Value))

使用两个IIf语句意味着您可以在0/1 = 0时使用等式Sum(Fields!PY_Dollars.Value)来避免错误,从而只返回 0

另请注意,上面的表达式正在检查Sum(Fields!PY_Dollars.Value) = 0,但您的正在检查Sum(Fields!CY_Dollars.Value) = 0 - 分母需要在此处进行零检查。

答案 2 :(得分:3)

为了避免维护代码的开销,下面的解决方案对我来说感觉最整洁。它通过向它添加尽可能小的Double值(Double.Epsilon,即4.94e-324)来避免分母中的零除。这个值太小,无法影响人们使用SSRS的分数值。它还避免了嵌套IIF功能。

=IIF(Sum(Fields!Denominator.Value)>0, 
     Sum(Fields!Numerator.Value)/(Sum(Fields!Denominator.Value)+Double.Epsilon),
     nothing)