報表開發中通用group_concat函數的實現方法,報表group_concat

來源:互聯網
上載者:User

報表開發中通用group_concat函數的實現方法,報表group_concat

    使用Jasper或BIRT等報表工具時,常會碰到一些非常規的統計,用報表工具本身或SQL都難以處理,如在MSSQL/Oracle中,想展現類似group_concatFunction Compute結果的報表。

    集算器具有結構化強計算引擎,整合簡單,可以協助報表工具方便地實現此類需求。下面以MSSQL為例,來說明通用group_concat函數的實現過程。

    MSSQL的表Table1有四個欄位,欄位Col1、Col2、Col3是分組欄位,Col4是彙總欄位,部分資料如下:


    報表工具需要的資料來源如下:

    集算器代碼:

    A1=mssqlDB.query("select * fromtable1 where Col1 in"+arg)

    這句代碼執行SQL,從資料庫中取出資料。其中arg是來自報表的參數,比如(10,20)。A1的計算結果如下:

    A2=A1.group(Col1,Col2,Col3;~.(Col4).string@d():Col4)

    這句代碼將A1按照Col1、Col2、Col3分組,並將每組資料中的Col4以逗號拼接在一起。代碼中的~表示每組資料,比如第一組有三條記錄。~.(Col4)表示取出每組資料中的Col4欄位,比如第一組就是集合[A12G3 , K78DE , MAT12]。函數string可將集合中的成員拼接成一個字串,預設分隔符號是逗號,選項@d表示不給成員加引號,因此運算式[A12G3 , K78DE , MAT12].string@d()等於” A12G3 ,K78DE , MAT12”。運算式“:Col4”表示將前面的計算結果重新命名為Col4。

    A3就是本案例的最終計算結果,如下:

    A3:result A2

    這句代碼將A2中的資料返回給報表工具。

    集算器對外提供JDBC介面,報表工具會將集算器識別為普通資料庫,整合方案請參考相關文檔。

 

    接下來以JasperReport為例設計報表,表樣如下:

    預覽後可以看到報表結果:

    需要注意的是,報表調用集算器的方法和調用預存程序一樣,比如將本指令碼儲存為group_concat.dfx,則在的JasperReport的SQL設計器中可以用group_concat $P{arg}來調用。


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.