ireport 4.5教程之交叉表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ireport4.5教程之交叉表
一个CrossTabs是一种在设计的时候既不确定行数和也不确定列数的一种表格,在运行环境下它会像下面显示的不同年份的一个销售报表一样。
水果/年份200420052006
草莓
野生樱桃
CrossTabs在jasperresports中从1.1.0版本时开始提供,同时iReport 也从1.1.0开始支持CrossTabs。
Jasperreports的CrossTabs工具允许对行和列的数据进行分组、汇总和自定义每一个cell里的内容。填充CrossTab的数据可以来自主报表里的dataset 或来自subDataset。使用iReport里提供的向导我们可以简单快速的创建功能强大的交叉报表组件。
一个CrossTabs本质上是一个表格,行和列的数量取决于填充这个表格的数据。行和列也可以在groups里做聚合操作。对于每一个行或列的group我们都可以得到一个细节信息和一个可选的行列数据的汇总。
交叉表向导(Crosstab wizard)
为了说明怎么让一个crosstab工作起来,我们将使用向导创建一个crosstab,当我们在工具条里选择crosstab元素并将其添加到报表中时crosstab的向导会自动启动。
还是以DoradoSample里提供的hsql数据里的employee报为例,我们使用包含下面查询语句的空报表开始:
Select*from employee
我们把crosstab放在报表的底部:summary band
在第一步里我们需要选择一个dataset来填充crosstab,我们这里使用主报表里提供的dataset,点击下一步继续。
在第二步里我们需要定义至少一个行分组.我们这里选择对所有记录使用DEPT_ID进行分组。这样就意味着crosstab的每一行将会采用一个明确的部门编号,这样JasperReports将会使用部门编号对数据集里的数据进行重新整理计算。使用向导,我们可以定义两个行分组,这是使用向导的局限性所在,事实上,如果你需要的话你可以通过Crosstab的属性设置窗口定义若干个行和列的分组。点击下一步继续。
和定义行分组一样,从这里我们可以定义两个列分组,这里我们仅使用一个列分组,使用数据中的DEGREE字段对数据进行分组。该字段的含义是学历,这就表示,我们要做的这个交叉报表是用来计算不同部门员工在学历方面的人数分布情况。
是时候定义detail数据了,一般的,这个detail是使用类似根据country,year得到orders总数或者是相同组合的物品总数的一个聚合函数的计算出来的结果值。我们这里选择打印员工的数量(Detail
field:ordered,function:count)。点击下一步继续。
最后一步我们可以为crosstab的布局设定一个布局。我们可以设置是否能看到表格线、或者是否包括行和列总数统计之类。我们这里全部选择。
点击finish
注意当一个crosstab添加到一个报表中后,会自动在设计窗口中添加一个用来编辑当前crosstab的tab页窗口。
当点击crosstab的tab页,两个新的属性窗口将会被添加在窗口的左边和右边:一个crosstab的结构树,用来显示crosstab的当前选中单元格和帮助相关信息。一个是crossstab对象列表用来显示和该CrossTab相关的一些variables或fields等。
当点击工具条上的启动按钮后,我们将可以看到引擎生成的如下效果的报表:
最后一列包含每一行交叉所有列的总计,最后一行包含每一列交叉所有行的总计。
列,行,单元格(Columns,rows,cells)
一个crosstab至少必须有一个行分组和一个列分组,每一个行和列的分组都有一个可选的行/列的统计。
下面图中所示的是一个基本的由一个行列分组构成的crosstab。
Crosstab header
cell Column group1
header
Column group1
total header
Row group1
header
detail Col group1total
Row group1total header Row group1total Row group1
total/column group1
total
当再次添加一个行分组时,这个crosstab将会显示出如下效果:
Crosstab header
cell Column group1
header
Column group1
total header
Row group1 header
Row
group2
header
detail Col group1total
Row
group2
total
header
Row group2total Row group2
total/column group1
total
Row group1total header Row group1total Row group1
total/column group1
total
行和列(Rows and columns)
一个行或列的分组可能通过crosstab的属性窗口来对它进行修改(在crosstab编辑器右键菜单里选择Crosstab properties)。
点击“row and column groups”的标签页。在这里我们可以看到已经定义好的行或列的分组。