SSRS IIF语句显示值为非数字时的#Error

时间:2017-06-19 02:13:07

标签: sql tsql reporting-services ssrs-2016

我有一个十进制或字符串的值。样品

0.41
0.91
"0 / 2"
0.75

我目前的表情是 = IIF(IsNumeric(Fields!currentRate.Value),Format(CDBL(Fields!currentRate.Value)," P2"),Fields!currentRate.Value)

这会正确返回格式化为百分比的小数,但字符串仅显示#Error。我已尝试在IIF语句中使用各种逻辑并使用Switch代替。但是小数总是正确显示为百分比,而字符串仅显示#Error。

是否可以在同一列中同时显示数值和字符串值,同时保持数值的格式化?

3 个答案:

答案 0 :(得分:3)

该错误与CDbl函数在尝试将字符串的列转换为数字时抛出异常有关。是的,我知道您正在检查它是否是数字,但IIF不是语言结构,它是函数,作为一个函数,它在传递它们之前评估它的所有参数到功能。这意味着即使将丢弃一个True和False参数,它们也会被计算,当它在字符串上计算CDbl时会抛出错误。

尝试使用Val功能。它的好处是,当它传递非数字数据时不会抛出错误 - 它只是尽力将它转换为数字。

=IIF(IsNumeric(Fields!currentRate.Value), Format(Val(Fields!currentRate.Value), "P2"), Fields!currentRate.Value)

答案 1 :(得分:1)

IIF()是SQL Server中的一个函数。因此,它返回一个值,其类型由其参数指定。正如documentation

中所述
  

返回类型中具有最高优先级的数据类型   true_value和false_value。有关更多信息,请参阅数据类型   优先级(Transact-SQL)。

如果两个值中的一个是数字,则优先。假设两者都是数字。换句话说,SQL中的表达式只返回所有行的一种类型。

答案 2 :(得分:0)

对于偶然发现这个问题的其他人。将我的格式从使用CDBL更改为VAL可以使其正常工作。