使用游标显示销售报表_协助报表开发之 MongoDB join mysql
集算器 SPL 語言支持處理多樣性數(shù)據(jù)源,通過 SPL 對 MongoDB 集合與 MySql 表進行 join 關(guān)聯(lián),不僅簡化了對 MongoDB 數(shù)據(jù)的操作,而且有利于與其它報表工具的方便集成。若想了解更多,請前往乾學(xué)院:協(xié)助報表開發(fā)之 MongoDB join mysql!
處理多樣性數(shù)據(jù)源是報表開發(fā)的常見問題,而常見的 JasperReport 等報表工具本身卻難以應(yīng)付,比如展現(xiàn)MongoDB和mysql的混合運算。雖然JasperReport/Birt有virtual data source或table join等功能,但這些功能只在商業(yè)版或高端版本出現(xiàn),在免費版中實現(xiàn)難度很大。而且功能也有較大局限,對連接后的數(shù)據(jù)無法進行類似SQL的結(jié)構(gòu)化計算。
集算器 SPL 語言面向結(jié)構(gòu)化處理的強計算引擎,支持多樣性數(shù)據(jù)源,集成簡單,可以協(xié)助不同報表工具方便地實現(xiàn)此類需求,下面用例子說明
emp是MongoDB的集合,cities是 mysql的table,emp中的字段CityID邏輯上相當于外鍵,指向cities的CityID字段,cities有CityID和CityName這兩個字段。現(xiàn)在需要按時間段查詢出emp中的員工,并將CityID顯示為CityName。部分源數(shù)據(jù)如下:
使用集算器SPL的代碼如下:
A1: 連接 MongoDB,連接字格式為 mongo://ip:port/db?arg=value&…
A2: 使用find函數(shù)從集合emp中查詢出某時間段的記錄,取出 _id 之外的所有字段,形成游標。其中查詢條件中的 begin 和 end 是來自報表的外部參數(shù),分別表示Birthday的起始時間和終止時間。SPL游標能夠分批讀取和處理數(shù)據(jù),可以避免數(shù)據(jù)量過大,以防內(nèi)存溢出。因為數(shù)據(jù)量不大,所以這里可以直接fetch出游標的所有記錄,結(jié)果如下:
A3: 關(guān)閉 MongoDB。
A4: 執(zhí)行SQL查詢,從mysql數(shù)據(jù)源取數(shù)。其中myDB1是數(shù)據(jù)源名稱,配置界面如下:
可以看到,這里的數(shù)據(jù)源使用的就是JDBC 連接,可支持任意數(shù)據(jù)庫。JDBC 數(shù)據(jù)源可以自動連接/ 關(guān)閉,也可以像MongoDB 那樣手工連接/ 關(guān)閉,這里采用前者。
函數(shù)query使用SQL語句進行檢索查詢,結(jié)果如下:
A5: 將A2中的CityID字段替換成A4中對應(yīng)的記錄,其效果類似于左連接。替換后的A2如下(A2與A5指向同一個二維表):
點擊CityID中藍色的超鏈接,可以看到對應(yīng)的記錄:
有時需要進行內(nèi)連接,則應(yīng)當在函數(shù)swtich中使用選項@i,代碼即:A2.switch@i(CityID,A4),結(jié)果將會如下:
A6: 從連接的結(jié)果中取出需要的字段,并用函數(shù)new組成二維表。其中CityID.CityName:CityName表示從A5取出CityID字段對應(yīng)的記錄中的CityName字段,并重命名為CityName(報表工具無法識別CityID.CityName這樣的字段名)。
從上述代碼可以看出,用switch替換字段后,表之間的關(guān)聯(lián)關(guān)系就可以用對象的方式來訪問,這種方式直觀簡單,進行多表多層關(guān)聯(lián)時會體現(xiàn)得更明顯。計算結(jié)果如下:
到此為止,報表所需要的數(shù)據(jù)都計算出來了。
A7: 將 A6 中的二維表返回報表工具。
SPL對外提供JDBC接口,報表工具會將SPL識別為普通數(shù)據(jù)庫,集成方案請參考相關(guān)文檔。
接下來以JasperReport為例設(shè)計報表,表樣如下:
需要定義兩個報表參數(shù)Pbegin、Pend,分別對應(yīng)SPL中的兩個參數(shù)。預(yù)覽后可以看到報表結(jié)果:
報表調(diào)用SPL的方法和調(diào)用存儲過程一樣,此例中可以將本腳本保存為mongodbJoin2.dfx,在JasperReport的SQL設(shè)計器中可以用mongodbJoin2 $P{pbegin},$P{pend}來調(diào)用。
簡言之,SPL 從 MongoDB 獲取集合數(shù)據(jù),從 Mysql 查詢表記錄后,將它們通過 switch 函數(shù)進行替換字段,再通過函數(shù) new 按需求將數(shù)據(jù)組成序表,供其它的報表工具展示。通過 SPL 對多樣性數(shù)據(jù)源支持,按需要進行數(shù)據(jù)合并,這樣簡化了對 MongoDB 數(shù)據(jù)的操作,有利于與其它報表工具的方便集成。
總結(jié)
以上是生活随笔為你收集整理的使用游标显示销售报表_协助报表开发之 MongoDB join mysql的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 笔记本电脑充不了电怎么办笔记本电脑 充不
- 下一篇: 怎样允许远程访问mysql_如何开启My