ssrs nullif完全限定名称

时间:2014-10-15 13:04:00

标签: sql reporting-services nullif

我正在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')

当我使用此表达式运行报告时,我收到错误消息" Name' NULLIF'没有宣布"。我一直试图找到NULLIF的完全限定名称,因为我认为这将解决我的问题,但我没有找到任何运气。有谁知道NULLIF的完全限定名称是什么,或者是否有其他方法在SSRS中实现NULLIF?

由于

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

然而,这不会解决你的零分问题,D Stanley的回答也不会。问题是IIF是一个函数而不是语言构造,所以SSRS 在将它们传递给函数之前计算两个参数,而不管布尔条件的结果如何。这意味着,即使Sum(Fields!ON_TIME.Value)/Sum(Fields!COUNT_FIELD.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作为结果。

相关问题