2017-10-20 138 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塊只需編輯代碼。