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

SSRS IIF Statement showing #Error when value is non numeric

我有一个值,可以是小数或字符串。样本

0.41
0.91
"0 / 2"
0.75

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

这正确地 returns 将小数格式化为百分比,但字符串仅显示 #Error。我试过在 IIF 语句中弄乱各种逻辑并改用 Switch。但是,小数始终正确显示为百分比,而字符串仅显示 #Error.

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

IIF() 是 SQL 服务器中的一个函数。因此,它 returns 一个值,其类型由其参数指定。如 documentation 中所述:

Returns the data type with the highest precedence from the types in true_value and false_value. For more information, see Data Type Precedence (Transact-SQL).

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

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

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

试试 Val 函数。它的好处是在传递非数字数据时不会抛出错误——它只是尽最大努力将其转换为数字。

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