1 reporting-services ssrs-2008 ssrs-2008-r2
我尝试使用IIF和Switchcase,但是当出现零除错误时我无法处理N/A情况.例如:
=switch(
ReportItems!Textbox54.Value = 0, "N/A",
ReportItems!Textbox54.Value <> 0, ((ReportItems!Textbox56.Value) / (ReportItems!Textbox54.Value)))
Run Code Online (Sandbox Code Playgroud)
我得到的是N/A:
ReportItems!Textbox54.Value <> 0, ((ReportItems!Textbox56.Value) / (ReportItems!Textbox54.Value)
Run Code Online (Sandbox Code Playgroud)
但是如果添加这个条件我收到错误?
我正在使用SSRS 2008 R2.
输出:
19.47%
13.85%
#Error
与IIF函数的问题是,它是一个功能不是语言结构.这意味着它在将参数传递给函数之前评估两个参数.因此,如果你有一个除以零的错误,#ERROR那么即使看起来由于IIF语句的布尔条件而不应该执行代码,这也会得到评估并导致一个条件.
这个问题有两种解决方法:
IIF旁路
基本上做两个IIF函数调用,你不会得到零错误:
=IIF(ReportItems!Textbox54.Value <> 0,
ReportItems!Textbox56.Value / IIF(ReportItems!Textbox54.Value = 0, 1, ReportItems!Textbox54.Value),
"N/A")
Run Code Online (Sandbox Code Playgroud)
因此,在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
Run Code Online (Sandbox Code Playgroud)
然后在报表中将其用于Value表达式而不是IIF或SWITCH:
=Code.SafeDivide(ReportItems!Textbox56.Value, ReportItems!Textbox54.Value)
Run Code Online (Sandbox Code Playgroud)
并使用格式字符串将零显示为"N/A":
#,##0.00;-#,##0.00;N/A
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1058 次 |
| 最近记录: |