2

我正在 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?

谢谢

4

2 回答 2

1

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

=IIF(SSum(Fields!COUNT_FIELD.Value) = 0,
     Nothing,
     Sum(Fields!ON_TIME.Value)/Sum(Fields!COUNT_FIELD.Value)
    )
于 2014-10-15T13:10:22.660 回答
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作为结果给出。

于 2014-10-16T00:36:58.777 回答