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,设置树数据集就好了,此时就可以正常生成树数据集了,如图:
其余操作和本文描述一样了,只不过是通过存储过程实现组织树报表,需要增加调用存储过程这步。
本文首发于CSDN:http://blog.csdn.net/szd_happy/article/details/72865899
相关推荐
动态列报表,使用参数控件联动筛选需要展示的列的数据,该资源包下包含了已经完成的模板和JS以及所使用的函数公式。
3. 制作报表 8 3.1. 报表分类 8 3.1.1. 普通报表 9 3.1.2. 填报报表 9 3.2. 报表设计 9 3.2.1. 新建模板 9 3.2.2. 整体设置 10 3.2.3. 模板设计 22 3.2.4. 参数设计 40 3.3. 报表效果预览 50 3.3.1. 设计器预览 50 ...
FineReport功能说明:、 多 sheet 报表设计:支持在设计器中创建多 Sheet 报表,导入导出多Sheet 的 Excel文件。 2、 多报表运行环境:能在多个报表运行环境中切换设计报表。 3、 多数据源关联:同一张报表可以从...
报表开发工具FineReport中如何把报表放到网页中显示
FineReport报表软件API源代码之程序数据集、自定义函数和导出API.docx
报表开发工具FineReport中如何把报表放到网页中显示
FineReport报表制作流程图解,里面详细介绍了怎样制作报表,有详细的图例。
如何修改FineReport报表平台中数据决策系统登陆地址
FineReport常见的数据集报错错误代码和解释
在报表开发工具FineReport中,报表的执行过程大体可分为两步:1、报表计算;2、页面转换。
【】java报表插件FineReport物流行业报表平台建设的解决方案【】js统计图表工具FineReport化繁为简搭建智能报销系统【】js统计图表工具FineReport实例:采购部报表数据决策平台【】农商行信息化建设过程中存在哪些...
帆软报表FineReport中数据连接中的Tomcat配置JNDI连接,要通过JNDI方式定义数据连接,首先在Tomcat服务器配置好JNDI,然后在设计器中直接调用JNDI的名字,即可成功使用JNDI连接,本文进行详细演示。
FineReport报表工具提供了易用且高效率的报表设计方案,采用主流的数据双向扩展,真正无编码形式设计报表模板;拥有强大的报表展示功能,并且提供完善的报表权限管理,报表调度管理;具有完备的报表填报功能,支持...
本代码主要开源了java报表工具中报表调用部分的代码,通过该开源代码,你可以了解报表工具的内部原理,掌握国内主流java报表工具的各类接口使用方法,并运用该接口对软件产品或项目中的个性化的需求进行二次开发。...
压缩文件中为已完成cpt模板案例,多源分片报表数据来源是多个数据集构成的集合,同时报表的纵向或横向或双向同时被分成了多个区域,能够很好的应用广泛的交叉报表。
finereport报表工具参数控件取值与置数
在用报表开发工具FineReport设计的web报表中,给iframe设置src嵌入某个报表时,往往会给报表传递初始的参数值,例如:
在MIS 系统的设计中, 报表输出是不可缺少的功能, FineReport 是一个非常不错的报表工具。研究了通过FineReport 设计动态列报表的技术要点。
报表工具FineReport中数学和三角函数
jQuery是一个快速的,简洁的JavaScript库,能让用户更方便地处理...因为FineReport报表解析后最终成为一个html页面,因此可以使用JS对报表进行各种处理,可以选择使用jQuery框架的所有方法对报表进行操作。