報表專案中,常常會出現報表源資料來自不同資料庫的情況,也就是同一張報表可能會從多個業務系統讀取資料。例如:員工資訊從人力資源系統中取出,銷售資料從銷售系統中取出。當然,還有一種可能,同一應用系統的資料庫負載太大,不得已分成多個資料庫,例如:銷售系統資料分成當前庫和歷史庫。
在資料庫型別方面,報表工具可能連線同樣型別的資料庫,比如都是 oracle 或者 db2;也可能是不同的型別。
報表應用中針對這種資料分庫儲存的解決辦法有兩種:1、建設專門的資料倉儲;2、利用跨庫訪問的技術。
專門資料倉儲的建設和管理比較複雜,如果資料量很大效率會很低,而且要持續進行 etl 以便同步各個應用系統的資料。同時,資料倉儲利用的實際上也是傳統資料庫的技術,當遇到負載較大的時候也會面臨著進一步分庫的問題。資料倉儲方式結構示意圖如下:
如果使用跨庫訪問技術,例如 oracle 的透明閘道器、db2 的聯合查詢等,也會遇到不少侷限。比較共性的問題是:1、配置起來比較麻煩,而且往往需要資料庫寫許可權;2、要為跨庫的表配置別名;3、不同型別資料庫的資料型別不一致時,比較難處理。4、sql 語句受到限制,比較難實現複雜的計算。這種方式的結構示意圖如下:
現在,有了第 3 種解決辦法,也就是使用潤幹報表(結合集算器實現)。其內建的集算引擎可以連線多個資料庫,取數之後統一進行資料計算,從而能較好的解決報表資料取自不同資料庫的問題。潤幹報表解決分庫儲存問題的結構示意圖如下:
下面通過「銷售人員銷售報表」說明潤幹報表解決資料分庫儲存問題的過程。報表如下圖:
報表中的銷售訂單資料來自於銷售系統的 db2 資料庫,員工資訊來自於人力資源系統的 db2 資料庫。使用潤幹報表開發這張報表的過程如下:
1、配置資料來源
在潤幹報表和集算器中分別配置兩個資料來源,銷售系統資料庫「db2sales」,人力資源資料庫「db2hr」。
2、編寫指令碼
在集算器中定義網格引數 state,並編寫計算指令碼:
**說明:
a1:連線預先配置好的 db2sales 資料來源。
a2:連線預先配置好的 db2hr 資料來源。
a3、a4:分別從兩個資料來源中讀取 sales 序表和 employee 序表。
a5:使用集算器的物件引用機制,將 sales 序表和 employee 序表通過 sellerid=eid 關聯。
a6:按照引數 state="california" 過濾序表。
a7:生成乙個新的序表,得到需要的字段。
a8、9:關閉資料庫連線。
a10:返回給集算報表。
3、配置資料集
在報表設計器中定義引數 argstate,配置集算資料集:
4、設計報表如下:
輸入引數計算後,即可得到前面希望的報表。
報表上部的查詢按鈕使用了潤幹報表提供的「引數模板」功能,具體做法參見教程,這裡不再贅述。
潤幹報表授權檔案 實現報表資料的可控快取
使用快取可以提公升報表效能是乙個共識,一般高階報表工具都會提供報表快取功能,將整個報表計算結果快取在檔案系統中,以便使用者下次訪問引數相同的報表時可以快速讀取快取結果進行展現。潤幹報表作為報表工具的領軍品牌,當然也具有這種常規的快取功能。但在有些情況下,報表開發人員還希望進一步控制快取的內容,比如對...
潤幹報表下拉資料集顯示值真實值同步更新
潤幹填報表提供的下拉資料集需要選定真實值,顯示值,在資料提交時向資料庫更新真實值。現客戶要求下拉資料集顯示值和真實值同時更新到資料庫中。對於該需求可以考慮兩種實現思路 1寫自定義更新類,更新資料集中的顯示值和真實值 2通過js在其他格仔中回填顯示值,更新將該格仔與顯示值欄位對應上。後者好處在於通過j...
潤幹報表 資料橫向擴充套件列太多時實現換行
潤幹報表,橫向擴充套件,資料很多時,會有很多的列,因此瀏覽效果可能不好。因此,我想橫向擴充套件的時候,到達一定資料自動換行,實現下圖效果 資料集 ds1 select name,price,rownum from foods 潤幹 a1 ds1.count 用於計算此資料集內的資料個數。b1 int...