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

ekn*_*sky 5 sql t-sql reporting-services ssrs-2016

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

0.41
0.91
"0 / 2"
0.75
Run Code Online (Sandbox Code Playgroud)

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

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

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

Chr*_*tta 6

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

试试这个Val功能。它的好处是在传递非数字数据时不会抛出错误 - 它只是尽其所能将其转换为数字。

=IIF(IsNumeric(Fields!currentRate.Value), Format(Val(Fields!currentRate.Value), "P2"), Fields!currentRate.Value)
Run Code Online (Sandbox Code Playgroud)