2012-10-19 172 views
1

嗨我需要你的意見,需要幫助SSRS分裂功能

1)我有一個動態的字符串,每次都會改變。

例如今天的字符串將是"ItemA,ItemB,ItemC",明天它只會是"itemA,ItemB"

2)我有一個有3列

3)的SSRS報告中,我想拆分此字符串"ItemA,ItemB,ItemC",想顯示SSRS表格中的3列拆分子。分隔符爲","

4)我用了

=Split("ItemA,ItemB,ItemC",",").GetValue(0) in the first column of the report 

=Split("ItemA,ItemB,ItemC",",").GetValue(1) in the second column of the report 

=Split("ItemA,ItemB,ItemC",",").GetValue(2) in the third column of the report 

5)的一切,直到我的字符串是"ItemA,ItemB,ItemC"工作正常(逗號),

但是當我的字符串會將TO "ItemA,ItemB"我看到"#Error"在第三欄。

我理解錯誤,對

=Split("ItemA,ItemB,ItemC",",").GetValue(2)我們沒有任何價值,因爲該字符串現在只有2分應用功能後,值。

有什麼辦法可以避免#Error在第三欄。

注:我必須在ssrs報告中強制使用3列。

我曾嘗試在第三列使用=Replace(Split("ItemA,ItemB",",").GetValue(2),"#Error","NULL"),但也不會奏效。

+0

你提的問題是很難與每一個閱讀換句話說,在ALLCAPS中的位,編號的位置不太合理,交互問題等等。如果你稍微編輯一下你的問題,回答它可能會更容易(也更愉快)。 – Jeroen

+0

如果只有兩個元素,您可以簡單地隱藏第三列。如果你在sql查詢中捕獲了這種情況,那麼會更好,然後顯示正確的列數。 – TTT

回答

1

這與使用IIF語句時的divide by zero issue類似。的問題是,IIF沒有一個表達式,它是帶有三個參數的函數:

IIF(Condition, ValueIfTrue, ValueIfFalse) 

因此,所有參數都被傳遞給函數,這導致錯誤之前評估,因爲錯誤的表達仍然是評價即使條件應該表示它不是。

我看不到一種方法來使用通常的解決方法,它解決了零除情況下的問題。我們需要的是一種沒有這個問題的真實語言。幸運的是,這是以自定義代碼的形式提供的。

執行以下操作:

  • 上沒有報表對象的報告表面的區域中右鍵單擊
  • 選擇報告屬性
  • 點擊代碼標籤
  • 插入以下代碼:

    Public Function ExtractCode(Combined As String, Position As Integer) As String 
        if (Split(Combined, ",").Length >= Position) Then 
         Return Split(Combined, ",").GetValue(Position-1) 
        Else 
         Return "" 
        End If 
    End Function 
    
  • 點擊確定d返回報告

  • 您希望在表達細胞右鍵單擊,然後單擊表達
  • 插入下面的表達式:

    =Code.ExtractCode(Fields!Combo.Value, 3) 
    

值3是「列「,你想從Combo字段中提取,以獲得第二個」列「,你將使用2.如果在該位置沒有列,則返回一個空字符串。

0

你可以在第三列的可見性改變爲隱藏,如果名稱返回錯誤

0

您可以附加一個虛設的元素,然後分裂:

yourText = "ItemA,ItemB" 

item0 = Split(yourText & ",", ",").GetValue(0) 
item1 = Split(yourText & ",", ",").GetValue(1) 
item2 = Split(yourText & ",", ",").GetValue(2) 

item0 = ItemA 
item1 = ItemB 
item2 =