2017-10-20 132 views
0

我上SSRS report工作,其中user!userid变量与3 pipe delimited values指数为SSRS阵列时参数来作为空白的外边界

例如未来:

ReportUser |500|100 

我使用以下表达式分裂值

=(Split(Parameters!QueryString.Value, "|")).GetValue(0) 
=(Split(Parameters!QueryString.Value, "|")).GetValue(1) 
=(Split(Parameters!QueryString.Value, "|")).GetValue(2) 

parameter即将与值以上的表达工作正常。但是,当有任何参数为blank时,我在report execution期间的错误低于下列值。

索引超出了参数数组的范围。

我尝试以下解决方法与IIF表达

=iif((Split(Parameters!QueryString.Value, "|")).GetValue(0)=NOTHING,0, 
     (Split(Parameters!QueryString.Value, "|")).GetValue(0)) 

=iif((Split(Parameters!QueryString.Value, "|")).GetValue(0)="",0, 
     (Split(Parameters!QueryString.Value, "|")).GetValue(0)) 

我仍得到相同的错误。有人可以帮助如何处理blank values这个表达式吗?

回答

1

我最初虽然这会工作

此代码失败

=SWITCH 
(
Split(Parameters!QueryString.Value, "|").Length <3, "", 
True, Split(Parameters!QueryString.Value, "|").GetValue(1) 
) 

由于开关停在第一个真正的结果,但由于某种原因,我仍然有一个错误评估。我不确定为什么会发生这种情况,但我通过编写函数来完成这项工作。

这确实工作

我将此代码添加到报告Code属性(大概可以变得更好,但我没有做任何VB.Net年)

Public Function GetSplitValue(inputString as String, delim as string, index as Integer) as String 

    Dim arr() AS String = Split(inputString, delim) 
    Dim result AS string 

    TRY 
     result = arr(index) 
    CATCH 
     result = "" 
    END TRY 

    RETURN result 

End Function 

你然后可以在文本框中使用类似的东西在你的表达式中调用它,或者你正在填充的任何东西。

=Code.GetSplitValue(Parameters!QueryString.Value,"|",0) 
=Code.GetSplitValue(Parameters!QueryString.Value,"|",1) 
=Code.GetSplitValue(Parameters!QueryString.Value,"|",2) 

如果你想比一个空字符串以外的东西,在CATCH块只需编辑代码。