一、变量(Variables)
Variables是用来存储对某些字段计算后的结果,比如sum等,和fields、parameters一样,variables也是有数据类型的,你必须为一个Variables实例声明一个Java类型,下图显示了如何创建一个新的Variables,下面我们来了解下每个字段的意思:
Variable name:variable的名称,我们可以在表达式中通过下面的方法来引用一个Variable.
$V{variable name}
Variable Class type:variable也可以使任意一个java类型,在下拉框里你可以看到大多数常用的类型,如java.lang.String等。
Calculation Type:一个计算类型可以用来计算结果,当一个预先定义的值是"nothing"时,那它的意思就是不做任何计算,ireport会根据指定的计算类型和从数据源获取的每一条记录计算出结果,然后去更改variables的值,做一个变量的计算意为着去执行一个表达式,如果计算类型为nothing,那么ireport将会根据variable expression为variable赋值,计算类型列举如下:
类型 | 说明 |
Nothing | 不做任何计算 |
Count | 对记录集数量进行循环累加(计算有多少条记录),这和sum不一样,sum的计算是针对数字的,会对数字进行累加操作。 |
Distinct Count | 也是对计算有多少条记录的累加操作,只是在累加过程中会忽略已经出现的记录(比如某个字段的值已经出现后就不会再记录) |
Sum | 添加每一次表达式(这里的表达式只能是数字类型)迭代的结果到变量中 |
Average | 它用算术的方法来计算表达式累加结果的平均值 |
Lowest | 返回表达式最小值 |
Highest | 返回表达式最大值 |
StandardDeviation | 根据表达式所有值返回标准方差 |
Variance | 返回表达式接收到的值的变化 |
System | 不做任何计算并且表达式也是没有价值的,在这样的用例中,报表引擎仅仅保存内存中variable的最后的值。 |
Reset Type:重置类型,表示一个变量在什么时候做重置操作,reset类型如下:
类型名称 | 说明 |
None | 任何时候都不做重置操作 |
Report | 在报表创建的时候Variable才会对表达式进行初始化 |
Page | Variable的初始化在每一页都做一次reset操作 |
Column | Variable的初始化在每一列都做一次reset操作(这里的Column指的是report里的page的column,每个报表的column可以通过报表的Editàreport properties窗口进行修改) |
Group | Variable的初始化在每一个组都做一次reset操作 |
Reset Group:如果group reset type被勾选,这里就要选择group名称(关于group可以参考后面的章节)
Increment:它指定当一个variable值被评估或者当你想要这个组采用类似于subtotals或者averages来计算,increment类型可以参考下面的的表。
incremenet Group:如果这个group的increment type被勾选它将指定这个组决定variable的increment。
custom incrementer Factory Class:指定一个实现了JRIncrementerFactory接口的java类名称,通常用来定义一些诸如sum之类的非数字类型的操作。
Variable Expression:它是一个java的expression,用来标示variable每一次迭代的值。
initial value Expression:它是一个为variable初始化时采用的expression。
内置的variables和parameters一样,ireport提供了一些内置的variables,这些变量是只读的,不能被用户修改,如下表所示:
Variable 名称 | 说明 |
PAGE_NUMBER | 它包含当前页的页。 |
COLUMN_NUMBER | 它包含当前的列数。 |
REPORT_COUNT | 当前的记录数目 |
PAGE_COUNT | 当前的页号 |
COLUMN_COUNT | 当前的列号 |
<group name>_COUNT | 在<group name>里的记录总数 |
二、栏
在本节中,我们将解释如何用iReport去管理bands,在前面的章节中我们介绍了报表的结构,在本章中我们将要看如何使用bands来划分报表。
2.1、栏(Bands)
iReport把一个报表划分成七个主要的bands和一个名为backgroup的band(一共是八个bands),每当我们添加一个group时就会有两个新band添加到报表当中:group footer bands和group header bands.
通过上图中,我们可以修改左边列表窗口中的任何一个band属性,比如它的高(以像素为单位)。Print When expression表示我们可以再这里输入一个表达式,这样我们可以根据表达式的值来控制当前的这个band是否输出,这里需要注意的是Print When expression里必须返回一个java.lang.Boolean类型的对象,如:New Boolean(true),上面的表达式说明这个bands总会被打印(如果我们什么都不输入这个就是默认值),在表达式里可以使用fields、variables、parameters,根据这个特性我们可以通过相关的fields、variables、parameters来灵活的控制当前的band是否可以输出,比如下面的代码:
($F{SALARY}.intValue()>4000?new Boolean(true):New Boolean(false));
上面的代码说明了当salary的值如果大于4000就输出当前的band否则就不输出当前的band.
把鼠标移到bands的边上我们可以鼠标拖拉的方式改变band的大小,以此来适配band里面的内容。