发新话题
打印

怎样从数组中取值作为表头

我帮你将要实现的报表效果贴出来,也可以借此帮助到其他网友.
附件: 您所在的用户组无法下载或查看附件

TOP

从上图分析,这实际上是一个简单的交叉报表,行,列上各有一个分组。
列上有一个分组,即班次分组,行上有一个地点分组 。
你的数据集应该有以下结构,通过这个,可以在已知地点,班次的情况下,得到最大值等信息。
--------------------------------------------------------
地点 |  班次 |   最大值 |   最小值 |   瓦斯员
--------------------------------------------------------

所以你可以建如附件所示的数据及超级表格组件。

这里需要注意的是列上班次信息,并不是来自于数据库字段,而是指定的数组(多数是通过参数形式从web上根据用户选择转换而来),该怎么办? 简表的方法是,在绑定选择时,直接以=开始,后面跟java脚本即可生成一个数组即可,当然,数组类型必须于ds的班次字段类型一致。
附件: 您所在的用户组无法下载或查看附件

TOP

附件是示例模板,基本实现上述需求,供参考.
附件: 您所在的用户组无法下载或查看附件

TOP

请到 www.jatools.com/jor 下载最新版的jor,可以很方便地做你只有时间字段的报表,

主要是增加自定义字段功能,增加数组节点功能,
自定义字段功能,参考: http://www.jatools.com/doc/guide/jrcrtfz0514.htm
数组节点功能参考: http://www.jatools.com/doc/guide/crtcos0608.htm
附件: 您所在的用户组无法下载或查看附件

TOP

我们可以从一个日期型字段中,提取一部分信息作成一个新的字段,以便于对其分组。更一般地,我们需要从一个非日期型的字段中提取信息,这时,我们可以使用公式来抽取信息。
考虑有一个数据集,如下图所示,记录了学员姓名及培训天数。如果我们需要做一个报表,把培训天数30天以下的学员,归为C级学员;30天以上60天以下归为B级学员;60天以上归为A级学员。这时,我们应该创建一个用公式定义的字段,方法如下:

  • 将上述数据集作成数据集节点;
  • 选中该数据集节点,选中右键菜单项自定义字段后,在自定义字段对话框中,点击新建按钮,选择下拉菜单中的公式区间字段,带出如下对话框:

    名称,即是你自定义字段的名称,注意不要与现有的字段名称重复;
    新增,即新增一个公式区间。点击新增后,会出现公式区间定义对话框,如下图所示,区间条件是一个返回值为布尔型的表达式,多数情况下是对数据集其他字段的测试,本例是对“培训天数”字段的测试。区间值为测试为真时的取值。

    编辑,你可以编辑选中的区间公式;
    上移,下移:如果你定义了多个区间字段公式,你可以选中某一公式,移动其位置以改变测试顺序;

    按上图所示设置区间公式,本字段有三个区间,对区间条件的测试是顺序进行的,如果第一个条件不满足,再测试第二个区间,直到测试为真。这个字段的取值就是那个条件为真的区间值。注意,最后一个区间条件为空,等价于true,表示测试为真,所以如果以上测试条件都不满足,则属于都属于A级学员;
  • 按时间级别字段,为本数据集节点新增一个分组节点学员级别;在分组节点下,创建Row节点。这时,预览可得下图(a)所示模型;
  • 如下图(b)所示创建报表模板;
  • 预览可得如下图(c)报表。

                                  图 10

TOP

从图5 可见,该报表1994年中只列出了8、12两个月的数据,因为这一年只有这两个月发生了销售。有时,为了对比分析,要求不管有没有销售都需要列出1到12月,要实现这个功能,我们要借助新的节点类型,数组节点。
你可以在模型中,用脚本定义一个数组节点。如果一个报表对象绑定到该数组节点上,则循环次数取决于该数组的元素个数。
  • 右击图 4(a)所示的root节点,在弹出式菜单中,选择添加java数组,弹出如下java数组对话框,设名称为月,设公式为[1..12],表示创建一个从1到12数字为元素的数组;
  • 得数据模型定义如下图(a),得模型数据如下图(b)。由图可见,月节点定义有12个数据节点。
  • 将最里面的行板,绑定改为新定义的那个数组节点,如下图所示:
  • 预览报表可得下图报表,从图中可见,1994年,确实显示了12个月的数据,但根据图 5所示报表可知,94年12月份华东地区,应该有销售额为2240,但本图显示为空,为什么?
提示:
  • 数组节点定义,在模型数据中的节点数取决于数组元素个数;
  • 数组节点的值(value()方法得到),为数组元素的值。本例中是整型值,1,2,3…12;
  • 数组节点的键值(key属性得到),也是数组元素的值;
  • 数组节点返回的类型,除了可以是数组外,也可以是类型为List、Iterator、ResultSet、TableModel的对象,这些类型对象的用法将在后面陆续介绍。
从提示2可知,由于最里面的那个行板,绑定到了键值分别是1,2,3,4,...12的数组节点,所以交叉部分的单元格公式是=销售表_.金额.sum(),当打印到94年,12月份,华东单元格时,行键变为1,列键变为华东,所以此公式等价于 =销售表_.金额{1}{"华东"}.sum(),这意味着要找到销售表中,年份是1,地区是华东的总销售额,显然,数据集中不存在这样的分组,所以显示为空。
虽然,任何节点都有一个默认的键值,比如,数组节点默认的键值,就是数组元素的值。但你可以通过设置节点的键值公式,改变键值,对于本例来说,你可以改变数组节点的键值公式,如下表所示,该键值公式意味着,打印与数组节点绑定的行板时会按这个公式取节点的值键,分别为{1994,1}、{1994,2}等。
new Object[]{$年份,$月}    // 用年份分组节点的值,和月数组节点的值,作为数组节点的键值要设置键值公式,你可以选中需要设置键值公式的节点,选择右键菜单设置键值公式,带出如下键值设置对话框:

你可以直接在键值公式文本框中,输入键值公式,也可以点击=(x)按钮后,在公式编辑器中定义键值公式,你也可以使用为空按钮,清空当前定义的键值公式。
下面是经过对数组节点,设置键值公式后,得到的正确报表:

TOP

发新话题
最近访问的版块