【发布时间】:2014-06-10 14:21:06
【问题描述】:
设置
我有一个将所有大写值转换为正确大小写的表达式。一些值前面有一个额外的连字符,我想要在那之前的所有内容。遗憾的是,在没有连字符的实例上出现LEFT(INStr 表达式错误。
=IIF(
INstr(Fields!Introducer_Title.Value, "-") = 0,
StrConv(Fields!Introducer_Title.Value,vbStrConv.ProperCase),
"nope"
)
上面的工作很好:如果没有连字符,则字符串转换为正确的大小写,否则它只是说不。
问题
=IIF(
INstr(Fields!Introducer_Title.Value, "-") = 0,
StrConv(Fields!Introducer_Title.Value,vbStrConv.ProperCase),
Left(StrConv(Fields!Introducer_Title.Value, VbStrConv.ProperCase), INstr(StrConv(Fields!Introducer_Title.Value, VbStrConv.ProperCase), "-")-1)
)
如果值中有连字符,则上述方法会在适当的情况下返回它之前的文本,但现在没有连字符的值会出错。逻辑没有改变。
当我用嵌套表达式替换否则“nope”时,就好像 IIF(A=TRUE,This,That) 以某种方式转换为 always 而不是这样做。
错误只是#Error,没有其他信息。
我是否遗漏了一些明显的东西?我觉得这是 SSRS 的一些怪癖。
更新
我越看越奇怪:
- 将函数包装在
ISERROR中会在错误行上产生错误,而不是返回true。 - 使用
InStrRev函数返回与InStr函数相同的值,即使第一行中的连字符的位置不在中间(我检查了Excel 中的值)
【问题讨论】:
标签: reporting-services logic ssrs-2008-r2 iif