實現報表資料分庫儲存
報表專案中,常常會出現報表源資料來自不同資料庫的情況,也就是同一張報表可能會從多個業務系統讀取資料。例如:員工資訊從人力資源系統中取出,銷售資料從銷售系統中取出。當然,還有一種可能,同一應用系統的資料庫負載太大,不得已分成多個資料庫,例如:銷售系統資料分成當前庫和歷史庫。
在資料庫型別方面,報表工具可能連線同樣型別的資料庫,比如都是 oracle 或者 db2;也可能是不同的型別。
報表應用中針對這種資料分庫儲存的解決辦法有兩種:1、建設專門的資料倉儲;2、利用跨庫訪問的技術。
專門資料倉儲的建設和管理比較複雜,如果資料量很大效率會很低,而且要持續進行 ETL 以便同步各個應用系統的資料。同時,資料倉儲利用的實際上也是傳統資料庫的技術,當遇到負載較大的時候也會面臨著進一步分庫的問題。資料倉儲方式結構示意圖如下:
如果使用跨庫訪問技術,例如 Oracle 的透明閘道器、DB2 的聯合查詢等,也會遇到不少侷限。比較共性的問題是:1、配置起來比較麻煩,而且往往需要資料庫寫許可權;2、要為跨庫的表配置別名;3、不同型別資料庫的資料型別不一致時,比較難處理。4、sql 語句受到限制,比較難實現複雜的計算。這種方式的結構示意圖如下:
現在,有了第 3 種解決辦法,也就是使用潤乾報表(結合集算器實現)。其內建的集算引擎可以連線多個資料庫,取數之後統一進行資料計算,從而能較好的解決報表資料取自不同資料庫的問題。潤乾報表解決分庫儲存問題的結構示意圖如下:
下面透過“銷售人員銷售報表”說明潤乾報表解決資料分庫儲存問題的過程。報表如下圖:
報表中的銷售訂單資料來自於銷售系統的 db2 資料庫,員工資訊來自於人力資源系統的 db2 資料庫。使用潤乾報表開發這張報表的過程如下:
1、配置資料來源
在潤乾報表和集算器中分別配置兩個資料來源,銷售系統資料庫“db2sales”,人力資源資料庫“db2HR”。
2、編寫指令碼
在集算器中定義網格引數 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 資料來源。
A3、A4:分別從兩個資料來源中讀取 sales 序表和 employee 序表。
A5:使用集算器的物件引用機制,將 sales 序表和 employee 序表透過 sellerid=eid 關聯。
A6:按照引數 state="California" 過濾序表。
A7:生成一個新的序表,得到需要的欄位。
A8、9:關閉資料庫連線。
A10:返回給集算報表。
3、配置資料集
在報表設計器中定義引數 argstate,配置集算資料集:
4、設計報表如下:
輸入引數計算後,即可得到前面希望的報表。
報表上部的查詢按鈕使用了潤乾報表提供的“引數模板”功能,具體做法參見教程,這裡不再贅述。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69957599/viewspace-2669198/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 報表資料分庫儲存
- 《資料儲存》之《分庫,分表》
- 資料庫分庫,原來 SQL 和儲存過程寫的報表咋辦?資料庫SQL儲存過程
- java+pgsql實現儲存圖片到資料庫,以及讀取資料庫儲存的圖片JavaSQL資料庫
- 資料庫表設計之儲存引擎資料庫儲存引擎
- Mysql資料庫建立儲存過程實現往資料表中新增欄位的方法MySql資料庫儲存過程
- MariaDB Spider 資料庫分庫分表實踐IDE資料庫
- 傳統資料庫也能實現區塊鏈儲存資料庫區塊鏈
- MyBatis(八) 資料庫BLOB讀寫、批量更新操作、儲存過程呼叫、分表、分頁MyBatis資料庫儲存過程
- Flutter持久化儲存之資料庫儲存Flutter持久化資料庫
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- 使用JavaScript和Python實現Oracle資料庫的儲存過程?JavaScriptPythonOracle資料庫儲存過程
- 資料庫儲存與索引技術(三)LSM樹實現案例資料庫索引
- 分表擴充套件全域性序列實際操作_高可用_單表儲存千萬級_海量儲存_分表擴充套件---MyCat分散式資料庫叢集架構工作筆記0025套件分散式資料庫架構筆記
- gitlab資料庫儲存位置Gitlab資料庫
- 資料庫儲存過程資料庫儲存過程
- MySQL如何實現萬億級資料儲存?MySql
- 現在後端都在用什麼資料庫儲存資料?後端資料庫
- 分庫分表插入資料
- 資料庫怎麼分庫分表資料庫
- 分散式資料庫中介軟體的實現原理介紹一:分庫分表分散式資料庫
- 大資料資料庫讀寫分離分庫分表大資料資料庫
- Java實戰:教你如何進行資料庫分庫分表Java資料庫
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- 頭歌資料庫實驗六:儲存過程資料庫儲存過程
- MySQL資料庫操作、儲存引擎MySql資料庫儲存引擎
- MySql資料庫——儲存過程MySql資料庫儲存過程
- 2、JSP實現資料傳遞和儲存JS
- 明解資料庫------資料庫儲存演變史資料庫
- 256變4096:分庫分表擴容如何實現平滑資料遷移?
- 自研資料庫CynosDB儲存系統如何實現即時恢復資料庫
- MySQL 更改資料庫資料儲存目錄MySql資料庫
- 重新學習Mysql資料庫3:Mysql儲存引擎與資料儲存原理MySql資料庫儲存引擎
- 資料庫分庫分表的總結資料庫
- SQL Server資料庫遠端更新目標表資料的儲存過程SQLServer資料庫儲存過程
- 基於代理的資料庫分庫分表框架 Mycat實踐資料庫框架
- 分散式資料庫中介軟體 MyCat | 分庫分表實踐分散式資料庫
- Spring Boot實戰系列(2)資料儲存之NoSQL資料庫MongoDBSpring BootSQL資料庫MongoDB