用iReport制作交叉表CrossTabs.docx

上传人:b****8 文档编号:9595902 上传时间:2023-02-05 格式:DOCX 页数:24 大小:566.80KB
下载 相关 举报
用iReport制作交叉表CrossTabs.docx_第1页
第1页 / 共24页
用iReport制作交叉表CrossTabs.docx_第2页
第2页 / 共24页
用iReport制作交叉表CrossTabs.docx_第3页
第3页 / 共24页
用iReport制作交叉表CrossTabs.docx_第4页
第4页 / 共24页
用iReport制作交叉表CrossTabs.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

用iReport制作交叉表CrossTabs.docx

《用iReport制作交叉表CrossTabs.docx》由会员分享,可在线阅读,更多相关《用iReport制作交叉表CrossTabs.docx(24页珍藏版)》请在冰豆网上搜索。

用iReport制作交叉表CrossTabs.docx

用iReport制作交叉表CrossTabs

用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交叉表向导(Crosstabwizard)

为了说明怎么让一个crosstab工作起来,我们将使用向导创建一个crosstab,当我们在工具条里选择crosstab元素并将其添加到报表中时crosstab的向导会自动启动。

还是以DoradoSample里提供的hsql数据里的employee报为例,我们使用包含下面查询语句的空报表开始:

Select*fromemployee

我们把crosstab放在报表的底部:

summaryband

图16.1

在第一步里我们需要选择一个dataset来填充crosstab,我们这里使用主报表里提供的dataset,点击下一步继续。

图16.2

在第二步里我们需要定义至少一个行分组.我们这里选择对所有记录使用DEPT_ID进行分组。

这样就意味着crosstab的每一行将会采用一个明确的部门编号,这样JasperReports将会使用部门编号对数据集里的数据进行重新整理计算。

使用向导,我们可以定义两个行分组,这是使用向导的局限性所在,事实上,如果你需要的话你可以通过Crosstab的属性设置窗口定义若干个行和列的分组。

点击下一步继续。

和定义行分组一样,从这里我们可以定义两个列分组,这里我们仅使用一个列分组,使用数据中的DEGREE字段对数据进行分组。

该字段的含义是学历,这就表示,我们要做的这个交叉报表是用来计算不同部门员工在学历方面的人数分布情况。

图16.4

是时候定义detail数据了,一般的,这个detail是使用类似根据country,year得到orders总数或者是相同组合的物品总数的一个聚合函数的计算出来的结果值。

我们这里选择打印员工的数量(Detailfield:

ordered,function:

count)。

点击下一步继续。

图16.5

最后一步我们可以为crosstab的布局设定一个布局。

我们可以设置是否能看到表格线、或者是否包括行和列总数统计之类。

我们这里全部选择。

点击finish

注意当一个crosstab添加到一个报表中后,会自动在设计窗口中添加一个用来编辑当前crosstab的tab页窗口。

图16.6

当点击crosstab的tab页,两个新的属性窗口将会被添加在窗口的左边和右边:

一个crosstab的结构树,用来显示crosstab的当前选中单元格和帮助相关信息。

一个是crossstab对象列表用来显示和该CrossTab相关的一些variables或fields等。

当点击工具条上的启动按钮后,我们将可以看到引擎生成的如下效果的报表:

图16.7

最后一列包含每一行交叉所有列的总计,最后一行包含每一列交叉所有行的总计。

16.2列,行,单元格(Columns,rows,cells)

一个crosstab至少必须有一个行分组和一个列分组,每一个行和列的分组都有一个可选的行/列的统计。

下面图中所示的是一个基本的由一个行列分组构成的crosstab。

Crosstabheadercell

Columngroup1header

Columngroup1totalheader

Rowgroup1header

detail

Colgroup1total

Rowgroup1totalheader

Rowgroup1total

Rowgroup1total/columngroup1total

当再次添加一个行分组时,这个crosstab将会显示出如下效果:

Crosstabheadercell

Columngroup1header

Columngroup1totalheader

Rowgroup1header

Rowgroup2header

detail

Colgroup1total

Rowgroup2totalheader

Rowgroup2total

Rowgroup2total/columngroup1total

Rowgroup1totalheader

Rowgroup1total

Rowgroup1total/columngroup1total

16.2.1行和列(Rowsandcolumns)

一个行或列的分组可能通过crosstab的属性窗口来对它进行修改(在crosstab编辑器右键菜单里选择Crosstabproperties)。

图16.8

点击“rowandcolumngroups”的标签页。

在这里我们可以看到已经定义好的行或列的分组。

图16.9

添加一个新的分组请点击名为Add的按钮。

图16.10

所有分组必须有一个唯一的名称。

当你添加或修改一个行分组时,你可以设置rowgroupheader的宽度。

ROWGROUPWIDTH

 

 

Columngroup1header

Columngroup1totalheader

Rowgroup1header

detail

Colgroup1total

Rowgroup1totalheader

Rowgroup1total

Rowgroup1total/columngroup1total

“bucket”是分组的标准,它通过一个java类来定义。

在一个bucket表达式里,你可以使用主报表里所有的fields/variables/parameters。

但是,如果你选择使用subdataset来填充crosstab,那么必须使用subdataset里提供的fields/variables/parameters。

一个header的单元格增长依赖于它所跨越的行数。

你可以选择多个元素放置在header里。

top

middle

bottom

stretch

最后,你可以选择是否打印出总计的结果。

这些选项是:

None:

没有总计行被打印

Start:

总计行打印在detail行之前

End:

总计行打印在detail行之后

创建column的group是非常简单的。

定义columngroup时你可以定义column的高度来替代行高(看下图)

Columngroupheight

 

Columngroup1header

Columngroup1totalheader

Rowgroup1header

detail

Colgroup1total

Rowgroup1totalheader

Rowgroup1total

Rowgroup1total/columngroup1total

当Bucket在行分组里时,header的单元格内容的定位相似。

但是在这个用例中,details可以改变header宽度而不是高度。

left

center

right

stretch

再一次,如果打印总计列的话,你可以做一些选择。

各选项如下:

None:

没有总计列被打印

Start:

总计列在detail列之前打印

End:

总计列在detail列之后打印

列和行的高度可以很容易的在crosstab编辑器里通过鼠标拖曳表格线的方式改变。

图16.11

当一个行或列添加到crosstab里时,一个特殊的用来引用bucket表达式的变量将要被创建。

它和新的group有相同的名称。

你可以从crosstabobjects标签里通过查找绿色小点的方式来定位这个bucketvariable。

图16.12

iReport为group创建新的headercells是很简单的,这个操作不需要添加任何新的额外元素到crosstab里。

你可以根据你的喜好来填充cells,最好的方式是通过拖曳把bucket从crosstabobjects列表拖到新的单元格里。

图16.13

图16.14

在上图中,你可以看到加在一个新加的嵌套在columngroup里四个新添加到crosstab里的单元格,groupheader单元格,grouptotalheader单元格。

你可以使用”up”和”down”按钮来更改你的group的嵌套顺序。

图16.15

下图中所示的crosstab就是在图16.14在SEX的group被向上移后的效果。

图16.16MONTHgroup向上移后的效果

16.2.2单元格(cells)

每一个行和列的交叉处定义一个单元格,我们有header单元格,total单元格,detail单元格和一个可选的“when-no-data”单元格。

单元格可以包含一个类似于textfields,statictexts,rectangle,images之类元素的集合,但是他们不能包含一个SubReport,一个chart,或者一个crosstab。

你可以去修改每一个单元格的背景色和单元格的borders:

移动鼠标在一个单元格上并且按右键在弹出的菜单中选择“cellproperties”打开单元格属性编辑窗口。

从这个对话框中你可以修改单元格的外观。

图16.18

16.2.3特殊单元格(Specialcells)

如果一个crosstab不能包含一些数据,你可以选择打印别的东西来替代。

例如,你可以包含一条消息,方法是,你必须编辑“when-no-data”单元格。

在crosstab上右键勾选弹出菜单中的“when-no-datadefaultcell”复选框。

这个操作完成后将会出现一种很明显的编辑模式,你可以操作“when-no-data”单元格的内容。

图16.19激活“when-no-data”单元格的编辑模式

“when-no-data”单元格和crosstab元素有相同的尺寸。

如果没有数据展示的话它将替代crosstab打印。

单元格橙色的边框标志出你可以编辑的单元格区域。

可以在这个单元格里添加一个或多个元素。

在一个crosstab里,所有的元素关联一个单元格,如果一个元素在单元格外面或部分在单元格外面,这是不正确的放置方式并且当编译的时候jasperreports将会抛出异常。

iReport在界面中标识这个错误会以红色的框显示。

16.2.4度量(Measures)

在crosstab里每一个元素的表达式(如textfield表达式)可以包含唯一的measure。

在这种情况下,你可以直接使用fields,variables或parameters。

一个measure和variable一样是一个对象。

要建立一个measure,请打开crosstab属性窗口(在crosstab编辑器上右击,选择crosstabproperties)并且到measure标签页。

图16.20

点击Add按钮,创建一个新的measure。

Measure的属性窗口将显示,你最少应该去设置它的name,classtype和expression。

在measure里你可以使用fields,variable和parameters

一个measure可以存储一个来自你代码中的实际的值(将calculationtype设为nothing)或者一个类似于用count,sum等计算出来的值。

对于每一个measure你可以提供一个自定义的incrementer类(一个继承自

net.sf.jasperreports.engine.fil.JRIncrementerFactory

的类)去实现特定的increment方法。

图16.21measure属性窗口

这里的“percentageof”选项允许你选择表现变量最终值的百分比。

你可以提供一个特殊类来计算百分比的值,此时这个类必须实现net.sf.jasperreports.crosstabs.fill.JRPercentageCalculator接口。

16.2.5Crosstabelementproperties

在主设计窗口中双击crosstab元素将打开elementproperties窗口,点击crosstab标签。

图16.22crosstabelementproperties

Repeatcolumnheaders:

如果勾选,当crosstab完全添加到页面中时列的header将会被重复打印。

Repeatrowheaders:

如果勾选,当crosstab完全添加到页面中时这个行headers将会被重复打印。

Columnbreakoffset:

当crosstab超过页面宽度时它指定上一块的数据与下一块之间的空白间隔。

图16.23列被打断后

16.2.6交叉表参数(Crosstabparameters)

你可以使用元素属性窗口里的crosstabparameter表格建立一个crosstabparameter并且设置一个crosstab的parameter同时为其设置一个默认的表达式(图16.22),要添加一个parameter,请点击Add按钮,这个crosstabparameter窗口将会出现。

图16.24

对于一个parameter,你必须为其指定name,classtype,同时你还可以为其指定一个可选的可以包含主报表中任意一个fields,variable,parameters的表达式。

警告:

使用dataset的过滤查询,你必须用定义在crosstabproperties窗口里的dataset启动parameters,不能用crosstab里的parameters.

你可以在crosstabobjects窗口里看到crosstabparameters的列表,他们用红色的点标记出来。

图16.25

你可以在启动时用一个MAP来设置crosstabparameters里声明的值。

在这个用例中,你需要在elementproperties窗口里提供一个合法的parametermapexpression。

16.2.7交叉表数据(Crosstabdata)

你可以用主报表或一个subdataset来填充一个crosstab。

在后面的例子中,在crosstabproperties窗口“crosstabdata”标签里你必须指定要启动的dataset。

图16.26

如果你的数据是pre-sorted.你可以勾选“Dataispresorted”的checkbox以使得填充数据的处理速度加快。

Resettype/group和incrementtype/group选项可以用来定义当集合类型的数据需要重置并且当添加一条记录到你的dataset。

关于怎么设置dataset的启动参数请参考subdataset的相关章节。

16.2.8交叉表合计变量(crosstabtotalvariables)

Crosstabvariables是内置的对象,可以结合数据在不同的聚合水平使用在crosstabtextfield的表达式里。

图16.27

对于每一个尺寸,jasperreports创建variables根据每一行或列存储measure的合计值。

下面的例子是一个用来显示不同学历不同部门的员工数的报表.

图16.28

图16.29

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1