当参数为空时,索引在 SSRS 中的数组边界之外

index was outside bounds of array in SSRS when parameter come as blank

我正在研究 SSRS report,其中 user!userid 变量与 3 pipe delimited values

一起出现

例如:

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.

期间低于错误

index was outside bounds of array for the parameter.

我尝试了以下使用 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 吗?

我最初认为这会起作用

此代码失败

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

当 Switch 在第一个 True 结果时停止评估,但出于某种原因我仍然遇到错误。我不确定为什么会发生这种情况,但我通过编写一个函数来完成这项工作来解决这个问题。

这确实有效

我将此代码添加到报告中 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 块中的代码即可。