多層次報表是很常見的報表形式,如分組報表和主子報表。其中的關聯運算(組與明細,主表和子表),由于有層次而不能直接在資料庫中完成,需要在報表端完成。但報表端一般隻用采用排序和周遊的方法實作關聯,性能較差。利用潤乾集算報表的層次資料集則可以在資料源計算過程中就完成關聯計算,并且有層次的結果集直接傳送給報表呈現,在關聯計算中充分利用集算器的高效算法,進而達到優化性能的目标。
本文通過一個主子報表的執行個體來了解一下層次資料集的使用方法和效果。
報表描述
使用訂單表和訂單明細表,查詢每個訂單詳情以及該訂單下的訂單明細,報表格式如下:

環境及資料描述
測試機型:Dell Inspiron 3420
CPU:Intel Core i5-3210M @2.50GHz *4
RAM:4G
HDD:西數WDC(500G 5400轉/分)
作業系統:Win7(X64) SP1
JDK:1.6
資料庫:hsqldb
集算報表版本:5.0
表資料
實作步驟
編寫計算腳本
首先使用集算報表内置的集算器(專門用于資料計算,為報表提供資料源支援的工具)編寫計算腳本(orders.dfx),完成資料計算并傳回層次資料集。
A1:連接配接資料源;
A2-A3:分别查詢訂單和訂單明細表資料;
A4:根據訂單編号關聯訂單和訂單明細表;
A5:報表傳回訂單編号不為空的結果集。
編制報表
建立報表模闆後,資料集選擇“集算器”,在資料集編輯視窗指定上述編輯好的dfx檔案,完成資料集建立。
報表中層次資料集效果
設定報表模闆表達式:
不同于在報表中關聯,使用層次資料集可通過集算腳本傳回的一個結果集完成主子報表的制作,進而獲得了更高的性能,下面是在報表中直接關聯實作方式:
不使用層次資料集實作
資料集
ds1: select 訂單ID,訂單ID 訂單編号,發貨日期,到貨日期,客戶ID,貨主名稱,運貨商,運貨費,貨主城市 from 訂單
ds2: select * from 訂單明細
報表模闆
實作效果
這裡比較使用層次資料集前(報表中關聯)後的時間開銷,下表運作結果資料機關為:秒。