相當一個老問題,但我最近偶然發現了類似的問題。 雖然SSRS不允許您在矩陣中的動態列上添加交互式排序,但您可以模擬類似的行爲。我已經想出了一個方法,該方法需要報告根據期望的列排序(通過去報告操作)。
我將使用更復雜的示例來展示此解決方案的全部功能。 想象一下,一個網上書店,它將按照我的示例(專欄)中的Fiction/NonFiction類別,顯示他們的報告顯示他們的客戶(行),書籍數量(價值)和圖書(價值)總價值。當然,他們希望看到他們最好的客戶,所以排序會下降。我們正在從數據庫中獲取 示例數據:
UserID Columns BooksCount BooksValue
AliBaba Fiction 2 25.96
AliBaba NonFiction 4 112.00
ThomasJefferson Fiction 3 36.83
ThomasJefferson NonFiction 1 46.80
BillCosby Fiction 10 536.47
BillCosby NonFiction 2 26.87
報告將是這樣的:
[Columns]
Books Count Books Value
[UserID] Values Values
我想的報告「叢書計數」或「能夠排序書籍價值「爲任何專欄。下面是要遵循的步驟:
您需要添加參數將存儲列的名稱進行排序 - @SortColumn
和度量名稱(計數或值)進行排序 - @SortMetric
。
轉到「Books Count」文本框和添加操作「轉到報告」指定相同的報告。在基礎數據集中添加@SortColumn
參數,其值爲[Columns]
字段。將值設置爲「BooksCount」添加@SortMetric
參數。類似於「書籍價值」文本框。
可以用以下公式調整列標題文本,這將顯示在該列中的數據進行排序用戶: = IIf(Parameters!SortColumn.Value=Fields!Columns.Value And Parameters!SortMetric.Value = "BooksCount" ," ^","")
這對「書計數」,你可以添加「圖書數量」類似
最後發生在數據庫站點上的魔術。源表名爲[Sales]
。除了排序之外,如果數據集較大,下面的代碼允許只選擇前N行。 您可以使用此代碼創建數據集或更好地創建存儲過程。並且加入報告參數和數據集參數。
DECLARE @TopN INT = 50
;WITH Users_Sorted AS
(
SELECT
UserID
,ROW_NUMBER() OVER (ORDER BY
CASE @SortMetric
WHEN 'BooksCount' THEN Sales.BooksCount
WHEN 'BooksValue' THEN Sales.BooksValue
END DESC) AS ROWNO
FROM Sales
WHERE
Sales.Columns = @SortColumn
)
,Sales_MAIN AS
(
SELECT
Sales.UserID
,Sales.Columns
,Sales.BooksCount
,Sales.BooksValue
,ISNULL(Users_Sorted.ROWNO,
ROW_NUMBER() OVER (PARTITION BY Sales.Columns ORDER BY Sales.UserID ASC)
) AS ROWNO
FROM Sales
LEFT JOIN Users_Sorted ON Sales.UserID = Users_Sorted.UserID
)
SELECT * FROM Sales_MAIN WHERE ROWNO <= @TopN ORDER BY ROWNO
感謝Lethajd,這個我已經知道了,這徹底我們提供交互式排序僅在矩陣組,但是我希望有一個交互式動態列排序。 – Wumar
爲什麼你開始使用動態列?在你的例子中,列的輸出數似乎是固定的,爲什麼不把它們定義爲這樣,以便你可以做你的排序呢?如果你是動態的,我不認爲這是可以做到的。 – lethaljd
輸出列不固定,這就是我們嘗試使用矩陣的原因。在tablix中,交互式排序只需點擊幾下。 – Wumar