我尝试使用IIF
和Switch
案例,但是当出现零除错误时,我无法处理N / A案例。例如:
=switch(
ReportItems!Textbox54.Value = 0, "N/A",
ReportItems!Textbox54.Value <> 0, ((ReportItems!Textbox56.Value) / (ReportItems!Textbox54.Value)))
我得到的是N / A:
ReportItems!Textbox54.Value <> 0, ((ReportItems!Textbox56.Value) / (ReportItems!Textbox54.Value)
但是如果添加这个条件我会收到错误吗?
我正在使用SSRS 2008 R2。
输出:
19.47%
13.85%
#错误
答案 0 :(得分:8)
IIF函数的问题在于它是函数而不是语言构造。这意味着在将参数传递给函数之前评估两个参数。因此,如果你有一个除以零的错误,那么这将被评估并导致#ERROR
条件,即使看起来由于IIF
语句的布尔条件而不应该执行该代码。 / p>
此问题有两种解决方法:
IIF绕过
基本上做两个IIF函数调用,你不会将零除错:
=IIF(ReportItems!Textbox54.Value <> 0,
ReportItems!Textbox56.Value / IIF(ReportItems!Textbox54.Value = 0, 1, ReportItems!Textbox54.Value),
"N/A")
所以,在ReportItems!Textbox54.Value为零的情况下,除以1,将结果抛出并使用N / A.
自定义代码
在自定义代码中创建一个安全除零函数,您可以使用真实语言结构。
Public Function SafeDivide(ByVal Numerator As Decimal, ByVal Denominator As Decimal) As Decimal
If Denominator = 0 Then
Return 0
End If
Return (Numerator / Denominator)
End Function
然后在报表中将其用于Value表达式而不是IIF或SWITCH:
=Code.SafeDivide(ReportItems!Textbox56.Value, ReportItems!Textbox54.Value)
并使用Format字符串将零显示为“N / A”:
#,##0.00;-#,##0.00;N/A
答案 1 :(得分:0)
尝试以下代码
=IIF(ReportItems!Textbox54.Value = 0,nothing, IIF(ReportItems!Textbox54.Value = 0,1,ReportItems!Textbox56.Value) / IIF(ReportItems!Textbox54.Value = 0,1,ReportItems!Textbox54.Value) )
从不零条件