如何讓Reporting Services的報表依照特定筆數進行分頁
一般我們在SQL Server Reporting Services(以下簡稱SSRS)中,會利用資料表和清單等控制項來呈現資料集的資料,用這些控制項有個特點,在Render報表時會把資料一筆一筆的由上往下呈現,超過報表長度時自動移至下一頁來顯示,若希望每隔特定筆數,例如2筆、3筆、5筆來顯示該如何做,方法有很多種,本文將探討透過T-SQL先把資料在SQL SERVER上做好分群,SSRS直接依照分群結果來做資料列群組,即可達到上述效果,說明如下:
本文以Northwind資料庫的Customers資料表為例,首先先撰寫一T-SQL來對Customers做分群。
- 以下程式碼示範透過Stored Procedure將Customers資料表依照@Count筆數來分群:
1: IF exists (SELECT * FROM sys.objects where type = 'P' and name = 'usp_GroupingCustomer')2: DROP PROCEDURE usp_GroupingCustomer3: GO4:
5: CREATE PROCEDURE usp_GroupingCustomer6: (
7: @COUNT int8: )
9: AS10: BEGIN11: SET NOCOUNT ON12: ;WITH cte113: AS14: (
15: --根據行號來對資料進行分組
16: SELECT ROW_NUMBER() OVER (PARTITION BY RowNum % @COUNT ORDER BY CustomerId)17: AS GroupNum ,*18: FROM (19: --根據CustomerID來排序以產生行號
20: SELECT ROW_NUMBER() OVER (ORDER BY CustomerID) AS RowNum21: ,*
22: FROM Customers23: ) t
24: )
25:
26: SELECT * FROM cte127: ORDER BY GroupNum,CustomerID28: END29: GO
- 以下程式碼示範呼叫usp_GroupingCustomer來將資料分成每個群組3筆資料:
exec usp_GroupingCustomer 3
執行結果如下:
接著開啟SQL Server Business Intelligence Development Studio(BIDS)來建立報表,於資料集的部分選擇預存程序,並選擇上述步驟建立的usp_GroupingCustomer(如下圖)。
從工具箱拉一個清單到報表主體(下圖粉紅色部分),設定以GroupNum為資料列群組,並將分頁符號中的在群組的每個執行個體之間打勾。
再從工具箱拉一個清單到上一步驟粉紅色的清單之中(下圖藍色部分),並拉幾個資料集中的資料行到藍色清單裡。
最後就可以切換到預覽畫面檢視報表是否可以依照特定筆數來分頁,下圖為依照每頁3筆資料的需求來呈現報表的結果,紅色部分為頁碼以及每頁應該顯示的GroupNum。
下圖為依照每頁5筆資料的需求來呈現報表。
【參考資料】
- 如何設定REPORTING SERVICES報表每幾筆就分頁,LOLOTA,不負責實驗室