報表資料分庫儲存
報表專案中,常常會出現報表源資料來自不同資料庫的情況,也就是同一張報表可能會從多個業務系統讀取資料。例如:員工資訊從人力資源系統中取出,銷售資料從銷售系統中取出。當然,還有一種可能,同一應用系統的資料庫負載太大,不得已分成多個資料庫,例如:銷售系統資料分成當前庫和歷史庫。
在資料庫型別方面,報表工具可能連線同樣型別的資料庫,比如都是 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/69900830/viewspace-2667656/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 實現報表資料分庫儲存
- 《資料儲存》之《分庫,分表》
- 資料庫分庫,原來 SQL 和儲存過程寫的報表咋辦?資料庫SQL儲存過程
- 資料庫表設計之儲存引擎資料庫儲存引擎
- MyBatis(八) 資料庫BLOB讀寫、批量更新操作、儲存過程呼叫、分表、分頁MyBatis資料庫儲存過程
- Flutter持久化儲存之資料庫儲存Flutter持久化資料庫
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- gitlab資料庫儲存位置Gitlab資料庫
- 資料庫儲存過程資料庫儲存過程
- 分庫分表插入資料
- 資料庫怎麼分庫分表資料庫
- 大資料資料庫讀寫分離分庫分表大資料資料庫
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- MySQL資料庫操作、儲存引擎MySql資料庫儲存引擎
- MySql資料庫——儲存過程MySql資料庫儲存過程
- 明解資料庫------資料庫儲存演變史資料庫
- MySQL 更改資料庫資料儲存目錄MySql資料庫
- 重新學習Mysql資料庫3:Mysql儲存引擎與資料儲存原理MySql資料庫儲存引擎
- 資料庫分庫分表的總結資料庫
- SQL Server資料庫遠端更新目標表資料的儲存過程SQLServer資料庫儲存過程
- 分表擴充套件全域性序列實際操作_高可用_單表儲存千萬級_海量儲存_分表擴充套件---MyCat分散式資料庫叢集架構工作筆記0025套件分散式資料庫架構筆記
- greenDAO資料庫之修改儲存地址資料庫
- MySQL資料庫儲存引擎簡介MySql資料庫儲存引擎
- MariaDB Spider 資料庫分庫分表實踐IDE資料庫
- [資料庫][分庫分表]分庫分表之後,id主鍵如何處理資料庫
- 資料儲存--檔案儲存
- 關於InnoDB表資料和索引資料的儲存索引
- MySQL資料庫之分庫分表方案MySql資料庫
- java+pgsql實現儲存圖片到資料庫,以及讀取資料庫儲存的圖片JavaSQL資料庫
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- 資料庫沒有完美的儲存引擎資料庫儲存引擎
- 資料庫內部儲存結構探索資料庫
- Sqlserver資料庫儲存路徑的修改SQLServer資料庫
- Ubuntu 上更改 MySQL 資料庫資料儲存目錄UbuntuMySql資料庫
- #第9篇分享:python資料儲存-MySQL資料庫PythonMySql資料庫
- 誤刪除儲存SqlServer資料庫資料恢復SQLServer資料庫資料恢復
- 資料庫mysql儲存是什麼?可以存什麼?資料庫MySql
- 資料儲存(1):從資料儲存看人類文明-資料儲存器發展歷程