【问题标题】:ssrs nullif fully qualified namessrs nullif 完全限定名称
【发布时间】:2014-10-15 13:03:59
【问题描述】:

我正在 SSRS 中构建一个报告,将两个数字相除以获得它们的百分比。有些值会被 0 除,这会引发错误。我有这个表达式来绕过除以 0 错误,但它必须运行方程两次。

=IIF(System.Double.IsNaN(Sum(Fields!ON_TIME.Value)/Sum(Fields!COUNT_FIELD.Value)),Nothing,(Sum(Fields!ON_TIME.Value)/Sum(Fields!COUNT_FIELD.Value)))

为了提高性能,我想将此表达式作为 NULLIF 表达式运行,如下所示:

=NULLIF(Sum(Fields!ON_TIME.Value)/Sum(Fields!COUNT_FIELD.Value), 'Nan')

当我使用此表达式运行报告时,我收到一条错误消息,提示“未声明名称 'NULLIF'”。我一直在尝试找到 NULLIF 的完全限定名称,因为我认为这将解决我的问题,但我没有找到它的运气。有谁知道 NULLIF 的完全限定名称是什么,或者有其他方法可以在 SSRS 中实现 NULLIF 吗?

谢谢

【问题讨论】:

    标签: sql reporting-services nullif


    【解决方案1】:

    NULLIF 是 SQL 函数,不是 VB。尝试只检查 0:

    =IIF(SSum(Fields!COUNT_FIELD.Value) = 0,
         Nothing,
         Sum(Fields!ON_TIME.Value)/Sum(Fields!COUNT_FIELD.Value)
        )
    

    【讨论】:

    • 我在本周早些时候确实尝试过类似的方法,但在将最终数字保留为百分比时遇到了问题。我复制了您的代码并对其进行了测试,它似乎工作正常。谢谢
    • 请注意,当Sum(Fields!COUNT_FIELD.Value) 为零时,这仍然会导致除以零错误,如我的回答中所述。
    【解决方案2】:

    您想在 SSRS VB 表达式中使用 IsNothing,而不是 NULLIF

    但是,这不会解决您除以零的问题,D Stanley 的答案也不会。问题是 IIF 是一个函数而不是语言构造,因此 SSRS 在将两个参数传递给函数之前评估它们,而不管布尔条件的结果如何。这意味着即使 Sum(Fields!COUNT_FIELD.Value) 为零(您已声明它将为零),也会评估 Sum(Fields!ON_TIME.Value)/Sum(Fields!COUNT_FIELD.Value)

    您需要使用双精度 IIF 来防止除以零错误,如下所示:

    =IIF(Sum(Fields!COUNT_FIELD.Value) <> 0, 
        Sum(Fields!ON_TIME.Value) / IIF(Sum(Fields!COUNT_FIELD.Value) = 0, 1, Sum(Fields!COUNT_FIELD.Value)),
        Nothing
        )
    

    我们所做的是,当Sum(Fields!COUNT_FIELD.Value) 为零时,我们将除以 1,然后将结果丢弃并给出Nothing 作为结果。

    【讨论】:

      猜你喜欢
      • 2019-10-09
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多