我面临非常简单的问题,但没有得到解决方案。 我在我的ssrs报告中有文本框,我传递值“1; prashant”或null。现在,如果我将值“1; prashant”传递给文本框,那么textbox应该只显示“prashant”,如果我没有传递任何内容,那么它应该是空白的。
I have tried following IIF condition:
=IIF(IsNothing(FieldS!WIAPPORVER.Value),"",Split(Fields!WIAPPORVER.Value,"#")(1).ToString())
但是,如果我传递空白值,我上面的代码会给出错误[“#error”在文本框中显示]。
请告诉我,我错在哪里。 感谢
答案 0 :(得分:1)
可能有更好的方法可以做到这一点,但这是我当时提出的想法:
=IIF(
IsNothing(Fields!WIAPPROVER.Value)
,""
,Right(Fields!WIAPPROVER.Value,Len(Fields!WIAPPROVER.Value) -InStr(Fields!WIAPPROVER.Value,";"))
)
我相信SSRS正在尝试在运行时计算报表中的所有内容,因此在您的情况下,它仍在尝试从数组中获取索引1,即使其中没有任何内容也会崩溃。
编辑:将参数更改为字段。我创建了一个参数来重新解决我的问题。
答案 1 :(得分:1)
从iif
中分离出来。然后在你的iif
中,如果字段为空则创建一个字符串,当拆分时将返回""
=Split(IIF(IsNothing(FieldS!WIAPPORVER.Value),"#", Fields!WIAPPORVER.Value),"#")(1)
答案 2 :(得分:0)
您依赖于IIf
表达式短路,但SSRS IIf
表达式不会短路 - 表达式将尝试为所有行计算Split(Fields!WIAPPORVER.Value,"#")(1).ToString()
并在此值时失败不存在。
您可以使用文本表达式来解决此问题,但不会出现此错误。
使用测试数据:
一个简单的表格:
我添加了包含现有表达式和新表达式的列:
=Right(Fields!WIAPPORVER.Value, Len(Fields!WIAPPORVER.Value) - InStr(Fields!WIAPPORVER.Value, "#"))
这个新表达式适用于NULL值,空字符串和没有分隔符的字符串: