用iReport制作交叉表(CrossTabs) CubeBI.com 立方开源商业智能 一个CrossTabs是一种在设计的时候既不确定行数和也不确定列数的一种表格,在运行环境下它会像下面显示的不同年份的一个销售报表一样。 水果/年份 2004 2005 2006 草莓 野生樱桃 CrossTabs在jasperresports中从1.1.0版本时开始提供,同时iReport也从1.1.0开始支持CrossTabs。 Jasperreports的CrossTabs工具允许对行和列的数据进行分组、汇总和自定义每一个cell里的内容。填充 CrossTab的数据可以来自主报表里的dataset或来自 subDataset。使用iReport里提供的向导我们可以简单快速的创建功能强大的交叉报表组件。 一个CrossTabs本质上是一个表格,行和列的数量取决于填充这个表格的数据。行和列也可以在groups里做聚合操作。对于每一个行或列的group我们都可以得到一个细节信息和一个可选的行列数据的汇总。 16.1 交叉表向导 (Crosstab wizard) 为了说明怎么让一个crosstab工作起来,我们将使用向导创建一个crosstab,当我们在工具条里选择 crosstab元素并将其添加到报表中时crosstab的向导会自动启动。 还是以 DoradoSample里提供的hsql数据里的employee报为例,我们使用包含下面查询语句的空报表开始: Select * from employee 我们把 crosstab放在报表的底部:summary band 图16.1 在第一步里我们需要选择一个dataset来填充crosstab,我们这里使用主报表里提供的dataset,点击下一步继续。 图16.2 在第二步里我们需要定义至少一个行分组.我们这里选择对所有记录使用DEPT_ID进行分组。这样就意味着 crosstab的每一行将会采用一个明确的部门编号,这样 JasperReports将会使用部门编号对数据集里的数据进行重新整理计算。使用向导,我们可以定义两个行分组,这是使用向导的局限性所在,事实上,如果你需要的话你可以通过 Crosstab的属性设置窗口定义若干个行和列的分组。点击下一步继续。 和定义行分组一样,从这里我们可以定义两个列分组,这里我们仅使用一个列分组,使用数据中的DEGREE字段对数据进行分组。该字段的含义是学历,这就表示,我们要做的这个交叉报表是用来计算不同部门员工在学历方面的人数分布情况。 图16.4 是时候定义detail 数据了,一般的,这个detail是使用类似根据country,year得到orders总数或者是相同组合的物品总数的一个聚合函数的计算出来的结果值。我们这里选择打印员工的数量(Detail field:ordered,function:coun...