索引在 SSRS 中超出了数组的范围

Index was outside the bounds of the array in SSRS

我有两个参数,比方说 P1 和 P2。我用于 P2 的示例表达式是

IIF(P1.Label="string", "null" ,Split(P1.Label," ").GetValue(0))

当条件为假时,拆分表达式工作正常。但如果条件为真,我会收到 'Index was outside the bounds of the array' 错误。如果条件为真,我需要将值“null”作为 varchar 类型传递。

有人可以就此提出建议吗?

IIF 函数的问题在于它是一个函数,而不是语言结构。这意味着它在将参数传递给函数之前 计算两个参数 。因此,如果您尝试对无法拆分的参数执行 Split,您仍然会收到 'Index was outside the bounds of the array' 错误,即使看起来该代码由于以下原因不应执行IIF 语句的布尔条件。

解决此问题的最佳方法是在自定义代码中创建一个安全的字符串拆分器函数,您可以在其中使用真实的语言结构。此外,通过检查字符串是否包含 space 而不是检查特殊字符串来检查字符串是否可拆分:

Public Function SafeSplit(ByVal SplitThis As String) As String
    If InStr(SplitThis, " ") Then
      Return Split(SplitThis, " ")(0)
    End If
    Return "null"
End Function

然后在您的报告中使用它代替 IIF 的值表达式:

=Code.SafeSplit(Parameters!P1.Label)