程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 報表開發實例——動態多層次KPI鑽取報表(II)

報表開發實例——動態多層次KPI鑽取報表(II)

編輯:DB2教程

報表開發實例——動態多層次KPI鑽取報表(II)


報表開發實例——動態多層次KPI鑽取報表(I)中,我們說到了動態層次報表需要層次鑽取的場景,並介紹了利用oracle復雜sql的實現方法。這裡仍然通過該報表來了解一下使用“腳本+本地文件”的開發方法。

各級部門KPI報表的格式和具體要求參見(I)。有所不同的是,報表數據源從數據庫表變為本地文件:tree.b(樹形結構維表)和kpi.b(指標事實表),數據如下圖:

\

<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHAgYWxpZ249"center">Tree文件數據

\

Kpi文件數據

Tree的葉子節點,通過id字段與kpi表關聯。KPI文件每個ID每天都會新增kpi記錄。

采用潤乾集算報表實現的第一步:編寫集算腳本tree.dfx,完成源數據計算,輸入參數為指定當前節點號id。集算腳本如下:

A1:新建一個序列,內容是各層節點的title:“省、地市、區縣、營業部、架構4、架構5、架構6. . . 架構13”。

B1:讀入tree.b的數據。

C1:新建一個文件游標,連接kpi.b文件。使用游標分段讀取數據,適用於kpi.b較大,無法一次裝入內存的情況。

A2:將B1的PID字段切換成B1自己的引用,條件是PID=ID。

B2:在B1中取出指定id對應的記錄。

C2:使用prior函數,查找C2自己和所有祖先節點,順序反轉。

A3:用C2生成新序表,字段是ID、NAME和A1中對應的組織結構。

B3:定義變量xtitle賦值為指定id對應下一層節點的title。

C3:在B1中找出B2的直接子節點。

A4:如果C3沒有成員,說明當前節點是葉子,用B1的結構新建一個序表(只有一條空記錄)。否則,直接將C3賦值給A4。

B4:用B1生成新序表,字段是ID、GID(分組id)。GID是用prior函數找到當前每條記錄到祖先B2的路徑。之後去掉GID為空的記錄,也就是非B2子孫的記錄。

C4:循環將B4的GID賦值為所有祖先中的倒數第二個,也就是當前id的子節點。

A5:將C1的ID字段切換成C4對應記錄,去掉找不到ID對應值的記錄,也就是非B2子孫的葉子。

B5:對A5按照ID.GID分組,匯總kpi。

C5:將B5與A4對齊。

A6:用C5生成新序表。如果id是葉子的話,id、name為空,方便報表隱藏列,避免葉子顯示兩次。

B6:向報表返回兩個結果集。

制作過程的第二到四步這裡不再贅述,參見前文報表開發實例——動態多層次KPI鑽取報表(I)

這個代碼以本地文件作為數據源編寫,能夠很容易地改造成使用數據庫作為數據源,從而可以在那些不支持遞歸查詢的數據庫上實現此類報表。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved