JasperReports入門教程(五):分組打印
背景
在報表打印中,常有的一個打印需求是一個數據集按照某一個維度(字段)來分組打印表格,分組打印多個表格,並且統計一些合集信息。本章我們做一個例子,按照年級來分組打印每個年級的成績信息,每個年級的學生總數。
方案分析
分組可以通過創建模板Group的方式來按照某一個字段分組,每個分組要打印的聚合信息可以通過創建Variable變量來實現。下面我們實現它。
數據源結構
[{"grade":"1年級學生信息","name":"1-1","score":"1","sex":"男"},{"grade":"1年級學生信息","name":"1-2","score":"2","sex":"男"},
{"grade":"2年級學生信息","name":"2-1","score":"1","sex":"男"},{"grade":"2年級學生信息","name":"2-2","score":"2","sex":"男"},
{"grade":"3年級學生信息","name":"3-1","score":"1","sex":"男"},{"grade":"3年級學生信息","name":"3-2","score":"2","sex":"男"}]
添加字段Field
前面的教程都講過如何添加Field,這里就略過。去掉模板中多余的Band
添加的Field如下
添加分組Group
1.在左側報表上右鍵->Create Group 新建一個Group Band。
選擇Create Group from expression直接按照表達式來分組,表達式一般是選擇一個字段,即按照選擇的字段來分組
也可以選擇Create Group from a report object,這樣后續在添加的Group Header中一樣可以設置分組表達式。
2.選擇Field中選擇grade字段作為分組表達式依據
3.然后next,勾選上Add the Group Header,Add the Group Footer后,Finish完成。
4.添加好的Group如下所示,分組表達式為grade字段,可以修改為其他字段,如果在第1步中選擇了Create Group from a report object,同樣可以在這里設置分組表達式
在Group Header上添加打印信息
1.拖拽grade字段到Group1 Group Header 1上,此時會出現3個選項
- No Calculation Funtion 沒有計算函數,就是直接打印字段
- Count 計數函數,打印分組數據的總數
- Distinct Count 唯一計數函數,打印分組數據的總數,但是過濾掉重復的數據
一般默認選擇No Calculation Funtion,如果需要計算的字段,可以后續在單獨添加
在Detail1中添加打印列表字段
前面的教程都講過如何添加打印Field,這里就略過。添加好后如下圖
打印合計數據
在分組打印中,一般會打印總數,合計總金額之類的數據,下面我們按照grade分組后,打印總人數,和年級的平均成績
1.首先添加計算變量 grade_count,類型是Integer,因為是計算總數,所以右側的Calculation要選擇Count函數,Expression選擇grade,
下面的Reset Type表示計算范圍,因為是按照分組計算,所以選擇創建的分組[Group] Group1,如果是按照頁來計數要選擇Page
添加Group分組時在Variable中會自動添加一個合計總數的變量Group1_COUNT,和grade_count一樣的邏輯
2.同第1步添加變量 grade_avg,類型是Integer,計算年級的平均成績,Expression選擇score分數字段
3.添加總人數grade_count和平均分grade_avg到 Group Footer中