Board logo

标题: 怎样从数组中取值作为表头 [打印本页]

作者: echoplp    时间: 2010-6-30 16:21     标题: 怎样从数组中取值作为表头

需要实现报表,其中列头的个数是不定的,但是并不是从数据库获取字段来确定的。
比如,需要按照班次来确定列头,班次如果为4,说明分成4班,则为4个列头,分别为1,2,3,4,或者其他指定值。
所以我的想法是根据设定一个int型参数代表班次,另一个List型参数代表列头值,
根据班次往List 里面添加指定个数的列头,然后把列头文本框的值设成List类型的这个参数,
也就是相当于根据数组的个数确定列头的个数。
可是我这样做的时候,结果在列头显示的是类似于Ljava.lang.String893... 的数据,好像取的是地址吧?
请问该怎么解决这个问题呢?
谢谢
作者: admin    时间: 2010-6-30 18:09

我帮你将要实现的报表效果贴出来,也可以借此帮助到其他网友.
作者: echoplp    时间: 2010-6-30 18:35

好的,谢谢管理员。
管理员对我的问题有什么建议或是解决方案吗?
有做过类似报表的好心人也帮忙解答一下,谢谢了。
作者: admin    时间: 2010-6-30 18:54

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

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

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

附件是示例模板,基本实现上述需求,供参考.
作者: echoplp    时间: 2010-6-30 20:16

谢谢管理员的解答。
但是问题是我的数据库结构里面并没有班次这个字段,只有时间字段。
当用户生成日报的时候,可以指定分成几个班次来显示信息,
比如2楼报表实例有3班,则每班8个小时,用户可能在生成报表的时候指定6班,则每班在4个小时内。
而这个在数据库里面并不能指定。
作者: echoplp    时间: 2010-6-30 21:32

多谢管理员,原来可以直接将绑定数据节点属性设成一个数组,这样就可以根据数组大小显示次数。
但是我现在还有一个问题,就是我的列头不止一层,第一层绑定到数组,第二次绑定到数据库字段,
所以第一层输出层次不对,我想是因为第二层的绑定节点不是第一层绑定节点的子节点。
但是这时候怎么解决呢?如图V1所示。

另外还有一个问题请教,如果我需要取时间字段值在某一段时间内的记录进行运算,类似于
地点测试气体时间.值{"北京"}{"CH4"}{......}.max(),怎么在{}里面设置范围限制呢?
还是在其他地方设置范围限定?
作者: admin    时间: 2010-6-30 22:11

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

主要是增加自定义字段功能,增加数组节点功能,
自定义字段功能,参考: http://www.jatools.com/doc/guide/jrcrtfz0514.htm
数组节点功能参考: http://www.jatools.com/doc/guide/crtcos0608.htm
作者: admin    时间: 2010-6-30 22:19

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


作者: admin    时间: 2010-6-30 22:23

从图5 可见,该报表1994年中只列出了8、12两个月的数据,因为这一年只有这两个月发生了销售。有时,为了对比分析,要求不管有没有销售都需要列出1到12月,要实现这个功能,我们要借助新的节点类型,数组节点。
你可以在模型中,用脚本定义一个数组节点。如果一个报表对象绑定到该数组节点上,则循环次数取决于该数组的元素个数。
提示:
从提示2可知,由于最里面的那个行板,绑定到了键值分别是1,2,3,4,...12的数组节点,所以交叉部分的单元格公式是=销售表_.金额.sum(),当打印到94年,12月份,华东单元格时,行键变为1,列键变为华东,所以此公式等价于 =销售表_.金额{1}{"华东"}.sum(),这意味着要找到销售表中,年份是1,地区是华东的总销售额,显然,数据集中不存在这样的分组,所以显示为空。
虽然,任何节点都有一个默认的键值,比如,数组节点默认的键值,就是数组元素的值。但你可以通过设置节点的键值公式,改变键值,对于本例来说,你可以改变数组节点的键值公式,如下表所示,该键值公式意味着,打印与数组节点绑定的行板时会按这个公式取节点的值键,分别为{1994,1}、{1994,2}等。
new Object[]{$年份,$月}    // 用年份分组节点的值,和月数组节点的值,作为数组节点的键值要设置键值公式,你可以选中需要设置键值公式的节点,选择右键菜单设置键值公式,带出如下键值设置对话框:

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

作者: echoplp    时间: 2010-7-1 16:42

谢谢管理员的解答。
但是我今天从官网下载的好像也不是最新版的,比旧版添加了数组节点功能,但是没有自定义字段功能,界面上左边没有预览视图,另外,用户手册也没有更新。麻烦管理员check一下。
再次感谢

[ 本帖最后由 echoplp 于 2010-7-1 16:46 编辑 ]
作者: echoplp    时间: 2010-7-1 17:02

me变量,有哪些可以调用的属性?
有没有更全的用户手册呢,实在是很多问题无从下手啊
作者: thanksriver    时间: 2011-10-20 11:01

谢谢分享!!!
作者: thanksriver    时间: 2011-11-28 09:25     标题: 怎样从数组中取值作为表头

谢谢分享!!!




欢迎光临 杰表技术论坛 (http://jatools.com/) Powered by Discuz! 6.1.0