星期三, 9月 23, 2026

[SSRS] 巢狀清單

以前一直認為清單 (List) 內無法放置資料表 (Tablix),在報表設計階段雖然 Tablix 可以放進 List 內,但只要報表一執行就會出現錯誤
後來發現因為是 List 和 Tablix 資料列群組 (Row Group) 內預設有個明細資料 (Detail Row),因為兩個 Detail Row 才導致報表無法 Render
該筆記就是要把 List 內 Detail Row 轉為 Group Row 當成報表頭,List 內的 Tablix Detail Row 來呈現資料當成報表身,以此來呈現 AdventureWorks2025 內的訂單報表 (Master-Detail)

AsventureWorks2025 資料存取

只抓取兩筆訂單資料
SELECT
    soh.SalesOrderNumber,
    soh.OrderDate,
    sod.OrderQty,
    sod.UnitPrice,
    sod.LineTotal,
    p.ProductNumber,
    p.[Name] AS ProductName
FROM Sales.SalesOrderHeader AS soh
    INNER JOIN Sales.SalesOrderDetail AS sod ON soh.SalesOrderID = sod.SalesOrderID
    INNER JOIN Production.[Product] AS p ON sod.ProductID = p.ProductID
WHERE soh.SalesOrderID IN (43659 , 75123)
把 List Detail Row 轉為 Group Row

兩種方式有可以達到
  • 直接把 Detail Row 轉為 Group Row
  • 在 Detail Row 上建立父群組後,再把 Detail Row 刪除
該筆記內容是以前者為主,直接把 Detail Row 轉為 Group Row

Detail Row => 滑鼠右鍵 => 群組屬性
群組屬性 => 一般內進行修改
  • 名稱:修正為 grpSalesOrderNumber,建議要修改,避免還是維持 Detail 預設名稱,但實際是進行 Group 行為
  • 群組運算式:把 SalesOrderNumber 欄位加入群組對象
設定完成後就可以發現下圖紅箭頭變成 Group 圖示
報表設計
在 List 內的矩形 (Rectangle) 內設定換頁設定
報表執行結果

沒有留言:

張貼留言