JasperReports入门教程(五):分组打印

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如下

JasperReports入门教程(五):分组打印

添加分组Group

1.在左侧报表上右键->Create Group 新建一个Group Band
选择Create Group from expression直接按照表达式来分组,表达式一般是选择一个字段,即按照选择的字段来分组
也可以选择Create Group from a report object,这样后续在添加的Group Header中一样可以设置分组表达式。

JasperReports入门教程(五):分组打印

2.选择Field中选择grade字段作为分组表达式依据

JasperReports入门教程(五):分组打印

3.然后next,勾选上Add the Group Header,Add the Group Footer后,Finish完成。

JasperReports入门教程(五):分组打印

JasperReports入门教程(五):分组打印

4.添加好的Group如下所示,分组表达式为grade字段,可以修改为其他字段,如果在第1步中选择了Create Group from a report object,同样可以在这里设置分组表达式

JasperReports入门教程(五):分组打印

在Group Header上添加打印信息

1.拖拽grade字段到Group1 Group Header 1上,此时会出现3个选项

  • No Calculation Funtion 没有计算函数,就是直接打印字段
  • Count 计数函数,打印分组数据的总数
  • Distinct Count 唯一计数函数,打印分组数据的总数,但是过滤掉重复的数据

一般默认选择No Calculation Funtion,如果需要计算的字段,可以后续在单独添加

JasperReports入门教程(五):分组打印

在Detail1中添加打印列表字段

前面的教程都讲过如何添加打印Field,这里就略过。添加好后如下图

JasperReports入门教程(五):分组打印

打印合计数据

在分组打印中,一般会打印总数,合计总金额之类的数据,下面我们按照grade分组后,打印总人数,和年级的平均成绩

1.首先添加计算变量 grade_count,类型是Integer,因为是计算总数,所以右侧的Calculation要选择Count函数,Expression选择grade
下面的Reset Type表示计算范围,因为是按照分组计算,所以选择创建的分组[Group] Group1,如果是按照页来计数要选择Page
添加Group分组时在Variable中会自动添加一个合计总数的变量Group1_COUNT,和grade_count一样的逻辑

JasperReports入门教程(五):分组打印

2.同第1步添加变量 grade_avg,类型是Integer,计算年级的平均成绩,Expression选择score分数字段

JasperReports入门教程(五):分组打印

3.添加总人数grade_count和平均分grade_avg到 Group Footer

JasperReports入门教程(五):分组打印

代码开发

本节代码和报表模板地址

JasperReports入门教程(五):分组打印

上一篇:Jquery中的this与$(this)


下一篇:网站使用CDN加速与不加速的有什么影响