用数组节点代替分组节点

从图5 可见,该报表1994年中只列出了8、12两个月的数据,因为这一年只有这两个月发生了销售。有时,为了对比分析,要求不管有没有销售都需要列出1到12月,要实现这个功能,我们要借助新的节点类型,数组节点。

你可以在模型中,用脚本定义一个数组节点。如果一个报表对象绑定到该数组节点上,则循环次数取决于该数组的元素个数。

  1. 右击图 4(a)所示的root节点,在弹出式菜单中,选择添加java数组,弹出如下java数组对话框,设名称为,设公式为[1..12],表示创建一个从1到12数字为元素的数组;

  2. 得数据模型定义如下图(a),得模型数据如下图(b)。由图可见,节点定义有12个数据节点。
  3. 将最里面的行板,绑定改为新定义的那个数组节点,如下图所示:
  4. 预览报表可得下图报表,从图中可见,1994年,确实显示了12个月的数据,但根据图 5所示报表可知,94年12月份华东地区,应该有销售额为2240,但本图显示为空,为什么?

提示:

  1. 数组节点定义,在模型数据中的节点数取决于数组元素个数;
  2. 数组节点的值(value()方法得到),为数组元素的值。本例中是整型值,1,2,3…12;
  3. 数组节点的键值(key属性得到),也是数组元素的值;
  4. 数组节点返回的类型,除了可以是数组外,也可以是类型为List、Iterator、ResultSet、TableModel的对象,这些类型对象的用法将在后面陆续介绍。

从提示2可知,由于最里面的那个行板,绑定到了键值分别是1,2,3,4,...12的数组节点,所以交叉部分的单元格公式是=销售表_.金额.sum(),当打印到94年,12月份,华东单元格时,行键变为1,列键变为华东,所以此公式等价于 =销售表_.金额{1}{"华东"}.sum(),这意味着要找到销售表中,年份是1,地区是华东的总销售额,显然,数据集中不存在这样的分组,所以显示为空。

虽然,任何节点都有一个默认的键值,比如,数组节点默认的键值,就是数组元素的值。但你可以通过设置节点的键值公式,改变键值,对于本例来说,你可以改变数组节点的键值公式,如下表所示,该键值公式意味着,打印与数组节点绑定的行板时会按这个公式取节点的值键,分别为{1994,1}、{1994,2}等。

new Object[]{$年份,$月}    // 用年份分组节点的值,和月数组节点的值,作为数组节点的键值

要设置键值公式,你可以选中需要设置键值公式的节点,选择右键菜单设置键值公式,带出如下键值设置对话框:

你可以直接在键值公式文本框中,输入键值公式,也可以点击=(x)按钮后,在公式编辑器中定义键值公式,你也可以使用为空按钮,清空当前定义的键值公式。

下面是经过对数组节点,设置键值公式后,得到的正确报表:


杰创软件·版权所有
©2008 Jatools Software Co.,Ltd.  All rights reserved .