我有一个带有除法表达式的Tablix框。除以零或空值后,我的报告中会显示#Error
。我尝试创建一个IIF
语句并使用静态值进行测试。这验证了我的语法是正确的,但我仍然在报告中看到错误。
=IIF(Sum(Fields!CY_Dollars.Value)=0, 0, (Sum(Fields!CY_Dollars.Value) - Sum(Fields!PY_Dollars.Value))/(Sum(Fields!PY_Dollars.Value)))
因此,我采用当年美元,扣除上一年的美元,并将该总额除以上一年的美元,以获得百分比变化。有没有一个技巧,我没有得到?!
答案 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)