在Birt中動態插入子表欄位,birt動態插入欄位

來源:互聯網
上載者:User

在Birt中動態插入子表欄位,birt動態插入欄位

         庫表dColThread是主表,主鍵是tID。dColQuestion是子表,外鍵是tID,如下:

         dColThread


         dColQuestion

        報表需要根據ApplicationName查詢主表並以列表的形式展現資料。主表每條記錄對應的status欄位值有多個,但不超過5個,需要橫向插入主表的Phone、Decline欄位之間,依次命名為QuestionNo1、QuestionNo2…QuestionNo5。如果某列資料都為空白,則這一列不顯示。表樣形如:


         用集算器準備資料,代碼如下:


         A1:執行SQL,取出主子表關聯資料。arg1是來自報表參數。假如arg1=”mfc”,則A1的計算結果如下:



         A2:按照tID分組,每組是一條主表記錄及其對應的子表記錄,如:

         A3:按照報表中列表的結構建立空二維表。

         A4:迴圈A2中的組,每次向A3插入一條記錄。迴圈體中可用A4引用迴圈變數,用#A4來引用迴圈計數。

         B4:取當前組中status的欄位值,並補足至少5條記錄。

         B5:向A3追加新記錄。迴圈結束後A3如下:

         A6:返回結果給報表。集算器對外提供JDBC介面,報表工具會將集算器識別為普通資料庫。

 

         然後用BIRT設計list表,模板如下:

         如果QuestionNo列為空白則應當隱藏。動態隱藏的方法有很多,這裡介紹其中一種。對於QuestionNo5(其他列類似),可以先在dataSet的onFetch方法中使用如下指令碼:

if(reportContext.getGlobalVariable("t5")==null){    reportContext.setGlobalVariable("t5",row.QuestionNo5)}else{    reportContext.setGlobalVariable("t5",reportContext.getGlobalVariable("t5")+row.QuestionNo5)

         再在QustionNo5列的Visibility屬性中使用如下運算式:BirtStr.trim(reportContext.getGlobalVariable("t5"))==""

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

         報表調用集算器的方法和調用預存程序一樣,比如將本指令碼儲存為dColMiddle.dfx,則在BIRT的預存程序設計器中可以用call dColMiddle.dfx(?)來調用。


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

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.