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