實現報表數據分庫存儲

報表項目中,經常會出現報表源數據來自不一樣數據庫的狀況,也就是同一張報表可能會從多個業務系統讀取數據。例如:員工信息從人力資源系統中取出,銷售數據從銷售系統中取出。固然,還有一種可能,同一應用系統的數據庫負載太大,不得已分紅多個數據庫,例如:銷售系統數據分紅當前庫和歷史庫。sql

在數據庫類型方面,報表工具可能鏈接一樣類型的數據庫,好比都是 oracle 或者 db2;也多是不一樣的類型。數據庫

報表應用中針對這種數據分庫存儲的解決辦法有兩種:一、建設專門的數據倉庫;二、利用跨庫訪問的技術。oracle

專門數據倉庫的建設和管理比較複雜,若是數據量很大效率會很低,並且要持續進行 ETL 以便同步各個應用系統的數據。同時,數據倉庫利用的實際上也是傳統數據庫的技術,當遇到負載較大的時候也會面臨着進一步分庫的問題。數據倉庫方式結構示意圖以下:工具

imagepng

若是使用跨庫訪問技術,例如 Oracle 的透明網關、DB2 的聯合查詢等,也會遇到很多侷限。比較共性的問題是:一、配置起來比較麻煩,並且每每須要數據庫寫權限;二、要爲跨庫的表配置別名;三、不一樣類型數據庫的數據類型不一致時,比較難處理。四、sql 語句受到限制,比較難實現複雜的計算。這種方式的結構示意圖以下:設計

imagepng

如今,有了第 3 種解決辦法,也就是使用潤乾報表(結合集算器實現)。其內置的集算引擎能夠鏈接多個數據庫,取數以後統一進行數據計算,從而能較好的解決報表數據取自不一樣數據庫的問題。潤乾報表解決分庫存儲問題的結構示意圖以下:3d

imagepng

下面經過「銷售人員銷售報表」說明潤乾報表解決數據分庫存儲問題的過程。報表以下圖:對象

imagepng

報表中的銷售訂單數據來自於銷售系統的 db2 數據庫,員工信息來自於人力資源系統的 db2 數據庫。使用潤乾報表開發這張報表的過程以下:blog

一、配置數據源教程

在潤乾報表和集算器中分別配置兩個數據源,銷售系統數據庫「db2sales」,人力資源數據庫「db2HR」。資源

二、編寫腳本

在集算器中定義網格參數 state,並編寫計算腳本:

  A
1 >salesdb=connect(「db2sales」)
2 >hrdb=connect(「db2HR」)
3 =salesdb.query(「select * from sales」)
4 =hrdb.query(「select * from employee」)
5 =A3.run(SELLERID=A4.select@1(EID:A3.SELLERID))
6 =A5.select(SELLERID.STATE==state)
7 =A6.new(ORDERID,CLIENT,SELLERID.NAME:SELLERNAME,AMOUNT,ORDERDATE)
8 >salesdb.close()
9 >hrdb.close()
10 result A7

代碼說明:

A1:鏈接預先配置好的 db2sales 數據源。

A2:鏈接預先配置好的 db2HR 數據源。

A三、A4:分別從兩個數據源中讀取 sales 序表和 employee 序表。

A5:使用集算器的對象引用機制,將 sales 序表和 employee 序表經過 sellerid=eid 關聯。

A6:按照參數 state="California" 過濾序表。

A7:生成一個新的序表,獲得須要的字段。

A八、9:關閉數據庫鏈接。

A10:返回給集算報表。

三、配置數據集

在報表設計器中定義參數 argstate,配置集算數據集:

imagepng

四、設計報表以下:

imagepng

輸入參數計算後,便可獲得前面但願的報表。

報表上部的查詢按鈕使用了潤乾報表提供的「參數模板」功能,具體作法參見教程,這裏再也不贅述。

相關文章
相關標籤/搜索