JasperReport快速入门--设计篇(二)--使用交叉表创建课表
何为交叉表?
先来个图吧
这个表格用于统计每个国家的每种产品的数量(表中数据均为模拟数据,不是真实数据)
这种表格有一个特点:行标题和列标题都是动态的,是根据查询出来的数据进行横向和纵向的分组统计得到的。以上表举例:国家的数量是变的、产品的种类也是变的;可以对某个国家或某种产品进行聚合统计
jasperreport对交叉表也提供类支持,有一个element是专门来做交叉表的:Crosstab。如下图所示
上一篇文章中,我提到是因为做课程表的需求,才学习了jasperreport,而其中的Crosstab元素的结构和课程表长得确实很像,所以重点研究了交叉表。
课程表的结构
课程表中横向是节次,纵向是星期。星期和节次是课表中每个单元格的两个坐标,只要这两个坐标确定了,单元格的位置就定了。
课表只是利用了交叉表的结构,而并没有做任何的数据统计,只是原始数据的显示
下面就以课程表为例,介绍交叉表的使用
1.将交叉表元素拖到新建的空白报表的Summary band上
该例子中删除了其它不用的band,只留了pageheader用来显示课表的标题和Summary用来显示课表表格
注意:一定要将crosstab拖到summaryband,否则运行时会报错
2.拖完element元素后,会自动弹出交叉表创建向导,如下图所示
这里需要选择创建交叉表时用到的dataset,我们选择自己创建的dataset:cross_dataset(此dataset中包含用来创建课程表的数据)。然后下一步
3.选择横向分组字段
我们在这里选择了timesection,即节次。然后下一步
4.选择纵向分组字段
我们在这里选择weekday,即星期几。然后next
5.选择统计字段(Measure)和统计类型
在这里我们选择的统计字段是课程名称,创建完成后还可以再加上教师姓名,教室信息等;我们选择的统计类型是nothing,即只显示原始数据,不做任何统计。然后下一步
6.选择表格样式,并设置要添加的统计行和列
然后finish
交叉表中包含的内容如下所示
当然也可以使用绘图元素绘制斜线表头,效果如下
如果还要在单元格中显示教师和教室的信息,可以再添加两个measure
让后将新建的两个measure,拖到crosstab的右下角单元格即可
大家还发现了一个问题,没有对节次排序,所以还要对节次排序
最终的显示效果如下
从上表大家可以看到一个问题:星期二的第二节和第三节对应的是同一门课,是应该合并单元格的。具体如何操作,请关住jasperreport系列博客后续的“编程篇”。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。