標籤:潤乾 資料來源 集算報表
多樣性資料來源在報表開發中越來越常見,潤乾集算報表對多樣性資料來源的有效支援使得這類報表開發變得非常簡單,目前集算報表支援的資料來源類型除傳統的關係型資料庫外,還支援:TXT文本、Excel、JSON、HTTP、Hadoop、mongodb等。
mongodb等nosql資料庫具有易擴充和高效能等優勢,但計算能力比傳統SQL要弱(如mongodb的分組結果不能太大,且不直接支援join運算等),而集算報表內建的計算引擎再正好可以補充這一點,在獲得mongodb的優勢的同時還擁有較強的計算能力。
這裡通過一個分組執行個體來看一下集算報表使用mongodb資料來源開發報表的過程。
報表說明
學產生績資訊儲存在mongodb中,包含班級、姓名、成績、科目等資訊,成績表(score)資料內容如下:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/52/1E/wKioL1RkCQKTrmlBAAIMouLUlK8811.jpg" style="float:none;" title="report5_multisource_mongodb_1.jpg" alt="wKioL1RkCQKTrmlBAAIMouLUlK8811.jpg" />
現根據學生資訊匯總總成績,並排名。以下為實現步驟:
準備mongodb jdbc驅動包
這裡使用的是最新版mongodb2.6.4,由於集算報表並不包含mongodb的java驅動包。用集算報表來訪問mongodb,必須提前準備mongodb的java驅動包(集算報表要求2.12.2或以上版本的驅動,如mongo-java-driver-2.12.2.jar)。
由於這裡要分別使用集算器編輯器編輯指令碼,再使用集算報表設計師完成報表範本製作,所以需要將以上包放到[集算報表和集算器安裝目錄]\common\jdbc下(web部署時放到應用的classpath中)。Mongodb的java驅動包是:https://github.com/mongodb/mongo-java-driver/releases。
編寫計算指令碼
使用集算器編輯器編寫集算指令碼,(p1.dfx),完成表資料讀取計算,為報表返回結果集(右側為格子運行後結果)。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/52/20/wKiom1RkCJXyiKHhAAHVEPktrwk911.jpg" style="float:none;" title="report5_multisource_mongodb_2.jpg" alt="wKiom1RkCJXyiKHhAAHVEPktrwk911.jpg" />
A1:串連mongodb,ip和連接埠號碼是localhost:27017,資料庫是test,使用者名稱和密碼為空白。如果需要其他參數的話可以按照mongo://ip:port/db?user=…&password=…格式繼續寫參數。
A2:使用find函數從mongodb中取數,形成遊標。集合是score,取出除_id外的所有欄位。可以看出find函數和mongodb的find函數類似。集算器的遊標是分批讀取和處理資料,可以避免資料量過大,記憶體出現溢出的情況。
A3:關閉串連。
A4:按照id欄位分組。
A5:匯總總成績。
A6:按總成績排名,為報表返回結果集。
編輯報表範本
首先在集算報表設計師中建立報表,設定資料集,使用“集算器”資料集類型,調用編輯好的指令檔(p1.dfx):
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/52/1E/wKioL1RkCQPzCKTCAADdDhJ8uCA534.jpg" style="float:none;" title="report5_multisource_mongodb_3.jpg" alt="wKioL1RkCQPzCKTCAADdDhJ8uCA534.jpg" />
其中,dfx檔案路徑既可以是絕對路徑,也可以是相對路徑,相對路徑是相對選項中配置的dfx主目錄的。
編輯報表運算式,直接使用集算指令碼返回的結果集,不再在報表中分組排序,完成報表製作:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/52/20/wKiom1RkCJbgELRzAABwVE-dlw4903.jpg" style="float:none;" title="report5_multisource_mongodb_4.jpg" alt="wKiom1RkCJbgELRzAABwVE-dlw4903.jpg" />
在設計器中預覽報表,可得到如下結果:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/52/1E/wKioL1RkCQTDG-SeAACaw7TlxRY530.jpg" title="report5_multisource_mongodb_5.jpg" style="float:none;" alt="wKioL1RkCQTDG-SeAACaw7TlxRY530.jpg" />
通過上面的實現可以看到,使用集算器指令碼可以方便地完成mongodb資料讀取計算,而且外置的集算指令碼具有可視化的編輯調試環境,編輯好的指令碼還可以複用(被其他報表或程式調用)。不過,如果指令碼已經調試好,而且不需要複用的時候,要維護兩個檔案(集算指令碼和報表範本)的一致性會比較麻煩,這時候直接使用集算報表的指令碼資料集就比較簡單了。
在指令碼資料集中可以分步編寫指令碼完成計算任務,文法與集算器一致,還可以直接使用報表定義好的參數。使用指令碼資料集可以這樣完成:
1. 在資料集設定視窗中點擊“增加”按鈕,彈出資料集類型對話方塊,選擇“指令碼資料集”;
2. 在彈出的指令碼資料集編輯視窗中編寫指令碼;
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/52/20/wKiom1RkCJfwng4wAAFpxvuh5c4593.jpg" style="float:none;" title="report5_multisource_mongodb_6.jpg" alt="wKiom1RkCJfwng4wAAFpxvuh5c4593.jpg" />
3. 報表運算式,與使用集算器資料集一致,不再贅述。
潤乾集算報表多樣性資料來源之mongodb