历史版本2 :树数据集 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

FineBI 版本
5.0

1.2 应用场景

导入用户 或 同步用户 时,「服务器数据集」选择树数据集,可将部门层级结构导入进去。

1.3 功能简介

在数据库中常常可以看到一种表结构,表中包含了 ID 与 parent ID 两个字段或者某一个字段的长度有一定规律,这种表结构就存在着一种层级关系,通过下拉树或者折叠树来显示层级结构,比如说部门的层级结构,如下图所示:

那么如何通过将数据表中的二维结构展现出这种树状的层级关系呢,本文将详细介绍。

2. 示例编辑

2.1 准备数据表

1)点击下载表信息:公司部门.xls

表信息如下图所示:

1597374309936808.png

2)将「公司部门表」添加到用户自己的数据库中,或用户在自己数据库中新建用户信息表。

2.2 新建 SQL 数据集

管理员进入数据决策系统,点击「管理系统>数据连接>服务器数据集>SQL数据集」,如下图所示:

SQL 语句为:

select *from 公司部门

31.png

2.3 新建树数据集

2.3.1 方法一:依赖所选数据集的父标记字段构建树

1)点击「树数据集」,数据集名称为「部门树」,原始标记字段为「部门ID」,父标记字段为「上级ID」,如下图所示:

32.png

树数据集来源于本文 2.2 节创建的 SQL 数据集,「公司部门」中有一个部门 ID 和上级 ID,故可以使用依赖所选数据集的父标记字段构建树。

需要特别强调的是,此种情况,需要有唯一根节点(就是「上级 ID 」为空的节点),如果没有,那么构建树时会无法正常建立索引。

2)点击「预览」按钮,可以看到如下图所示的数据:

28.png

可看到数据集中多了三个字段,FR_GEN_0 表示树结构的第一层,FR_GEN_1 表示树结构的第二层,FR_GEN_2 表示树结构的第三层。

3)点击「保存」按钮,保存创建的树数据集。

2.3.2 方法二:依赖所选数据集的标记字段的长度构建树

1)点击「树数据集」,数据集名称为「部门树」,原始标记字段选择「部门ID」,如下图所示:

33.png

数据表中的字段没有父级字段,而是通过字段的长度来分辨其级别。公司部门的部门 ID 字段,其字段长度不一致,但是存在一定的规律,截止到第一个数字表示第一层级部门的部门 ID,截止到第二个数字表示第二层级部门的部门 ID,以此类推。

注:部门 ID,上级部门 ID,部门名是三个建树字段,在实际操作中,部门 ID 和部门名必须对应,不能存在部门 ID 相同的情况。

2)点击「预览」按钮,可以看到如下图所示的数据:

30.png

可看到数据集中多了三个字段,FR_GEN_0 表示树结构的第一层,FR_GEN_1 表示树结构的第二层,FR_GEN_2 表示树结构的第三层。

3)点击「保存」按钮,保存创建的树数据集。

3. 注意事项编辑

3.1 树结构(类型一)

3.1.1 数据表

1597384944285981.jpg

这是个完整的树数据集,构建树数据集时,以「部门 ID」为原始标记字段,「上级 ID」是父标记字段。

第一行表示总部的标记是 1,父标记为空,表示它是根部门,没有父部门,通常如果一个部门没有父部门,那么父部门标记为空。第二行的意思是「人力资源部」的原始标记为 11,其父部门是标记为 1 的部门(然后可以根据这个标记来查询它的父部门是总部)。

遍历这个数据集后,能得到所有的部门信息,职位信息;根据「上级 ID」,到「部门 ID」这一列去查找相应的部门名称,从而可以构建父部门。

3.1.2 具体说明

「上级 ID」中出现的标记(除了是空),都必须在「部门ID」中找到对应的标记,可以看到上图中所有的「上级 ID」都能在「部门 ID」中找到对应的值。

如果出现下图的这种情况,「上级 ID」为 2,但是在「部门ID」中找不到是 2 的部门信息,这样就没办法构建「上级ID」为 2 的部门信息,这样就认为树是不完整的。若同步包含用户信息的数据集,同步动作直接返回,不进行同步操作。

222

3.2 树结构(类型二)

3.2.1 数据表

222

构建树数据集时,原始标记字段为「部门名称」,父标记字段为「上级名称」。

3.2.2 具体说明

「上级名称」中出现的标记(除了是空),都必须在「部门名称」中找到对应的标记,否则就认为树是不完整的,若同步包含用户信息的数据集,同步动作直接返回,不进行同步操作。

3.3 树结构(类型三)

3.3.1 数据表

222

构建树数据集时,以「部门 ID」为原始标记字段,「上级 ID」是父标记字段。

同样需要保证「上级 ID」列的能在「部门 ID」中能够找的到,否则也会拒绝同步。

3.3.2 具体说明

确保树数据集是正确的充要条件:

1)父标记字段中出现的值(除了是空),在原始标记字段中都能找到对应的值。

2)原始标记字段相同的行,其部门名和父标记这两列也必须相同,如上图数据表中的最后两行。

3)父标记和部门名相同的行,其原始标记列必须相同,如上图数据表中的最后两行。

无法构成树数据集:

1)一个确定的部门有两个父部门,显然不是树结构。如下图所示:

222

2)一个标记对应的部门名称不同也是错误的,这样也会拒绝同步的。

222

3)意思就是在父部门确定的情况下,部门名称是唯一的,那么部门标记也是唯一的。下图为错误示例:

222

部门名称是可以相同的,比如销售部有个子部门叫性能组,研发部也可以有个子部门叫性能组。但是当父部门确定的情况下,部门名是不能重复的。

例如:lyon 和 loy 所在的部门都是性能组,且父部门标记都是 d ,那就表明两个人在同一个部门,那么部门标记就应该相同,上图的两个员工部门标记不相同,那么也会报错,拒绝同步。即在父部门确定的情况下,根据部门名能唯一的确定一个部门。

4)实际情况中还有一种是互为上下级的情况,这种结构或者说数据有时候会在一些实行扁平化管理的公司出现,即 A 部门是 B 部门的上级,B 部门又是 A 部门的上级,这样的两个部门在组织同步的时候也会失败,但很少见。

4. 补充说明编辑

原始字段和父标记字段中不能出现 0、,0000000 类似的字段,因为这些标记会被解析成 0,而 0 是程序中的保留字段,是所有部门的 ID,所以要尽量避免。

在构建树结构的时候,如果一个部门没有父部门,那么父部门就空着,不要随便写。