如何删除公式中的 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 语句。
我正在写一份报告,其中有一列计算销售额的年复一年。我遇到的问题是我们没有任何今年年初之前的销售历史记录。我正在使用下面的公式来计算百分比变化,但由于分母为零而出现 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 语句。