如何删除公式中的 NaN 和 Inf

How to remove an NaN and Inf in a formula

我正在写一份报告,其中有一列计算销售额的年复一年。我遇到的问题是我们没有任何今年年初之前的销售历史记录。我正在使用下面的公式来计算百分比变化,但由于分母为零而出现 NaN 和 Inf 错误。有没有办法编写这个公式来排除那些,也许是一个 iif 语句?

=(SUM(字段!MTDInvoiced.Value)-SUM(字段!PYMTDInvoiced.Value))/SUM(字段!PYMTDInvoiced.Value)

您可以编写一个自定义函数来执行此操作,这可能是最好的方法,尤其是当您经常需要它时,但下面的仅表达式版本应该可以工作。

=IIF(
    SUM(Fields!PYMTDInvoiced.Value)=0,
    0, 
   (SUM(Fields!MTDInvoiced.Value) - SUM(Fields!PYMTDInvoiced.Value)) 
    / 
    IIF(SUM(Fields!PYMTDInvoiced.Value)=0,1,SUM(Fields!PYMTDInvoiced.Value))
)

我没有对此进行测试,但希望它是正确的。

我们做的第一件事是测试分母是否为零,然后 return 0 如果是。如果不是,那么我们执行标准表达式,但我们再次测试分母不为零。即使最后一次检查永远不会 return 最终输出,我们仍然必须对其进行测试,因为在所有情况下都会评估表达式的每个部分。

另一种方法是通过 VB 代码。

转到报告属性 -> 代码

粘贴以下内容

Public Function fdivide (Byval a As Decimal,Byval b As Decimal, Byval c As Decimal) As Decimal
'  Fix for divide by zero problem in VB
' calculates  a/b  and either returns result or c if b = 0 


if b = 0 then 
    return c 
else 
    return a/b 
end if 

end function 

现在在要分割的文本框上,只需像这样调用此函数即可:

=Code.fdivide(Fields!numerator.value, Fields!denominator.value,0) 

代码不言自明。可以重复使用而不必担心嵌套的 IFF 语句。