我有一个字段的报告,其值为表达式:
Fields!TotalPrice.Value/Fields!TotalSlots.Value
虽然有时 TotalSlots 是空白的,因此我得到了除以零的运行时错误。所以我将表达式更改为:
=IIF(Fields!TotalSlots.Value > 0, Fields!TotalPrice.Value/Fields!TotalSlots.Value,"unknown")
但我仍然得到除以零的错误。我如何解决这个零除数问题。
我有一个字段的报告,其值为表达式:
Fields!TotalPrice.Value/Fields!TotalSlots.Value
虽然有时 TotalSlots 是空白的,因此我得到了除以零的运行时错误。所以我将表达式更改为:
=IIF(Fields!TotalSlots.Value > 0, Fields!TotalPrice.Value/Fields!TotalSlots.Value,"unknown")
但我仍然得到除以零的错误。我如何解决这个零除数问题。
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)
VB IIF评估所有 arguments,因此如果任何参数引发错误,它将引发错误:
你的公式可以写成:
=IIF(Fields!TotalSlots.Value > 0,
Fields!TotalPrice.Value /
IIF(Fields!TotalSlots.Value > 0,
Fields!TotalSlots.Value,
1 ),
"unknown")
那么即使 TotalSlots 为零,公式仍然不会遇到除法问题。
我不认为你的错误是在计算上。首先,SSRS 会自动处理这种情况。请参阅我的第三个专栏。第四个显示你的表情:
您的问题可能在其他地方
这似乎只发生在除法是 IIF 的结果之一时,而不是如果您只是编写一个公式将一个除以另一个,例如
=IIF(thing=1,10/0,0)
在评估事物之前,它已经尝试计算两个结果,导致错误。您不能以这种方式使用 IIF 来防止零,您必须将 IIF 放在除法的底线上,例如
=IIF(thing=1, 10/IIF(divisor=0,-99999999999,divisor),0)
这并不令人满意,因为我们引入了一个奇怪的小非零数字作为结果,但如果你只想要一个非错误可能没问题。
从技术上讲,#error 是正确的答案。