在SSRS 2008报告中除以零/空变通方法

时间:2012-05-03 13:45:10

标签: sql reporting-services ssrs-2008

我的报告中包含一个字段,其值为表达式:

Fields!TotalPrice.Value/Fields!TotalSlots.Value

虽然有时TotalSlots是空白的,因此我得到的是零运行时误差。所以我把表达式改为:

=IIF(Fields!TotalSlots.Value > 0, Fields!TotalPrice.Value/Fields!TotalSlots.Value,"unknown")

但我仍然得到零除错误。我如何解决这个零除数问题。

4 个答案:

答案 0 :(得分:24)

Jamie F的回答是正确的。作为提示,您可以在报告代码中添加一个功能,以便在多个单元格中实现分割更容易,例如:

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 :(得分:16)

VB IIF evaluates all arguments,因此如果任何参数抛出错误,它将抛出错误:

您的公式可以写成:

=IIF(Fields!TotalSlots.Value > 0,
   Fields!TotalPrice.Value /
   IIF(Fields!TotalSlots.Value > 0,
       Fields!TotalSlots.Value,
       1 ),
   "unknown")

然后,即使TotalSlots为零,公式仍然不会遇到除法问题。

答案 2 :(得分:1)

我认为您的错误不在计算上。首先,SSRS自动处理这种情况。见我的第三栏。第四部分显示了你的表达:

enter image description here

您的问题可能在其他地方

答案 3 :(得分:1)

这种情况似乎只有当分裂是IIF的结果之一时才会发生,而不是如果你只是写一个公式来将一个分开,例如。

=IIF(thing=1,10/0,0)

在评估之前,它已经尝试计算两个结果,导致错误。你不能以这种方式使用IIF来防止零,你必须把IIF放在分区的底线,例如。

=IIF(thing=1, 10/IIF(divisor=0,-99999999999,divisor),0)

这并不令人满意,因为我们已经将一个奇怪的小非零数字作为结果,但如果你只是想要一个非错误就可以了。

从技术上讲,#error是正确答案。