我做了一個SSRS報告,其中有一個文本字段參數,用戶將輸入逗號分隔的字符串值列表。該列表將被饋送到報告的數據集中的SQL查詢中,該數據集具有:...(@myCSVParam)中的WHERE TheField。使用SSRS報告傳遞一個參數值是一個csv列表到SQL數據集
如果我從字段傳入一個值,它可以工作,但是如果我從字段中傳遞一個csv列表,那麼報告就會說這樣的值不存在。
我認爲它將csv列表視爲單個值,因此沒有數據返回。
如何轉換該csv列表並轉換爲SQL IN篩選器的可用參數?
我做了一個SSRS報告,其中有一個文本字段參數,用戶將輸入逗號分隔的字符串值列表。該列表將被饋送到報告的數據集中的SQL查詢中,該數據集具有:...(@myCSVParam)中的WHERE TheField。使用SSRS報告傳遞一個參數值是一個csv列表到SQL數據集
如果我從字段傳入一個值,它可以工作,但是如果我從字段中傳遞一個csv列表,那麼報告就會說這樣的值不存在。
我認爲它將csv列表視爲單個值,因此沒有數據返回。
如何轉換該csv列表並轉換爲SQL IN篩選器的可用參數?
聽起來像@myCSVParam
是一個單值字符串參數。因此,SSRS將在SQL語句中使用它時引用它。因此,對於一個值,您得到'First'
(這是一個匹配項),但對於多個值,您將得到'First, Second, Third'
(即一個不匹配任何值的大值)而不是'First', 'Second', 'Third'
(即,包含三個單獨值的列表)這就是你所追求的。
你有兩個選擇:
手動用逗號引述更換逗號創建列表,像這樣:
=替換(參數myCSVParam.Value「」 「‘’」)
我正在尋找一種方式來做到這一點的今天,有很多這需要建立一個存儲過程來處理這個建議,但我發現這個解決方案是有點一團糟。我終於想出了我自己的,非常簡單的解決方案。
因此,可以說你希望用戶能夠在一個單一的文本框中輸入多個銷售訂單,以逗號分隔,例如: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報告優選的方法進行過濾。您只想檢索報告所需的數據。
我希望這有助於我,因爲我的銷售訂單表有成千上萬的行。的
代替2個參數,我用類似=分裂(參數!Category.Value, 「」)
,並設置在SQL [在(@Category)]組中使用的參數到那個表達。 唯一的缺點是它被掩埋在數據集參數選項卡中。
我最終將它更改爲= split(替換(Parameters!Category.Value,「」,「」),「,」)像你一樣:)如果你寧願有1個參數並且有參數等於一個表達式,或者有2個參數,並且通過另一個參數傳遞1。
我不能發表圖片,但我的是這裏http://i.stack.imgur.com/rhnWt.png
圖片是有幫助的。 – Rama
您可以嘗試爲以下查詢:
WHERE TheField中(選擇REGEXP_SUBSTR(@myCSVParamt, '[^,] +',1 ,級別)A FROM DUAL CONNECT BY regexp_substr(@myCSVParam,'[^,] +',1,level)不爲空)
希望它有幫助!
嘗試過'IN'語句嗎? – siri
這就是我在SQL查詢中使用的內容。 – user1013388