我正在对那些有时会导致#Error的数据进行计算。根本原因是除以零。我可以跳过必要的工作以避免除以零,但掩盖#Error文本并显示空白单元格可能更简单。是否可以隐藏#Error并且只显示任何内容?
修改
文本的表达式可能会显示#Error就是这些行:
Fields!Field1.Value / Fields!ValueThatMightBeZero.Value
我可以通过一些丑陋的检查解决这个问题,但是可能更容易捕获#Error。 (快递周围的直接iif
检查不起作用,因为SSRS首先评估true和false子句;如果它在任一子句上得到零除,它将返回#Error,即使该子句不会'已被使用过。)
答案 0 :(得分:20)
如果Fields!Value_Denominator.Value=0
将字体更改为背景颜色,则不会看到错误消息。
答案 1 :(得分:12)
有一个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
答案 2 :(得分: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))
答案 3 :(得分:5)
向第二个表达式添加一个小值 -
Fields!Field1.Value /(Fields!ValueThatMightBeZero.Value + .00001)
那将会返回0。
答案 4 :(得分:4)
这是一个很好的解决方案。 但是我认为甚至可以改进它。我建议不要将条件格式设置为“白色”,而是将条件隐藏表达式设置为True。 在这种情况下,当导出到excel时,单元格将不包含任何内容,这与更改字体forecolor的情况不同。 在可见性下 - >隐 = IIF(字段!denominator.Value = 0,真,假)
答案 5 :(得分:0)
您可以使用 IsNumeric 检查每个表达式并显示0或更高,但不显示任何内容,因为0可能有一些含义。
IsNumeric - 返回一个布尔值,指示是否可以将表达式计算为数字。
例如:
=Iif(IsNumeric(Fields!YourValue.Value), Fields!YourValue.Value, Nothing)
或
=Iif(IsNumeric(Fields!YourValue.Value), Fields!YourValue.Value, 0)
答案 6 :(得分:0)
使用NULLIF
功能:
DECLARE @a int
DECLARE @b int
SET @a = 1
SET @b = 0
SELECT @a/@b --this returns an error
SELECT @a/NULLIF(@b,0) -- this returns NULL
答案 7 :(得分:0)
到目前为止,建议的另一个替代方法是添加可能产生错误的公式部分。
示例:a / b,如果b = 0,则等式给出错误。
{= IIF(b = 0,TRUE,FALSE)}
答案 8 :(得分:0)
在SSRS自定义代码中使用“尝试并捕获”
Public Function My_Function(ByVal My_Divisor As int) As int
Dim My_Result as integer
TRY
My_Result = 100/My_Divisor
CATCH
My_Result = -1
END TRY
Return My_Result
End Function
答案 9 :(得分:0)
这可能并非在所有情况下都有效,但对我而言却成功了。
我添加了另一列,该列引用了带有错误(ReportItems!XYZ.Value)的文本框,SSRS使用这种类型的引用将#Error显示为空白。然后,我隐藏了包含实际公式的列,瞧,解决了。尽管可能以最骇人听闻的方式。
答案 10 :(得分:0)
类似于上述根据字段值更改字体颜色的答案-向该字段添加表达式,以检查该字段是否包含“ #Error”:= IIF(Fields!xxxx.Value =“#Error” ,“”,Fields!xxxx.Value)。