2014-03-03 23 views
2

我面臨的問題很簡單,但沒有得到解決方案。 我有我的ssrs報告中的文本框,我傳遞值「1; prashant」或null。現在,如果我將值「1; prashant」傳遞給文本框,那麼文本框應該只顯示「prashant」,如果我沒有傳遞任何東西,那麼它應該是空白的。檢查SSRS報告中的文本框中的空值和拆分值

I have tried following IIF condition: 
=IIF(IsNothing(FieldS!WIAPPORVER.Value),"",Split(Fields!WIAPPORVER.Value,"#")(1).ToString()) 

但是,我上面的代碼給出了錯誤[「#error」顯示在文本框]如果我傳遞空白值。

請讓我知道,我在這裏錯了。 感謝

回答

0

您正在依靠IIf表達式短路,但SSRS IIf表達式不會短路 - 表達式將針對所有行嘗試並計算出Split(Fields!WIAPPORVER.Value,"#")(1).ToString(),並在此值不存在時失敗。

你可以通過使用文本表達式得到這個結果,它不會出現這個錯誤。

測試數據:

enter image description here

和一個簡單的表格:

enter image description here

我已經添加的列與兩個現有的表達和一種新的表達:

=Right(Fields!WIAPPORVER.Value, Len(Fields!WIAPPORVER.Value) - InStr(Fields!WIAPPORVER.Value, "#")) 

Th是新的表達方式適用於空值,空字符串和字符串無定界符存在:

enter image description here

+0

很好的解釋,它爲我工作。 t –

+0

該解決方案依賴完全拋棄SSRS問題與另一個完全不同的工具,即SQL。在90%的時間內不可能實現,而當SSRS無法進行適當的短路時,可以放棄另一個工具而非常麻煩。 – user3285866

+0

嗨,@ user3285866。我不明白你的評論,對不起。建議的解決方案是SSRS表達式,而不是SQL;僅包含SQL以顯示如何生成樣本數據集。 –

1

有這樣做的可能是更好的方法,但是這是我的頭的時候趕上了:

=IIF(
    IsNothing(Fields!WIAPPROVER.Value) 
    ,"" 
    ,Right(Fields!WIAPPROVER.Value,Len(Fields!WIAPPROVER.Value) -InStr(Fields!WIAPPROVER.Value,";")) 
) 

我相信SSRS正試圖計算在運行時,報告一切,所以在你的情況下,它仍然試圖從數組中獲取索引1,儘管它沒有任何內容,並且它崩潰了。

編輯:將參數更改爲字段。我創建了一個參數來重建問題在我身邊。

1

剛拿到拆分出來的iif的。然後在你的iif,如果領域是沒有什麼創建一個字符串,當分裂將返回「」

=Split(IIF(IsNothing(FieldS!WIAPPORVER.Value),"#", Fields!WIAPPORVER.Value),"#")(1)