2012-02-04 70 views
13

我正在对该数据进行计算,有时会导致#Error。根本原因是被零除。我可以跳过必要的解决方法以避免被零除,但掩盖#Error文本并显示空白单元格可能更简单。是否有可能隐藏#Error并且什么也不显示?SSRS隐藏#单元格中显示的错误

编辑

文本可能会显示#错误的表达是沿着这些路线的东西:

Fields!Field1.Value/Fields!ValueThatMightBeZero.Value 

我能解决这个有些丑陋的检查,但它可能是更容易只是赶上#错误。 (直接iif检查express不起作用,因为SSRS首先评估true和false子句;如果它在任一子句上除以零,它将返回#Error,即使该子句不会被使用)。

回答

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 
+0

对于自定义代码+1 - IMO比每个单元格上的复杂表达式更容易。 – thomasswilliams 2012-02-06 21:34:07

0

您可以使用IsNumeric检查每个表达式并显示0或更好,但不显示任何内容为0可能有一些意义。

IsNumeric - 返回一个布尔值,指示表达式是否可以作为数字计算。

例如:

=Iif(IsNumeric(Fields!YourValue.Value), Fields!YourValue.Value, Nothing) 

=Iif(IsNumeric(Fields!YourValue.Value), Fields!YourValue.Value, 0) 
+0

我现在不在SSRS之前,但我更新了我的问题并提供了更多信息。如果它是由我的表达式返回的,将会是数字“Catch”#Error。换句话说,我可以在我的整个表达式中包装IsNumeric并使用它来确定我是否有#Error? – poke 2012-02-05 00:34:12

+1

@poke:我认为你是对的,即使'IIF'包含在IsNumeric中,也会引发#Error。 – 2012-02-06 14:57:06

+0

@JamieF:你说得对,这是行不通的。虽然在SQL 2008R2上直接使用'Iif'来检查分母值是否适用于我(如果仅用于分割0)。 '= Iif(Fields!Value_Denominator.Value = 0,“”,(Fields!Value_Numerator.Value/Fields!Value_Denominator.Value))'但有趣的是,错误并不是很一致,例如Infinity,-Infinity,NaN ... – xm1994 2012-02-06 16:13:20

9

这是丑陋的,但这里是一个办法,我发现,使其在表达和没有自定义函数工作调用函数。

你也必须检查分母,并用一个非零除数替代,这样除以0就不会发生(即使我们希望IIF的前半部分将它短路并且根本就不会到达那里):我使用1.
当然这会给出一个不正确的值,但是当分母为0(我在示例中显示为0)时,我会保持外部IIF显示我想要的任何内容。

=IIF(Fields!Value_Denominator.Value=0, 0, Fields!Value_Numerator.Value/IIF(Fields!Value_Denominator.Value=0,1,Fields!Value_Denominator.Value)) 
15

更改字体是如果Fields!Value_Denominator.Value=0的背景颜色,你不会看到错误消息。

+1

为什么这个投票被拒绝?看起来像是一个明智的解决方案 – 2013-04-01 00:44:09

+3

+1 - 这是一个奇怪的解决方案,但+1的思维开箱即用:)。 – JonH 2013-08-02 19:51:06

+0

OMG This works !!!非常感谢 – 2017-01-06 07:00:12

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 
4

这是一个很好的解决方案。 但是我认为甚至可以改进它。相反,将条件格式设置为“白色”,我建议将条件Hidden表达式设置为True。 在这种情况下,当导出为ex​​cel时,单元格将不包含任何内容,与更改字体forecolor的情况不同。 Under Visibility - >隐藏 = Iif(Fields!分母。值= 0,True,False)

0

到目前为止,建议的另一种替代方法是添加可能会产生错误的公式部分。

例如:a/b,如果b = 0,那么等式给出一个错误。

{= IIF(B = 0,TRUE,FALSE)}

4

小的值添加到第二个表达式! -

字段Field1.Value /(!字段ValueThatMightBeZero.Value + 0.00001)

这将返回0.