報表資料分庫儲存
報表專案中,常常會出現報表源資料來自不同資料庫的情況,也就是同一張報表可能會從多個業務系統讀取資料。例如:員工資訊從人力資源系統中取出,銷售資料從銷售系統中取出。當然,還有一種可能,同一應用系統的資料庫負載太大,不得已分成多個資料庫,例如:銷售系統資料分成當前庫和歷史庫。
在資料庫型別方面,報表工具可能連線同樣型別的資料庫,比如都是 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儲存過程
- 分庫解決方案—資料儲存
- 服務端指南 資料儲存篇 | MySQL(08) 分庫與分表設計服務端MySql
- 資料庫表設計之儲存引擎資料庫儲存引擎
- pgsql資料庫的表儲存策略原理SQL資料庫
- Mysql 資料庫水平分表 儲存過程MySql資料庫儲存過程
- 資料庫分庫分表資料庫
- MyBatis(八) 資料庫BLOB讀寫、批量更新操作、儲存過程呼叫、分表、分頁MyBatis資料庫儲存過程
- 列式儲存資料庫資料庫
- Flutter持久化儲存之資料庫儲存Flutter持久化資料庫
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- MySQL 資料庫儲存引擎MySql資料庫儲存引擎
- 資料庫儲存過程資料庫儲存過程
- 分庫分表插入資料
- 資料庫怎麼分庫分表資料庫
- 大資料資料庫讀寫分離分庫分表大資料資料庫
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- IOS資料儲存之Sqlite資料庫iOSSQLite資料庫
- IOS資料儲存之FMDB資料庫iOS資料庫
- 庫存分析報表
- 資料庫分庫分表的總結資料庫
- MySql資料庫——儲存過程MySql資料庫儲存過程
- MySQL資料庫操作、儲存引擎MySql資料庫儲存引擎
- gitlab資料庫儲存位置Gitlab資料庫
- 使用Room持久庫儲存資料OOM
- 管理資料庫儲存結構資料庫
- 儲存與資料庫系統資料庫
- 明解資料庫------資料庫儲存演變史資料庫
- 【資料庫】資料庫儲存元素型別基礎資料庫型別
- MySQL 更改資料庫資料儲存目錄MySql資料庫
- 【Android】資料儲存(三) 資料庫(SQLite)Android資料庫SQLite
- 重新學習Mysql資料庫3:Mysql儲存引擎與資料儲存原理MySql資料庫儲存引擎
- 通用的SQL Server資料庫查詢分頁儲存過程SQLServer資料庫儲存過程
- SQL Server資料庫遠端更新目標表資料的儲存過程SQLServer資料庫儲存過程
- [資料庫][分庫分表]分庫分表之後,id主鍵如何處理資料庫
- MySQL資料庫儲存引擎簡介MySql資料庫儲存引擎