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

目录:

1. 概述编辑

事物之间存在分支层次关系时,一般可用折叠或缩进形式的组织树展现。

在数据表结构中,这种分支层次关系一般通过类似 ID 与 parentID 两个字段表示,下图为表结构关系及其实现的组织树效果:

222

可以看到,组织的每个对象都由第一列唯一表示,每个对象之间的关系(上层对象)都是由第二列表示(值为第一列中中存在的值)。如何分别获取每层对象的数据及其上下层关系生成右侧的组织树呢?

2. 示例编辑

2.1 准备数据

新建普通报表,添加数据集 ds1,SQL 语句为:SELECT * FROM 公司部门

1605678390733128.png

2.2 设计表格

通过分析数据集中的数据可以看出,该组织结构包含 3 层,因此我们需要将这三层分别取出来。由于部门 ID列可以唯一表示一个部门,并且部门之间的层次关系也是通过部门 ID列的值表示的,所以设计表格如下:

1)模板有三个单元格组织,每个单元格扩展代表一个层次;

2)单元格均拖入数据集中的部门 ID 列,再设置不同的过滤条件。

最终表格效果如下:

222

2.2.1 过滤第一层数据

单元格 A1 代表第一层部门,比如“总部”。但默认扩展出所有部门 ID,需要通过过滤条件筛选出第一层部门。

由数据可以看出,第一层上级 ID 为空,因此双击 A1 单元格,选择过滤,添加条件“上级 ID” 等于 'NULL',如下图所示:

1605680330978129.png

2.2.2 过滤第二层数据

单元格 A2 代表第二层部门,比如“人力资源部”、“市场部”等。

1)设置父格:设置 A2 的左父格为 A1,上父格为默认,使得该级部门 ID 能够跟随上级部门 ID 自动扩展

2)过滤:双击 A2 单元格,点击过滤,添加条件“上级 ID”等于'A1'

3)取消父格过滤:由于设置了父格,A1、A2 中数据列又来自于同一数据集,此时子格默认会将父格作为过滤条件,即会筛选出 部门 ID =父格 ID 的数据,导致没有符合条件的数据。因此需要在 A2 单元格过滤时,取消勾选父格条件

设置如下图:

1605680740616729.png

2.2.3 过滤第三层数据

第三层的原理与第二层相同,具体设置如下:

1)设置父格:设置 A3 的左父格为 A2,上父格为默认

2)过滤:双击 A2 单元格,点击过滤,添加条件“上级 ID”等于'A1' and “上级 ID”不等于' NULL '

注:树节点展开时,有多个根节点且根节点下没有子节点,会有一层置空,需要在过滤条件中加上类似 parentID 不等于 NULL 的条件。

3)取消父格过滤

1605681324305120.png

注:若数据中组织层数不止三层,可以按照相同的方法添加。

2.2.4 其他设置

1)模板中使用的是部门 ID,要显示为相应的部门名称,需通过单元格属性>形态>数据字典进行转换,详情可参见:数据字典

1605683069438319.png

2)若某一层中有些有子层,有些没有子层,此时由于扩展会出现一些空白行,可以将空白行设置条件属性进行隐藏,详情可参见:隐藏行列

2.3 效果预览

1)PC端

保存报表,点击分页预览,效果如下图所示:

1605683588522576.png

2)移动端

点击移动端预览,同时支持 App 端和 H5 端,效果如下图所示:

1605683819983483.png

3. 模板下载编辑

已完成模板可参见%FR_HOME%\webroot\WEB-INF\reportlets\doc\Advanced\GroupReport\组织树报表.cpt

点击下载模板:组织树报表.cpt