集算器輔助報表工具的應用過程

   集算器具有豐富的(半)結構化計算函數,支持動態解析表達式,支持多樣性數據源。報表工具可將集算器腳本文件當做數據庫存儲過程執行,傳入參數並用JDBC獲得返回結果。

  集算器與報表工具的集成結構如下:



 

下面舉例說明報表集成集算器的方法

 

數據庫表SALES3存儲着訂單數據,部分數據如下:



 

現在要計算出指定年份每個月訂單的總金額、最大訂單金額、最小訂單金額,以及總訂單數,並將數據轉置成134行,即:四種算法是第一列,列名爲subtotal,每個月佔一列,列名分別是1234…

         步驟一:在集算器IDE中連接數據庫。



 

可用同時連接多個數據源進行混合計算,本案例使用mySQL數據庫,JDBC配置如下。



 

步驟二:在集算器IDE中完成算法:



 

SQL簡單分組彙總,再循環每條數據,將行轉爲列,按順序修改空二維表A2中的一列。A1中的argYear是報表傳來的參數,A4中的result語句表示向JDBC輸出A2(默認輸出最後一個單元格A3)。點擊A2可觀察計算結果:



 

步驟三:在報表中建立集算器數據源

         驅動類名爲com.esproc.jdbc.InternalDriver ( v1.0)

         JDBC URLjdbc:esproc:local://

         用戶名和密碼爲空。

 

         對於Jasper,其配置界面如下:



 

步驟四:在報表中新建數據集

之後可在query設計器中以存儲過程的形式調用集算器腳本。對於Jasper,寫法形如:call transData($P{pYear}),其中存儲過程的名字就是集算器腳本文件名。pYear是報表參數,傳入集算器時將按順序(而不是參數名)依次對應集算器參數。

對報表工具而言,調用集算器腳本和調用普通數據庫代碼沒有區別,之後就是常規的設計報表擺放字段,此處不再贅述。

WEB端配置呈現可參考【集算器集成與應用之JasperReport集成】。

 

上面以Jasper爲例說明了報表工具集成集算器的一般方法,下面說明幾種特殊情況。

BIRT集成集算器

BIRTJasper的情況基本相同,唯一的區別在於參數用法。不論存儲過程還是SQLBIRT都使用問號做參數佔位符,因此調用集算器腳本時應當寫作:calltransData (?)。詳細信息可見集算器集成與應用之BIRT集成

總之,只要報表工具支持JDBC數據源,就可以集成集算器。

 

簡單腳本無文件

集算器腳本比較簡單時,可以直接在報表的query設計器中寫腳本,而不必專門存儲一個腳本文件。比如下面的代碼是將每條記錄中的ANOMALIES字段拆分成多條記錄。



 

Jasperquery設計器中可以直接寫作=myDB1.query("select ID,ANOMALIES from data where ID>?”,$P{pID}) \n =A1.news(ANOMALIES.array(" ");A1.ID:ID,~:ANOMALIES)

可以看到,行和行之間只需用回車“\n“來分隔(列之間用\t分隔)。

 

 

上面的代碼可以連寫,等價於:



 

因此Jasper中的query可以進一步簡化爲=myDB1.query("select ID,ANOMALIES from data where ID>?”,$P{pID}).news(ANOMALIES.array(" ");A1.ID:ID,~:ANOMALIES)

 

BIRT使用問號做參數佔位符,而問號是集算器表達式的一部分,因此需要用”arg1,arg2,arg3”的形式依次佔位。query應當寫作=myDB1.query("select ID,ANOMALIES from data where ID>?”,arg1).news(ANOMALIES.array(" ");A1.ID:ID,~:ANOMALIES) 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章