13

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

Fields!TotalPrice.Value/Fields!TotalSlots.Value

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

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

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

4

4 回答 4

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)
于 2012-05-04T01:28:49.420 回答
16

VB IIF评估所有 arguments,因此如果任何参数引发错误,它将引发错误:

你的公式可以写成:

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

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

于 2012-05-03T16:39:13.523 回答
1

我不认为你的错误是在计算上。首先,SSRS 会自动处理这种情况。请参阅我的第三个专栏。第四个显示你的表情:

在此处输入图像描述

您的问题可能在其他地方

于 2012-05-03T15:13:28.787 回答
1

这似乎只发生在除法是 IIF 的结果之一时,而不是如果您只是编写一个公式将一个除以另一个,例如

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

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

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

这并不令人满意,因为我们引入了一个奇怪的小非零数字作为结果,但如果你只想要一个非错误可能没问题。

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

于 2013-01-30T14:20:13.527 回答