報表專案中,可能會出現報表源資料來自於不同資料庫的情況。
這是由於同一張報表可能會從多個業務系統取資料。比如:員工資訊從人力資源系統中取出,銷售資料從銷售系統中取出。另一種可能是,同一應用系統的資料庫負載太大,不得已分成多個資料庫的情況。比如:銷售系統資料分成當前庫和歷史庫。
報表工具須要連線的可能是相同型別的資料庫。比方都是oracle或者db2;也可能是不同型別的資料庫。
報表應用中,資料分庫儲存的解決的方法有:1、建設專門的資料倉儲。2、利用跨庫訪問的技術。
專門資料倉儲的建設和管理比較複雜。假設資料量非常大效率會非常低。並且要不斷的etl去各個應用系統同步資料。並且資料倉儲利用的也是傳統資料庫的技術,假設負載較大的時候,也面臨分庫的問題。
資料倉儲方式結構示意圖例如以下:
假設用跨庫訪問的技術,比如oracle的透明閘道器、db2的聯合查詢等。也有不少侷限。比較共性的問題是:1、配置起來比較麻煩,並且往往須要資料庫寫許可權。
2、要為跨庫的表配置別名。3、不同型別的資料庫資料型別不一致的情況。比較難處理。4、sql語句受到限制,比較難實現複雜的計算。
這樣的方式的結構示意圖例如以下:
這樣的情況能夠考慮使用潤幹集算報表,其內建的集算引擎能夠連線多個資料庫,取數之後統一進行資料計算,能夠較好的解決報表資料來自於不同資料庫的問題。集算報表解決分庫儲存問題的結構示意圖例如以下:
這裡,通過「銷售人員銷售報表」,看一下集算報表解決資料分庫儲存問題的過程。
報表例如以下圖:
報表中的銷售訂單資料來自於銷售系統的db2資料庫,員工資訊來自於人力資源系統的db2資料庫。使用潤幹集算報表開發這張報表的步驟例如以下:
首先在集算報表和集算器中分別配置兩個資料來源,銷售系統資料庫「db2sales」,人力資源資料庫「db2hr」。
第二,在集算器中定義網格引數state,並編寫計算指令碼:
a1:連線預先配置好的db2sales資料來源。
a2:連線預先配置好的db2hr資料來源。
a3、a4:分別從兩個資料來源中讀取sales序表和employee序表。
a5:使用集算器的物件引用機制。將sales序表和employee序表通過sellerid=eid關聯。
a6:依照引數state="california"過濾序表。
a7:生成乙個新的序表。得到須要的字段。
a8、9:關閉資料庫連線。
a10:返回給集算報表。
第三。在報表設計器中定義引數argstate。配置集算資料集:
第四,設計報表例如以下:
輸入引數計算後。就可以得到前面希望的報表。
報表上部的查詢button是集算報表提供的「引數模板」功能,詳細做法參見教程。這裡不再贅述。
優化報表系統結構之報表server計算
在報表專案中,經常會碰到資料庫壓力非常大影響整個系統效能的問題。由以下的傳統方案的結構示意圖能夠看出。所有資料儲存和源資料計算都放在資料庫完畢。當併發訪問量較大的時候,儘管每乙個報表的資料量不大,還是會造成資料庫壓力過大。成為效能的瓶頸。多數資料庫廠商提供的jdbc介面資料傳輸比較緩慢。在併發量較大...
資料庫優化之垂直分庫
一般而言垂直分庫的步驟 1.收集分析業務模組間的關係 例如簡訊系統 在常見的簡訊系統必然有 使用者模組 和 簡訊記錄模組 和運營商模組 如要進行處置分配則可以將簡訊記錄模組單獨出來,但此表中要稍作修改,需要儲存一些使用者賬號使用者姓名,或者運營商名等次要資訊,已包證不必要的連表查詢 如需要詳細資訊可...
優化報表系統結構之報表伺服器計算
在報表專案中,常常會碰到資料庫壓力很大影響整個系統效能的問題。由下面的傳統方案的結構示意圖可以看出,全部資料儲存和源資料計算都放在資料庫完成。當併發訪問量較大的時候,雖然每個報表的資料量不大,還是會造成資料庫壓力過大,成為效能的瓶頸。多數資料庫廠商提供的jdbc介面傳輸資料比較緩慢,在併發量較大的情...