s-s-rS 2008 - 处理除以零的情况

Posted

技术标签:

【中文标题】s-s-rS 2008 - 处理除以零的情况【英文标题】:s-s-rS 2008 - Dealing with division by zero scenarios 【发布时间】:2011-03-29 11:32:18 【问题描述】:

我们的一份报告遇到了问题。在我们的其中一个 tablixes 中,文本框具有以下表达式:

=Iif(Fields!SomeField.Value = 0, 0, Fields!SomeOtherField.Value / Fields!SomeField.Value)

这应该是不言自明的。如果“SomeField”为零,则将文本框值设置为零,否则将其设置为“SomeOtherValue / SomeValue”。

让我们感到困惑的是,报告仍然抛出运行时异常“试图除以零”,尽管上面的表达式应该阻止这种情况的发生。

我们对表达式做了一些改动,以确保零校验正常工作,并且

=Iif(Fields!SomeField.Value = 0, "Yes", "No")

效果很好。数据实际上为零的情况会导致文本框显示“是”,反之亦然。所以检查工作正常。

我的直觉是报表渲染引擎在运行时抛出异常,因为它“看起来”好像我们要除以零,但实际上并非如此。

以前有人遇到过同样的问题吗?如果是这样,你做了什么让它工作?

【问题讨论】:

太棒了!我用这个建议回答了我的问题:***.com/questions/43662727/… 从不、从不、从不、从不NEVER在 IIF 语句中计算值或调用函数是一种很好的做法。顺便说一句,我留下了一些从来没有,以防它变得有点不堪重负。 【参考方案1】:

IIf 总是会在决定实际返回哪一个之前评估这两个结果。

试试

=IIf(Fields!SomeField.Value = 0, 0, Fields!SomeOtherField.Value / IIf(Fields!SomeField.Value = 0, 1, Fields!SomeField.Value))

如果 SomeOtherField.Value = 0,这将使用 1 作为除数,这不会产生错误。父 IIf 将为整个表达式返回正确的 0。

【讨论】:

喜欢这个!尤其是“如果 SomeOtherField.Value = 0,这将使用 1 作为除数,这不会产生错误。父 IIf 将为整个表达式返回正确的 0”的逻辑。呵呵,偷偷摸摸的,确实【参考方案2】:

防止除以零错误的一种简单干净的方法是使用报告代码区域。

在菜单中,转到报告 > 报告属性 > 代码并粘贴以下代码

Public Function Quotient(ByVal numerator As Decimal, denominator As Decimal) As Decimal
        If denominator = 0 Then
            Return 0
        Else
            Return numerator / denominator
        End If
    End Function

要调用该函数,请转到文本框表达式并输入:

 =Code.Quotient(SUM(fields!FieldName.Value),SUM(Fields!FieldName2.Value))

在这种情况下,我将公式放在组级别,因此我使用 sum。否则会是:

 =Code.Quotient(fields!FieldName.Value,Fields!FieldName2.Value)

发件人:http://williameduardo.com/development/s-s-rs/s-s-rs-divide-by-zero-error/

【讨论】:

我喜欢它。清洁且可重复使用。如果您在此处粘贴此解决方案,更多人会看到它有多好:-) 这是最好的解决方案,非常感谢,我尝试了 MartW 提供的解决方案,但由于某种原因仍然无效,您的解决方案有效【参考方案3】:

回想起来,我觉得最好的办法是乘以 -1 次方,这是一个除数:

=IIf
  (
      Fields!SomeField.Value = 0
    , 0
    , Fields!SomeOtherField.Value * Fields!SomeField.Value ^ -1
  )

这不会触发预渲染检查,因为 val * 0 ^ -1 会导致无穷大,而不是错误

【讨论】:

【参考方案4】:

即使 Fields!SomeField.Value 的值为 0,IIF 也会计算这两个表达式。使用 IF 代替 IIF 可以解决问题。

【讨论】:

以上是关于s-s-rS 2008 - 处理除以零的情况的主要内容,如果未能解决你的问题,请参考以下文章

除以零的处理方式不同

Java基础 try...catch 处理ArithmeticException 除以零的异常

为啥在 s-s-rS 2008 中出现“报告处理中发生意外错误”?

无论结果如何,支持除以零的最快整数除法是啥?

生产环境中 s-s-rS 2008 R2 的权限

用于 SharePoint 2010 集成的 s-s-rS 2008 配置 - 权限问题