2011年5月27日 星期五

如何在JasperReports中製作分組(Group)加總

版本
JasperReports版本為4.0.1。

前言

因為本文的範例,有使用到Subreport,
所以如果閣下還不清楚如何製作Subreport,
請先閱讀如何在JasperReports中製作Subreport

本文介紹分成二部份,分別是Java程式碼和iReport設計畫面。

報表預覽
在看程式碼和iReport設計畫面時,
先來看一下預期會產生的報表長相。



Java
首先介紹Java程式碼。

進行分組加總時,不須要額外的Java程式碼,
因此本文中的程式碼,
如何在JasperReports中製作Subreport中的程式碼大致相同,
最大的差別是為了顯示分組加總的效果,
所以變動了產生dummy records的程式碼,如下:



完整程式碼



iReport
第二部份是iReport設計畫面。

因為先前在如何在JasperReports中製作Subreport中,
已經介紹過parameter和field的設定方式,這裡就不贅述了,
直接進入分組加總的設定說明:

1. 開啟子報表

2. 開啟Report Inspector,
接著右鍵點選子報表的名稱(此例中是test_subreport)
然後點選Add Report Group,如下圖:


3. 在New group wizard中,
先輸入閣下喜歡的group name,此例中是GroupBand。
至於Group by the following report object
和Group by the following expression的差別,
在我的使用經驗裡,
如果僅依據一個欄位進行分組,
就選擇Group by the following report object,
然後在下拉式選單中挑選一個欄位;
如果須根據多個欄位進行分組,
則選擇Group by the following expression,
然後在文字方塊中輸入多個欄位的表示式,如下圖:


4. 按下一步後,請依據需求,
勾選Add the group header和Add the group footer,
在此例中,因為分組加總的結果要擺放在Detail band之後,
所以僅勾選Add the group footer,如下圖:


5. 按下完成之後,
Report Inspector中多了一個叫做GroupBand_COUNT的variable,
這個variable是用來儲存每個group的記錄筆數;
以及一個叫做GroupBand Group Footer 1的band,如下圖:


6. 接下來新增一個變數,用來儲存分組加總的值。
在Report Inspector上對Variables按右鍵,
選擇"加入 Variable",如下圖:


7. 將剛加入的variable,重新命名成F3,然後調整其屬性。
因為是加總,所以是數值,因此Variable Class請設成java.math.BigDecimal;
因為是加總,所以Calculation請設成Sum;
因為是分組加總,所以Reset type請設成Group;
接著,在Variable Expression中設定要加總的欄位。
此例是根據Field1和Field2分組,並加總Field3,
所以請填入$F{field3},如下圖:


8. 在GroupBand Group Footer 1上,加入Static Text和Text Field,
其中Text Field的Text Field Expression,
請設為$V{GroupBand_COUNT} + " / " + $V{F3},
如下圖:


9. 接著compile,如下圖:


10. 執行Java程式。

恭喜閣下已經懂了如何在JasperReports中製作分組加總的效果了!

jrxml



沒有留言:

張貼留言