当参数为空时,索引在 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
块中的代码即可。
我正在研究 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
块中的代码即可。