如何讓Reporting Services的報表依照特定筆數進行分頁

如何讓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_GroupingCustomer
   3:  GO
   4:   
   5:  CREATE PROCEDURE usp_GroupingCustomer
   6:  (
   7:      @COUNT int
   8:  )
   9:  AS
  10:  BEGIN
  11:      SET NOCOUNT ON
  12:      ;WITH cte1 
  13:      AS
  14:      (
  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 RowNum
  21:                          ,*
  22:                          FROM Customers
  23:                      ) t
  24:      )
  25:   
  26:      SELECT * FROM cte1
  27:      ORDER BY GroupNum,CustomerID
  28:  END
  29:  GO
  • 以下程式碼示範呼叫usp_GroupingCustomer來將資料分成每個群組3筆資料:
exec usp_GroupingCustomer 3
執行結果如下:
image
接著開啟SQL Server Business Intelligence Development Studio(BIDS)來建立報表,於資料集的部分選擇預存程序,並選擇上述步驟建立的usp_GroupingCustomer(如下圖)。
image
從工具箱拉一個清單到報表主體(下圖粉紅色部分),設定以GroupNum為資料列群組,並將分頁符號中的在群組的每個執行個體之間打勾。

imageimage

再從工具箱拉一個清單到上一步驟粉紅色的清單之中(下圖藍色部分),並拉幾個資料集中的資料行到藍色清單裡。

image

最後就可以切換到預覽畫面檢視報表是否可以依照特定筆數來分頁,下圖為依照每頁3筆資料的需求來呈現報表的結果,紅色部分為頁碼以及每頁應該顯示的GroupNum。

imageimage

下圖為依照每頁5筆資料的需求來呈現報表。

image

【參考資料】