FineReport中如何制作树数据集来实现组织树报表

1. 问题描述

FineReport组织树报表中由id与父id来实现组织树报表,若层级数较多时,对每个单元格设置过滤条件和形态会比较繁琐,因此FineReport提供了一种特殊的数据集——树数据集,只需要简单的设置就能自动递归出层级,方便的实现如下图组织树报表:

图一

 

图二

2. FineReport构建树

2.1 新建报表,添加数据集

新建工作薄,添加数据集ds1取出原始数据,SQL语句为SELECT * FROM 公司部门。

2.2 定义树数据集

1)根据父字段构建树

使用情形:原始表结构中符合ID、parentID结构,我们可以通过父ID这个字段生成树,添加树数据集,如下图:


2)根据数据长度构建树

使用情形:原始表结构中所有ID都在一列中,且没有父ID字段,但是ID是有规律的,每组的长度相同,且子级的前N位就是父级编号,添加树数据集,如下图:


2.3 预览数据

预览树数据集,可看到已自动生成递归树数据,FR_GEN_0为最高层,依次往下,如下:

3. 示例一纵向组织树

按照下图所示将对应的数据列拖入到单元格中,并将A2单元格的左父格设置为A1,A3单元格的左父格设置为A2:

3.1 条件属性

有上面预览数据可以看到从二层FR_GEN_1开始,就会有空白数据,这是因为数据库中存储的数据有上一级部门本身的部门名称和部门ID,其上一级部门的部门级数会低一级,比如说上述数据的第一行为总部,虽然总部下面有子部门,但是数据库中还是要存储总部这个部门的部门名称和部门ID的,总部对应的级数为一级,那么其对应的数据记录行里面就只有FR_GEN_0层,下面的FR_GEN_1和FR_GEN_2这两层就会没有数据,显示为空白。

在模板制作过程中,从第二层级开始就会有空白数据,需要将空白数据隐藏掉,选中A2和A3单元格,添加条件属性,当数据为空时隐藏该行,如下图:

注:如果组织结构的层级结构不确定,即有的层级有子层,有的层级没有子层时,其组织树报表的实现方式请查看不规范组织树报表

3.2 其它设置

由于自动生成的字段是编码,可以使用数据字典将其转为对应的部门名称,如下图:

3.3 保存与预览

保存模板,点击分页预览,效果如图一

4. FineReport示例二横向组织树

按照下图所示将对应的数据列拖入到单元格中,在右侧单元格属性表-扩展属性中将B1、C1单元格的扩展方向设为横向,

并将B1单元格的左父格设置为A1,C1单元格的左父格设置为B1:

4.1 条件属性

有上面预览数据可以看到从二层FR_GEN_1开始,就会有空白数据,这是因为数据库中存储的数据有上一级部门本身的部门名称和部门ID,其上一级部门的部门级数会低一级,比如说上述数据的第一列为总部,虽然总部下面有子部门,但是数据库中还是要存储总部这个部门的部门名称和部门ID的,总部对应的级数为一级,那么其对应的数据记录列里面就只有FR_GEN_0层,下面的FR_GEN_1和FR_GEN_2这两层就会没有数据,显示为空白。

在模板制作过程中,从第二层级开始就会有空白数据,需要将空白数据隐藏掉,选中B1和C1单元格,添加条件属性,当数据为空时隐藏该列,如下图:

4.2 其它设置

由于自动生成的字段是编码,可以使用数据字典将其转为对应的部门名称,如下图:

4.3 保存与预览

保存模板,点击分页预览,效果如图二。

5.FineReport示例三存储过程创建树数据集

5.1问题描述

存储过程直接生成树数据集无效,如图:

5.2解决思路

先建立数据库查询数据集ds1,然后数据集ds1里 “call 存储过程名 存储过程参数”,再用ds1生成树数据集 。

若是调用数据库存储过程取数,官方只支持查询语句select进行取数,其他写法(例如下面的写法), 返回的结果不能保证,不建议使用 :

具体操作步骤如下:

新建一个数据库查询,输入:{call username.package.procedure(‘${p1}‘,‘${p2}‘,‘${p3}‘,?)},然后设置下参数的初值,这样就产生了一个普通的数据集ds1,如图:

再通过数据集ds1,设置树数据集就好了,此时就可以正常生成树数据集了,如图:

其余操作和本文描述一样了,只不过是通过存储过程实现组织树报表,需要增加调用存储过程这步。

本文摘自博客园:http://www.cnblogs.com/laoA188/p/6944560.html

时间: 2024-12-20 01:05:13

FineReport中如何制作树数据集来实现组织树报表的相关文章

FineReport中树数据集如何实现组织树报表

组织树报表中由id与父id来实现组织树报表,若层级数较多时,对每个单元格设置过滤条件和形态会比较繁琐,因此FineReport提供了一种特殊的数据集--树数据集,只需要简单的设置就能自动递归出层级,方便的实现如下图组织树报表: 图一 图二 构建树 新建报表,添加数据集 新建工作薄,添加数据集ds1取出原始数据,SQL语句为SELECT * FROM 公司部门. 定义树数据集 1)根据父字段构建树 使用情形:原始表结构中符合ID.parentID结构,我们可以通过父ID这个字段生成树,添加树数据集

帆软报表FineReport中数据连接之Websphere配置JNDI连接

以oracle9i数据源制作的模板jndi.cpt为例来说明如何在FineReport中的Websphere配置JNDI连接.由于常用服务器的JNDI驱动过大,帆软报表FineReport中没有自带,所以可以采取下面的方法来使用服务器中的JNDI连接.原理:先用JDBC连接到数据库,建立数据库连接,然后用SQL或者其他方法创建数据集,使用数据集制作报表,然后把建立的数据库连接从JDBC连接改成JNDI连接,然后配置好服务器中的JNDI连接,然后按照我们下面章节所说的部署好服务器,这样就可以通过W

如何在FineReport中解析数据库内XML文件

在数据库表中,其中字段XML所存的为xml格式数据在表xmltest中.那么在使用该表进行报表制作时,需要将存于xml字段中的值读取出来作为报表数据源. XML每条记录数据格式如下: <Field><Name>MemoryFreeSize</Name><Type>int</Type><Value>1962</Value></Field> <Field><Name>MemoryTotalS

FineReport中如何用JavaScript自定义地图标签

在日常使用地图过程中,通常会遇到地图标签,提示点等显示不满足我们的需求,需要进行JavaScript代码编写. 例如:在使用地图过程中,会发现很多地名显示的位置偏离.这时候就需要使用JavaScript进行调控.以黑龙江和内蒙古为例,来介绍下如何在FineReport中利用JavaScript自定义地图标签. 新建地图 以区域地图为例,新建表单,拖入地图(新特性)组件,地图边界选择区域地图下的中国(省级): 数据准备 新建工作簿,添加数据集ds1,SELECT*FROM地图1,选中图表,选择图表

FineReport中如何实现自动滚屏效果

对于一些特殊的模板,可能为了展示的更加丰富.全面会在一个页面放置很多图表.表格等内容.由于内容过多,超出了浏览器窗口的大小导致内容展示不全的情况.这样我们就需要用到JS滚屏效果来解决,这里主要介绍在FineReport中的具体制作方法. 添加加载结束事件 点击菜单模板>模板web属性>分页预览设置,选择"为该模板单独设置",添加一个"加载结束"后事件,如下图所示: JS代码如下: //从页面加载结束后延迟2000MS执行事件(滚动) setTimeout

制作coco数据集以在Detectron框架上进行数据的训练

图片预处理 首先,根据Detectron官方介绍,数据集一般为jpg格式,分辨率一般为800*600左右. 在这里我们可以photoshop批量对图片进行处理 使用labelImg对数据集进行标注. 安装labelImg之后,打开文件目录,找到data文件夹下的predefined_classes.txt并打开,修改里面的内容,将自己定义的标签名添加到下面,这样在标注图片的时候,就会显示标签供选择. 打开labelImg Change Save Dir 为你选择保存XML文件的目录,Open D

浅谈二维中的树状数组与线段树

一般来说,树状数组可以实现的东西线段树均可胜任,实际应用中也是如此.但是在二维中,线段树的操作变得太过复杂,更新子矩阵时第一维的lazy标记更是麻烦到不行. 但是树状数组在某些询问中又无法胜任,如最值等不符合区间减法的询问.此时就需要根据线段树与树状数组的优缺点来选择了. 做一下基本操作的对比,如下图. 因为线段树为自上向下更新,从而可以使用lazy标记使得矩阵的更新变的高校起来,几个不足就是代码长,代码长和代码长. 对于将将矩阵内元素变为某个值,因为树状数组自下向上更新,且要满足区间加法等限制

详细解密FineReport中的报表执行过程

在报表开发工具FineReport中,报表的执行过程大体可分为两步:1.报表计算:2.页面转换. 报表计算过程:先读取我们的sql语句,将完整的sql语句传至数据库服务器,由数据库返回数据给报表服务器,报表服务器进行数据列的扩展.汇总.关联.公式运算等计算,最终生成报表结果. 页面转换过程:报表计算完成后生成xml页面,需要转换为html页面才能在浏览器中查看. 针对这一过程FineReport是可以实时监控的.监控方法是将服务器的log输出级别设为“普通信息”,就能在控制台上看到每一步使用的时

FineReport中hadoop,hive数据库连接解决方案

1. 描述 Hadoop是个很流行的分布式计算解决方案,Hive是基于hadoop的数据分析工具.一般来说我们对Hive的操作都是通过cli来进行,也就是Linux的控制台,但是,这样做本质上是每个连接都存放一个元数据,各个之间都不相同,这样的模式用来做一些测试比较合适,并不适合做产品的开发和应用. 因此,就产生了Hive的JDBC连接的方式.本文介绍报表开发工具FineReport中,hadoop.hive数据库连接方法. 2. 步骤 Hive提供了jdbc驱动,使得我们可以连接Hive并进行