星期三, 1月 28, 2015

[SSRS] 分頁固定筆數

延續 [SSRS] 強迫分頁 這篇文章的問題,論壇問題出處
品名下每六筆資料就進行換頁,換頁的部分我已經有爬過 Google 上面的文章搞定了,但問題出在不滿六筆該如何把它補滿六筆
以下文章練習:
  1. 每頁要補滿 10 筆資料,沒有資料也要把資料空間顯示出來
  2. 設定群組檔頭,讓每一頁都可以顯示檔頭資訊
T-SQL 撰寫

利用 CTE 跑出每個部門每頁 10 筆資料 Table,EX:部門有 12 位,該部門就要有 20 筆資料存在
;
WITH CTE AS
(
    SELECT 
       D.DepartmentID AS DepID , 
       1 AS StartNO ,
       (((COUNT(D.DepartmentID) - 1) / 10) + 1) * 10 AS EndNO
    FROM Person.Person AS P
        JOIN HumanResources.EmployeeDepartmentHistory AS H ON P.BusinessEntityID = H.BusinessEntityID
        JOIN HumanResources.Department AS D ON H.DepartmentID = D.DepartmentID
    WHERE H.EndDate IS NULL
    GROUP BY D.DepartmentID
    UNION ALL
    SELECT 
        DepID ,
        StartNO + 1 ,
        EndNO
    FROM CTE 
    WHERE StartNO < EndNO
)
SELECT 
    T1.DepID ,
    T2.DepName,
    ((T1.StartNO - 1) / 10 ) + 1 AS Group10 ,
    T1.StartNO AS GroupNO,
    T2.LastName,
    T2.FirstName,
    T2.EmailAddress
FROM CTE AS T1
    LEFT JOIN
        (
            SELECT 
                D.DepartmentID AS DepID , 
                D.Name AS DepName , 
                ROW_NUMBER() OVER (PARTITION BY D.DepartmentID ORDER BY D.DepartmentID,P.LastName) AS GroupNO,
                P.LastName , 
                P.FirstName , 
                A.EmailAddress
            FROM Person.Person AS P
                JOIN Person.EmailAddress AS A ON P.BusinessEntityID = A.BusinessEntityID
                JOIN HumanResources.EmployeeDepartmentHistory AS H ON P.BusinessEntityID = H.BusinessEntityID
                JOIN HumanResources.Department AS D ON H.DepartmentID = D.DepartmentID
            WHERE H.EndDate IS NULL
        ) AS T2 ON T1.DepID = T2.DepID 
                   AND T1.StartNO = T2.GroupNO
ORDER BY T1.DepID , T1.StartNO
OPTION (maxrecursion 0)

下圖可見,雖然 Purchasing 部門只有 12 筆資料,但經過處理會產生 20 筆資料

[SSRS] 分頁固定筆數-1

  • 重點簡易說明(上述語法 Highlight 第七行)
根據部門人數找出下一個 10 倍數群組,EX:5 => 10、10 => 10、12 => 20
SELECT
       D.DepartmentID AS [部門 ID] , 
       COUNT(D.DepartmentID) AS [部門人數],
       (((COUNT(D.DepartmentID) - 1) / 10) + 1) * 10 AS [預計產生資料]
    FROM Person.Person AS P
        JOIN HumanResources.EmployeeDepartmentHistory AS H ON P.BusinessEntityID = H.BusinessEntityID
        JOIN HumanResources.Department AS D ON H.DepartmentID = D.DepartmentID
    WHERE H.EndDate IS NULL
    GROUP BY D.DepartmentID
[SSRS] 分頁固定筆數-2

SSRS 報表配置

延續 [SSRS] 強迫分頁 報表,只把資料顯示的 Group10 改為 GroupNO 和改報表名稱而以

[SSRS] 分頁固定筆數-3

設定群組檔頭

[SSRS] 強迫分頁 內,有注意到群組檔頭只會出現一次,後面也頁數就沒有出現,在這篇進行設定讓它出現

開啟群組進階模式

[SSRS] 分頁固定筆數-4

[SSRS] 分頁固定筆數-5
點選資料列群組 => 靜態,點選靜態時 SSRS 設計畫面會有相對顯示,表示現在在設定那個檔頭,更改 KeepTogether = True、KeeyWithGroup = After 和 RepeatOnNewPage = True

KeepWithGroup 選項 MSDN 說明:
  • None:選取這個選項可指出沒有將此成員與所選取資料列群組的成員保持在一起的喜好設定。
  • Before:選取這個選項可將此成員與先前群組的成員保持在一起。 您可以將此選項用於群組頁尾資料列。
  • After:選取這個選項可將此成員與後續群組的成員保持在一起。 您可以將此選項用於群組頁首資料列。

[SSRS] 分頁固定筆數-6

報表預覽
  • 設定群組檔頭"前"報表
下圖為 Page 1,可見 DepID 檔頭

[SSRS] 分頁固定筆數-7

下圖為 Page 2,DepID 檔頭就不見啦

[SSRS] 分頁固定筆數-8

下圖為 Page 3,Sales 部門的 Page 1,沒有 DepID 檔頭資訊、可見 GroupNO 等檔頭資訊

[SSRS] 分頁固定筆數-9

下圖為 Page 4,Sales 部門的 Page2,DepID 檔頭和 GroupNO 檔頭等相關資訊都不見啦

[SSRS] 分頁固定筆數-10
  • 設定群組檔頭前報表
下圖為 Page 6,Purchasing 部門的 Page 1,可見 GroupNO 等檔頭資訊

[SSRS] 分頁固定筆數-11

下圖為 Page 7,Purchasing 部門的 Page 2,可見 GroupNO 資訊依然存在

[SSRS] 分頁固定筆數-12

從上面的圖片也可以發現到,該 Page 不足 10 筆資料的話,仍會顯示 10 筆資料

沒有留言:

張貼留言