历史版本1 :树结构报表简介 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

1. 描述编辑

数据库中比较常见的一种表结构就是表中包含了id与parentid两个字段,希望根据这两个字段实现如下图所示的组织树效果:
可以看到,组织的每个层次都来自于同一列部门ID,即同一列的数据之间,存在包含与被包含关系,如何分别获取每一层的数据呢?

2. 示例编辑

2.1 新建报表,添加数据集
新建工作薄,添加数据集ds1,SQL语句为SELECT * FROM [公司部门],查询出公司部门表,该表即为典型的id与parentid结构。
由数据可以看出,该组织结构包含3层,因此我们需要将这三层分别取出来。最终模板效果如下:
2.2 第一层
将部门ID拖拽至A1单元格,默认扩展出所有部门ID,通过过滤条件筛选出第一层部门;
由数据可以看出,第一层上级ID为空,因此选中A1单元格,点击过滤,添加条件上级ID 等于 'NULL',如下图设置:
注:根据数据的不同过滤条件相应改变。
2.3 第二层
再次将部门ID拖拽至A2单元格,默认仍会扩展出所有部门ID,设置A2的父格为A1,使得该级部门ID能够跟随上级部门ID自动扩展;
设置父格后会发现,取出的第二层数据与第一层相同:由于设置了父格,A1、A2中数据列又来自于同一数据集,此时子格默认会将父格作为过滤条件,即会筛选出部门ID=父ID的数据,导致始终选出与上一层相同的部门。因此需要选中A2单元格,点击过滤,去掉将父格子作为过滤条件
同时添加过滤条件上级ID 等于 'A1',如下图:
2.4 第三层
第三层的原理与第二层相同,进行同样的设置即可。若数据中组织层数不止三层,可以按照相同的方法添加。
注:子层单元格必须去掉将父格子作为过滤条件。
2.5 其他设置
模板中使用的是部门ID,若要显示为相应的部门名称,可以通过数据字典进行转换。
若某一层中有些有子层,有些没有子层,此时由于扩展会出现一些空白行,可以将空白行隐藏
2.6 保存并预览
保存模板。设计器中点击分页预览,即可看到如上的效果。模板效果在线查看请点击CusGroup_5.cpt

已完成的模板,可参见%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Advanced\GroupReport\CusGroup_5.cpt