品名下每六筆資料就進行換頁,換頁的部分我已經有爬過 Google 上面的文章搞定了,但問題出在不滿六筆該如何把它補滿六筆以下文章練習:
- 每頁要補滿 10 筆資料,沒有資料也要把資料空間顯示出來
- 設定群組檔頭,讓每一頁都可以顯示檔頭資訊
利用 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 筆資料
- 重點簡易說明(上述語法 Highlight 第七行)
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 報表配置
延續 [SSRS] 強迫分頁 報表,只把資料顯示的 Group10 改為 GroupNO 和改報表名稱而以
設定群組檔頭
在 [SSRS] 強迫分頁 內,有注意到群組檔頭只會出現一次,後面也頁數就沒有出現,在這篇進行設定讓它出現
開啟群組進階模式
點選資料列群組 => 靜態,點選靜態時 SSRS 設計畫面會有相對顯示,表示現在在設定那個檔頭,更改 KeepTogether = True、KeeyWithGroup = After 和 RepeatOnNewPage = True
KeepWithGroup 選項 MSDN 說明:
- None:選取這個選項可指出沒有將此成員與所選取資料列群組的成員保持在一起的喜好設定。
- Before:選取這個選項可將此成員與先前群組的成員保持在一起。 您可以將此選項用於群組頁尾資料列。
- After:選取這個選項可將此成員與後續群組的成員保持在一起。 您可以將此選項用於群組頁首資料列。
報表預覽
- 設定群組檔頭"前"報表
下圖為 Page 2,DepID 檔頭就不見啦
下圖為 Page 3,Sales 部門的 Page 1,沒有 DepID 檔頭資訊、可見 GroupNO 等檔頭資訊
下圖為 Page 4,Sales 部門的 Page2,DepID 檔頭和 GroupNO 檔頭等相關資訊都不見啦
- 設定群組檔頭前報表
下圖為 Page 7,Purchasing 部門的 Page 2,可見 GroupNO 資訊依然存在
從上面的圖片也可以發現到,該 Page 不足 10 筆資料的話,仍會顯示 10 筆資料
- 參考資料
- 論壇問題出處
- 與群組一起顯示頁首和頁尾
沒有留言:
張貼留言