d90*_*d90 17 reporting-services ssrs-tablix ssrs-expression
我有一个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)))
因此,我采用当年的美元,扣除上一年的美元,并将该总额除以上一年的美元,以获得百分比变化.有没有一个技巧,我没有得到?!
Nat*_*ths 47
您可以在报表代码中添加一个处理除零条件的函数,这样可以更容易在多个单元格中实现,例如
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
Run Code Online (Sandbox Code Playgroud)
然后你可以在这样的单元格中调用它:
=Code.Divider(Fields!FieldA.Value, Fields!FieldB.Value)
Run Code Online (Sandbox Code Playgroud)
Ian*_*ton 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))
Run Code Online (Sandbox Code Playgroud)
使用两个IIf语句意味着您可以0/1在Sum(Fields!PY_Dollars.Value)= 0 时使用公式来避免错误,因此只返回0.
另请注意,上面的表达式是检查Sum(Fields!PY_Dollars.Value) = 0,但是你的检查Sum(Fields!CY_Dollars.Value) = 0- 分母需要在这里进行零检查.
小智 5
为了避免维护代码的开销,下面的解决方案对我来说感觉最整洁。通过在分母中添加最小的可能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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42849 次 |
| 最近记录: |