---
order: 3
navTitle: 数据级次
---
# 数据级次

通常模型中的数据都是单级的，没有层次结构，当我们需要新建一个带有上下级关系的数据模型时，如`行政区划`，就需要用到数据级次属性。

数据级次又称数据层次，代表的数据之间的层次关系，如分段层次、父子层次等。建立一个规范的数据层次，便于快速完成带有上下级关系的数据分析需求，可运用于钻取、汇总等场景，如：在分省销售报表中从省级钻取到市级、汇总显示车企的整体销量。

## 支持的层次类型{#properties}

为适应不同的字典数据，[数据模型](./README.md)提供了三种层次类型：分段层次、父子层次、多字段层次，它们分别有相应的数据要求。

### 分段层次{#sections}

分段层次按照规整的、非空的唯一编码来确定分段的层次关系，编码字段通常为[模型主键](./model-settings.md#主键)。

以`2-2-2`的分段模型为例进行说明，该字段长度是6位，规则如下：

- 前2个字符是第一级编码，中间2个字符是第二级编码，最后2个字符是第三级编码
- 对应分段内的编码为0，则代表该节点为上一级节点，例如`110000`表示该值为根节点

以`行政区划`分段层次为例，该模型按照业务层次`省-市-区`分为3级：

- `北京市 110000`：按照`2-2-2`的分段模式分解为`11`、`00`、`00`，该编码前一段有值而后两段为`00`，则为第一级机构
- `北京市市辖区 110100`：按照`2-2-2`的分段模式分解为`11`、`01`、`00`，该编码前两段有值而后一段为`00`，则为第二级机构，挂在第一段编码为`11`的第一级机构下，故`北京市市辖区`挂在`北京市`下
- 同理，`东城区 110101`挂在`北京市市辖区`下

![分段层次数据](./images/2021-03-05-14-40-38.png)

![分段层次树形](./images/2021-03-05-14-49-24.png)

示例：[分段层次](https://demo.succbi.com/v5/DEMO/data?:open=aAsBvjxgEUGGwZi76f3IyF&:tblview=modelDataTree)

### 父子层次{#paternity}

父子层次按照模型中的父子映射逻辑来确定层次关系，它的数据要求是：

- 子字段必须保证非空且唯一，一般为[模型主键](./model-settings.md#主键)
- 除第一级的子字段外，都需要有对应的父字段值
- 需设置[主键](./model-settings.md#主键)，用于与业务模型的字段关联，[主键](./model-settings.md#主键)与子字段可以为不同字段

以`行政区划`父子层次为例，该模型按照业务层次`省-市-区`分为3级：

- `北京市市辖区`的子字段`行政区划代码`为`110100`，父字段`PID`为`110000`，系统会自动根据父字段的值来查找符合的子字段，子字段为`110000`的机构为`北京市`，故`北京市市辖区`会挂在`北京市`下
- 同理父字段为`110100`的机构，会挂在`北京市市辖区`下

![父子层次数据](./images/2021-03-05-14-39-26.png)

![父子层次树形](./images/2021-03-05-14-50-59.png)

示例：[父子层次](https://demo.succbi.com/v5/DEMO/data?:open=JNim5L6UWlBLivKoX0LagC&:tblview=modelDataTree)

### 多字段层次{#multifields}

多字段层次是按照模型中不同的字段来确定层次关系，它的数据要求是：

- 下级节点的数据行中需要包含上级节点的层次字段信息
- 需设置[主键](./model-settings.md#主键)，用于与业务模型的字段关联，[主键](./model-settings.md#主键)与层次字段没有必然联系

因此它的数据特点为：下级节点的上级层次字段信息是冗余的。

以`行业代码`多字段层次为例，该模型按照业务层次`门类代码-大类代码-中类代码-小类代码`分为4级：

- `农、林、牧、渔业`数据行中包含门类代码信息，其他类的信息为空，故`农、林、牧、渔业`为第一级
- `农业`数据行中包含门类代码、大类代码信息，其他类的信息为空，故`农业`为第二级，挂在对应的门类下，即`农、林、牧、渔业`下
- 同理，`谷物种植`挂在`农业`下

![多字段层次数据](./images/2021-03-05-14-29-37.png)

![多字段层次树形](./images/2021-03-05-14-30-55.png)

示例：[多字段层次](https://demo.succbi.com/v5/DEMO/data?:open=F40qCBDDh2BxoiVE6mehdC&:tblview=modelDataTree)

## 新建层次{#new-level}

选中[数据模型](./README.md)或[数据加工](../../data-process/README.md)输出节点，在右上角的属性中选择**树形结构**，在工具栏中点击**新建层次**（如果已有建好的层次，在**更多**按钮中，进行数据层次的新建、编辑、删除操作），即可在对话框中选择三种[层次类型](#properties)。一个数据模型可新建多个数据层次，但父子层次只能创建一个，且支持创建后的模糊查询操作。

### 新建分段层次{#new-sections}

新建分段层次，主要进行以下三个设置：

![新建分段层次](./images/2021-03-05-16-37-34.gif)

- **分段字段**：模型会依据该字段生成树形结构的数据
- **分段**：将分段字段的数据按照分段结构进行拆分，每段之间使用`-`分隔。例如`2-2-2`表示前2个字符是第一级，中间2个字符是第二级，最后2个字符是第三级
- **分段描述**：分段结构的每段描述，需要以`-`分隔，如`省-市-区`

### 新建父子层次{#new-paternity}

新建父子层次在选择对应的**父字段**及**子字段**后，还需要生成一些必要的业务字段，具体如下：

![新建父子层次](./images/2021-03-05-16-31-34.gif)

- **更新层次数据**：默认勾选，与**业务层次**选项的**自动新建层次字段**配合使用，一般用于从零生成一个父子层次，当业务层次字段来源于数据表已有的字段时不勾选
- **业务层次**：记录节点的层次信息，与模型的层级数一一对应，如业务层次为`省-市-区`时，则会记录该节点的所在省、所在市、所在区的信息。业务层次可选择已有的字段，也可以自定义或自动生成新的层次字段
- **自动新建层次字段**：点击可自动分析父子字段的值并生成层次数据，如业务层次为`省-市-区`三级时，默认的字段名按顺序分别为：`SZ_PID0`、`SZ_PID1`、`SZ_PID2`且不会发生改变，如果模型中已有该字段名则会自动引用
- **层级字段**：记录节点在树形层次中处于第几层级，根节点从`0`开始。层级字段可自定义，默认为`SZ_LEVEL`，如果模型中已有该字段名则默认为`SZ_LEVEL1`。当模型数据中已有该信息的记录时，也可选择已有的字段
- **是否叶子节点**：记录节点在树形层次中是否为叶子节点，`0`代表否，`1`代表是。层级字段可自定义，默认为`SZ_LEAF`，操作及生成规则与**层级字段**相同
- **子代码包含父代码**：在涉及到与父子层次相关的数据查询时使用，可以提升查询性能，前提条件是子字段的前缀带有父字段的代码

### 新建多字段层次{#new-multifields}

新建多字段层次只需点击**添加**按钮并选择层次字段，即可新增相应的**业务层次**，系统会自动按照添加的顺序依次分为第一层级、第二层级...

![新建多字段层次](./images/2021-03-05-16-18-34.gif)

## 编辑和删除层次{#editlevel}

针对已创建的层次，系统提供了**编辑**及**删除**的功能:

- **编辑**：点击模型工具栏中的**更多**按钮，可进行层次编辑操作，操作与[新建层次](#new-level)一致
- **删除**：删除当前选择的层次，点击后会弹出确认对话框，通过弹出框中**详细信息**可查看引用该层次的元数据

## 应用{#scenarios}

在完成模型的数据层次构建后，可便捷应用于多种开发场景：

- **关联维表**：字段关联了带有数据层次的模型时，可直接引用业务层次字段进行数据分析
- **汇总与下钻**：在制作[报表](../../report/README.md)或[仪表板](../../data-viz/dash/README.md)的表格时，拖入数据层次字段至单元格中，系统会自动汇总下级数据，还可以为单元格添加[下钻](../../data-viz/dash/design/action/drill-down.md)交互
- **组件关联**：使用[下拉框组件](../../app/superpage/components/input/combobox.md)、树组件关联带有数据层次的模型，可直接生成树形结构
