SSRS隐藏单元格中显示的#Error

pok*_*oke 15 reporting-services

我正在对那些有时会导致#Error的数据进行计算.根本原因是除以零.我可以跳过必要的工作以避免除以零,但掩盖#Error文本并显示空白单元格可能更简单.是否可以隐藏#Error并且只显示什么?

编辑

文本的表达式可能会显示#Error是这样的:

Fields!Field1.Value / Fields!ValueThatMightBeZero.Value
Run Code Online (Sandbox Code Playgroud)

我可以通过一些丑陋的检查解决这个问题,但是可能更容易捕获#Error.(iif对Express的直接检查不起作用,因为SSRS首先评估true和false子句;如果它在任一子句中得到零除,它将返回#Error,即使该子句不会被使用) .

小智 20

如果Fields!Value_Denominator.Value=0您将看不到错误消息,请将字体更改为背景颜色.

  • +1 - 这是一个奇怪的解决方案,但+1开箱即用:). (5认同)

Jam*_*e F 13

有一个IsError函数,但它不会减少处理它所需的代码.如果你不喜欢通常的iif工作,那么我认为你需要在报告中使用自己的嵌入代码.在该代码中,您可以使用try catch处理程序.创建一个可以调用的函数=Code.MyDivider(Fields!Field1.Value , Fields!ValueThatMightBeZero.Value)

Public Function MyDivider(top As Double, bottom As Double) As Double
    If top = 0 Then Return 0
    If bottom = 0 Then Return 0
    Return top / bottom
End Function
Run Code Online (Sandbox Code Playgroud)


小智 10

这很难看但是我发现这是一种让它在表达式中工作而没有自定义函数的方法.

您还必须检查分母并在那里替换非零除数,以便除以0永远不会发生(即使我们希望IIF的前半部分将其短路而不是完全到达那里):我使用1.
当然这会给出一个不正确的值,但是当分母为0时我保持外部IIF显示我想要的东西(我在我的例子中显示0).

=IIF(Fields!Value_Denominator.Value=0, 0, Fields!Value_Numerator.Value/IIF(Fields!Value_Denominator.Value=0,1,Fields!Value_Denominator.Value))
Run Code Online (Sandbox Code Playgroud)


小智 5

在第二个表达式中添加一个小值 -

Fields!Field1.Value /(Fields!ValueThatMightBeZero.Value + .00001)

那将返回0.