2013-06-21 14 views
1

我做了一個SSRS報告,其中有一個文本字段參數,用戶將輸入逗號分隔的字符串值列表。該列表將被饋送到報告的數據集中的SQL查詢中,該數據集具有:...(@myCSVParam)中的WHERE TheField。使用SSRS報告傳遞一個參數值是一個csv列表到SQL數據集

如果我從字段傳入一個值,它可以工作,但是如果我從字段中傳遞一個csv列表,那麼報告就會說這樣的值不存在。

我認爲它將csv列表視爲單個值,因此沒有數據返回。

如何轉換該csv列表並轉換爲SQL IN篩選器的可用參數?

+0

嘗試過'IN'語句嗎? – siri

+0

這就是我在SQL查詢中使用的內容。 – user1013388

回答

0

聽起來像@myCSVParam是一個單值字符串參數。因此,SSRS將在SQL語句中使用它時引用它。因此,對於一個值,您得到'First'(這是一個匹配項),但對於多個值,您將得到'First, Second, Third'(即一個不匹配任何值的大值)而不是'First', 'Second', 'Third'(即,包含三個單獨值的列表)這就是你所追求的。

你有兩個選擇:

  • 使用多值參數,這自然做了你什麼。這是最好的選擇,如果用戶可以從列表中選擇值
  • 手動用逗號引述更換逗號創建列表,像這樣:

    =替換(參數myCSVParam.Value「」 「‘’」)

2

我正在尋找一種方式來做到這一點的今天,有很多這需要建立一個存儲過程來處理這個建議,但我發現這個解決方案是有點一團糟。我終於想出了我自己的,非常簡單的解決方案。

因此,可以說你希望用戶能夠在一個單一的文本框中輸入多個銷售訂單,以逗號分隔,例如:61JF073, 61SW073, 61SW074

我的第一個報告參數被命名爲「OrderNo」,說明「訂單Nos(逗號分隔)「。數據類型=「文本」,沒有任何檢查。

我的第二個參數是從第一個參數中取出列表並創建一個「多值」列表,您可以在SQL查詢中使用該列表。

第二個參數:Name =「OrderNos」,type =「Text」。 「允許多個值」被選中。參數可見性=「內部」(用戶不需要看到這一點)。 可用值=無 默認值=指定值 添加的價值:我使用的是「替換」功能刪除所有的空格,因爲用戶可以將影響輸出的逗號後面輸入空格 =Split(Replace(Parameters!OrderNo.Value," ",""),",")

現在你的SQL查詢可以包含你的「IN」子句來過濾結果。

SELECT OrderNo, SalesID, SalesName FROM SalesOrders WHERE OrderNo IN (@OrderNos)

的數據將在SQL服務器,而不是在SSRS報告,該報告是從應用濾波器之前檢索整個表保存SSRS報告優選的方法進行過濾。您只想檢索報告所需的數據。

我希望這有助於我,因爲我的銷售訂單表有成千上萬的行。的

1

代替2個參數,我用類似=分裂(參數!Category.Value, 「」)

,並設置在SQL [在(@Category)]組中使用的參數到那個表達。 唯一的缺點是它被掩埋在數據集參數選項卡中。

我最終將它更改爲= split(替換(Parameters!Category.Value,「」,「」),「,」)像你一樣:)如果你寧願有1個參數並且有參數等於一個表達式,或者有2個參數,並且通過另一個參數傳遞1。

我不能發表圖片,但我的是這裏http://i.stack.imgur.com/rhnWt.png

+0

圖片是有幫助的。 – Rama

0

您可以嘗試爲以下查詢:

WHERE TheField中(選擇REGEXP_SUBSTR(@myCSVParamt, '[^,] +',1 ,級別)A FROM DUAL CONNECT BY regexp_substr(@myCSVParam,'[^,] +',1,level)不爲空)

希望它有幫助!

相關問題