我的报告中包含一个字段,其值为表达式:
Fields!TotalPrice.Value/Fields!TotalSlots.Value
虽然有时TotalSlots是空白的,因此我得到的是零运行时误差。所以我把表达式改为:
=IIF(Fields!TotalSlots.Value > 0, Fields!TotalPrice.Value/Fields!TotalSlots.Value,"unknown")
但我仍然得到零除错误。我如何解决这个零除数问题。
答案 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自动处理这种情况。见我的第三栏。第四部分显示了你的表达:
您的问题可能在其他地方
答案 3 :(得分:1)
这种情况似乎只有当分裂是IIF的结果之一时才会发生,而不是如果你只是写一个公式来将一个分开,例如。
=IIF(thing=1,10/0,0)
在评估之前,它已经尝试计算两个结果,导致错误。你不能以这种方式使用IIF来防止零,你必须把IIF放在分区的底线,例如。
=IIF(thing=1, 10/IIF(divisor=0,-99999999999,divisor),0)
这并不令人满意,因为我们已经将一个奇怪的小非零数字作为结果,但如果你只是想要一个非错误就可以了。
从技术上讲,#error是正确答案。