2017-07-06 61 views
0

我正在爲SSRS設計一個報告。我希望請求報告的用戶在生成報告時能夠從預先定義的選擇中指定應該在報告的Tablix中顯示的一些值。在tablix行中顯示多值參數的選定值

因此,我創建了一個多值參數,並使用我希望用戶可以從中進行選擇的選項填充可用值,並且如預期的那樣,生成報告時用戶可以選擇一個或更多這些值。

但是,我現在要做的是在報表中包含一個tablix,並在用戶選擇的多值參數中爲每個值顯示一行,並在該行的第一個單元格中顯示該值。

如果這些值來自數據表,這顯然很容易。我還找到了如何使用JOIN函數在單個文本框中顯示所有選定參數值的答案,但我不想這麼做。

我能想到的唯一解決方案是手動複製tablix中多值參數中可用值的列表,並將tablix的每一行的可見性鏈接到相應值的選定狀態多值參數,但這不是很優雅,並增加了維護報告定義所需的工作量。

有關如何做到這一點的任何想法?我知道參數中的選定值只是形成一個數組,但我看不到如何將Tablix綁定到不在數據集中的任何數據,或者如何根據參數值創建數據集。

+0

= join(parameters!parametername。值,「,」) – Kostya

+0

就我所知,這隻會創建一個包含參數中所選值的單個字符串。這不是我所要求的。 –

回答

1

考慮到來自數據集的Tablix來源,我做了一些實驗以瞭解如何爲您創建低維護解決方案。

選項1:創建一個具有硬編碼選項的數據集以匹配您的多值參數並選擇這些選項在參數中存在的位置。

例子:

SELECT val 
    FROM (
     SELECT 'opt1' as val 
     UNION SELECT 'opt2' 
     UNION SELECT 'opt3' 
     UNION SELECT 'opt4') a 
    WHERE val IN (@Param) 

思考:更容易維護比在表上的知名度,但在報告中仍然是兩個硬編碼的地方。

選項2:創建一個選擇多值參數和通過將各值拆分它的數據集。這是我的第一個想法,但我遇到了一些問題,以確定如何在沒有語法錯誤的情況下真正選擇多值。我想出了一種方法,在報告中創建一個已刪除的字符串,並將該字符串解析爲數據集中的行:

步驟1)在數據集屬性中的參數選項卡上,將多個值連同JOIN表達式 enter image description here

步驟2)創建一個使用新的SQL Server 2016函數string_split的簡單查詢。請注意,使用此函數(SQL 2016+)的數據庫兼容性級別必須爲130或更高。如果這不是你的場景,你可以在Stack Overflow上找到許多字符串分割函數來實現相同的功能。
enter image description here

有趣的問題!

+0

偉大的工作,謝謝!我正在考慮你的第二個解決方案,我更喜歡這個方案,但沒有像你這樣做過。再次感謝! –