Ssrs 2008 SSRS 2008-处理按零划分的场景

Ssrs 2008 SSRS 2008-处理按零划分的场景,ssrs-2008,Ssrs 2008,我们的一份报告有问题。在我们的一个小报中,文本框具有以下表达式: =Iif(Fields!SomeField.Value = 0, 0, Fields!SomeOtherField.Value / Fields!SomeField.Value) 这应该是不言自明的。如果“SomeField”为零,则将文本框值设置为零,否则将其设置为“SomeOtherValue/SomeValue” 让我们困惑的是,报告仍然抛出一个运行时异常“试图除以零”,即使上面的表达式应该阻止这种情况发生 我们稍微修改了

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

=Iif(Fields!SomeField.Value = 0, 0, Fields!SomeOtherField.Value / Fields!SomeField.Value)
这应该是不言自明的。如果“SomeField”为零,则将文本框值设置为零,否则将其设置为“SomeOtherValue/SomeValue”

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

我们稍微修改了一下表达式,以确保零检查有效,并且

=Iif(Fields!SomeField.Value = 0, "Yes", "No")
工作得很漂亮。数据实际上为零的情况会导致文本框显示“是”,反之亦然。所以支票很有效

我的直觉是,报表呈现引擎在运行时抛出异常,因为它“看起来”好像我们要除以零,但实际上,我们不是


以前有人遇到过同样的问题吗?如果是这样的话,您是如何让它工作的?

IIf将在决定实际返回哪一个结果之前始终评估这两个结果

试一试


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

经过思考,我觉得最好的方法是将值乘以幂-1,这是一个除法:

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

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

防止被零除错误的简单方法是使用报告代码区域

在菜单中,转到“报告>报告属性>代码”,然后将代码粘贴到下面

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)

From:

IIF计算两个表达式,甚至考虑字段的值!SomeField。值为0。使用IF而不是IIF可以解决问题。

喜欢这个!尤其是“如果其他字段的值为0,则使用1作为除数,这不会产生错误。父IIf将为整个表达式返回正确的0。”呵呵,鬼鬼祟祟,Indeed我喜欢它。清洁和可重复使用。如果您将此解决方案粘贴到此处,更多的人会看到它有多好:-)这是最好的解决方案,非常感谢,我尝试了MartW提供的解决方案,但由于某些原因仍然无效,您的解决方案非常有效!我在回答我的问题时使用了这个建议:在IIF语句中,从不,从不,从不计算值或调用函数是很好的做法。顺便说一句,我留下了一些Never,以防它变得有点势不可挡。
 =Code.Quotient(fields!FieldName.Value,Fields!FieldName2.Value)