表格制作软件FineReport教程:[10]组织树报表
下面就通过表格制作软件FineReport来简单介绍一下组织树报表。
工具/原料
表格制作软件FineReport7.1.1
大小:148.2M 适用平台:windows/linux
组织树报表示例
1、描述数据库中比较常见的一种表结构茧盯璜阝就是表中包含了id与parentid两个字段,希望根据这两个字段实现如下图所示的组织树效果:可以看到,组织的每个层次都来自于同一列部痊跬媸应门ID,即同一列的数据之间,存在包含与被包含关系,如何分别获取每一层的数据呢?
![表格制作软件FineReport教程:[10]组织树报表](https://exp-picture.cdn.bcebos.com/a151a233ec3834bb6f7841ec8714c27bd3823d2f.jpg)
3、第一层将部门ID拖拽至A1单元格,默认扩展出所有部门ID,通过过滤条件筛选出第一层部门;由墙绅褡孛数据可以芬简砝鬃看出,第一层上级ID为空,因此选中A1单元格,点击过滤,添加条件上级ID 等于 'NULL',如下图设置:注:根据数据的不同过滤条件相应改变。
![表格制作软件FineReport教程:[10]组织树报表](https://exp-picture.cdn.bcebos.com/d3c39889a146b7b1906e9c0ec77c34b33d41352f.jpg)
5、第三层第三层的原理与第二层相同,进行同样的设置即可。若数据中组织层数不止三层,可以按照相同的方法添加。注:子层单元格必须去掉将父格子作为过滤条件。
6、其他设置模板中使用的是部门ID,若要显示为相应的部门名称,可以通过数据字典进行转换。若某一层中有些有子层,有些没有子层,此时由于扩展会出现一些空白行,可以将空白行隐藏。
树数据集实现组织树报表
1、问题描述组织树报表中由id与父id来实现组织树报表,若层级数较多时,对每个单元格设置过滤条件和形态会比较繁琐,因此FineReport提供了一种特殊的数据集——树数据集,只要要简单的设置就能自动递归出层级,方便的实现如下图组织树报表:
![表格制作软件FineReport教程:[10]组织树报表](https://exp-picture.cdn.bcebos.com/3d002dbad341037d67a02ac5a9bc7dc5ce672d2f.jpg)
4、根据数据长度构建树使用情形:原始表结构中所有ID都在一列中,且没有父ID字段,但是ID是有规律的,每组的长度相同,且子级的前N位就是父级编号,添加树数据集,如下图:
![表格制作软件FineReport教程:[10]组织树报表](https://exp-picture.cdn.bcebos.com/d4071b96b814f4d025942b61cdfe474ec383232f.jpg)
6、模板制作按照下图所示将对应的数据列拖入到单元格中,并将A2单元格的左父格设置为A1,A3单元格的左父格设置为A2:
![表格制作软件FineReport教程:[10]组织树报表](https://exp-picture.cdn.bcebos.com/51f9aa3ea8db574a66a5702fa7f7dfb2dd19172f.jpg)
8、其它设置由于自动生成的字段是编码,可以使用数据字典将其转为对应的部门名称。
9、保存与预览保存模板。点击分页预览,效果如上。
不规范组织树报表
1、问题描述在实际应用中,组织树报表除了组织树报表章节中使用到的比士嫣轶嗄较规范的组织结构,即,除了最后一层,所有其他层的结构都是子层,还有很多组织结构并不是这么的规范,有的层级结构下面没有子层,有的层级结构下面则有子层,即层级结构不确定,比如说,一个公司的公司结构,有总部,人力资源部,市场部,人力资源部下面还有人力一部,人力二部,人力一部下面才是具体员工,而市场部下面直接就是具体员工,下面用2个示例来展示这两种组织树的区别:规范的组织结构
![表格制作软件FineReport教程:[10]组织树报表](https://exp-picture.cdn.bcebos.com/1f9feadca039131f697b306ae275f2c4ed990a2f.jpg)
3、那么使用不规范的组织结构构建组织树报表,如果还是通过组织树报表这种方式来实现就会出现上图所示的状况,没有子层数据的层级的子层会显示空白,那么如何让没有子层数据的层级数据合并其下面所有层级单元格显示呢,如下图效果:
![表格制作软件FineReport教程:[10]组织树报表](https://exp-picture.cdn.bcebos.com/054056fe1e425d6bb546aa9a11883913e9e5002f.jpg)
6、模板制作由于上面准备数据是不规范的组织结构,我们按照组织树报表中的方法来实现组织树,即不使用树数据集,模板效果如下图:
![表格制作软件FineReport教程:[10]组织树报表](https://exp-picture.cdn.bcebos.com/acfda02f47704618644d0788b08602214e57762f.jpg)
8、注:在添加过滤条件时,需要去掉将父格子作为过滤条件前面的勾选,如下图A2单元格的过滤条件:
![表格制作软件FineReport教程:[10]组织树报表](https://exp-picture.cdn.bcebos.com/82eff6d7592ae3ef2deff78254b6326c5666642f.jpg)
10、合并单元格从效果图上可以看到没有下层的层级结构应该合并单元格显示,即未归集旧数据应该合并单元格至最下层。由于FineR髫潋啜缅eport不支持自动合并单元格,只能手动合并,未归集旧数据所在层级为第二层,第二层数据所在单元格为第二行,最后一层在第三行,所以合并A2后面的单元格至第三行,即合并B2和B3单元格,A1单元格是第一层数据,故需要将其显示在所有数据上面,需要合并A1和B1单元格。回到模板设计界面,按照上述描述再操作模板,拖曳id列至B2单元格中,设置扩展为横向扩展,其父格为A2,使数据扩展时,每个第二层级数据后面都跟了一个合并的单元格 ,且显示对应层级数据,并设置其形态为:实际值为ds1的name字段,结果如下图:
![表格制作软件FineReport教程:[10]组织树报表](https://exp-picture.cdn.bcebos.com/e177fc9147e833e0e3e5deb030ea3e863148592f.jpg)
12、过滤条件为刚刚合并的B2单元格添加过滤条件,B2单元格只显示没有子层的第二层结构数据,即只显示A3单元格为空的数据,添加过滤条件len(A3)==0,如下图:
![表格制作软件FineReport教程:[10]组织树报表](https://exp-picture.cdn.bcebos.com/31097f43d7d44831e67c1514d40f822b75ee512f.jpg)
14、条件属性上面效果图中,没有子层的层级数据的子层显示为空白,有子层结构的层级数据后面的合并单元格显示为空白,通过条件属性,将空白列隐藏,如下图,同时选中A2、A3和B2单元格,为其添加条件属性:
![表格制作软件FineReport教程:[10]组织树报表](https://exp-picture.cdn.bcebos.com/1d735518512c8cf13330c580c384cde34a2c462f.jpg)
16、如果组织结构有4层,那么其模板样式如下图:
![表格制作软件FineReport教程:[10]组织树报表](https://exp-picture.cdn.bcebos.com/57af657f860e7c7511631f46650d3aceabd7bf2f.jpg)