1

我尝试使用IIFSwitch大小写,但是当出现除以零错误时,我无法处理 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%
#错误

4

2 回答 2

8

IIF 函数的问题在于它是一个函数而不是语言构造。这意味着它在将参数传递给函数之前评估这两个参数。因此,如果您有除以零错误,这将被评估并导致一个#ERROR条件,即使看起来由于语句的布尔条件而不应执行该代码IIF

此问题有两种解决方法:

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

然后在您的报告中将其用于值表达式而不是 IIF 或 SWITCH:

=Code.SafeDivide(ReportItems!Textbox56.Value, ReportItems!Textbox54.Value)

并使用格式字符串将零显示为“N/A”:

#,##0.00;-#,##0.00;N/A
于 2013-04-01T23:23:06.933 回答
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) )

永不为零的条件

于 2018-11-01T08:16:12.890 回答