---
order: 7
navTitle: 数据集
---
# 数据集

数据集（dataset）是一个页面（如报表、仪表板或SuperPage等页面）内部的一个数据集合概念，是页面查询、提交和修改数据的入口。数据集是一个抽象的概念，它有多种体现，本文将讲述如何在页面中引入、新建和管理数据集。

![数据集](./images/2023-07-17-17-42-26.png)

如上图所示，数据模型是存在于数据仓库中的数据表，这些表可以给很多页面使用。当需要在某个页面中使用这些模型时，我们可以直接引入一个模型，也可以选择把模型查询过滤和分组后的查询结果引入到模型来，为了完成页面所需的业务化查询需求，我们甚至可以在页面的内部新建一个临时的数据加工，所有的这些数据来源引入到页面后都统称为数据集，一个页面可以包含多个数据集。

## 数据集类型{#dataset-type}

为了方便页面获取和修改各类数据，系统提供了多种数据集类型，包括**枚举数据集**、**JSON数据集**、**脚本数据集**等等，通过设计器的菜单可以很方便的创建各类数据集：

![类型](./images/2020-10-23-17-17-54.png)

- [数据模型数据集](#data-model)：直接将全局模型表引入后形成数据集
- [查询数据集](#query-dataset)：将模型进行过滤、分组、排序后的结果作为数据集
- [内嵌数据加工](#dataflow)：新建一个当前对象内部的数据加工
- [枚举数据集](#enumerate-dataset)：通过手动录入数据的方式，定义常量类数据集
- [JSON数据集](#json-dataset)：通过表达式返回约定格式结果并自动解析生成动态数据集
- [脚本数据集](#script-dataset)：通过脚本灵活的获取数据并返回一个动态结构的数据集
- [系统数据集](#system-dataset)：引用系统数据作为当前页面的数据集，如用户、机构等
- [流程数据集](#process-form-data)：引用流程数据作为当前页面的数据集，如我的待办、我的已办等

### 数据模型数据集{#data-model}

**数据模型**是指将已经建模好的[全局模型](./model/model-data-type.md)引入到当前页面内形成的**数据集**。

直接引入已有的数据模型是一种最便捷的使用数据的方式，引入后可以继续设置[过滤](#filter)、[排序](#sort-fields)、新增[计算字段](#calc-field)等。在低代码页面中也可以通过**数据模型**数据集进行修改和提交数据。在仪表板和报表中，系统会根据具体引用字段的表达式和组件，自动构造查询请求，支持各种复杂查询、关联查询、分组查询等。但在低代码SuperPage页面中，只能做明细查询。如果需要做复杂查询，需要使用[查询数据集](#query-dataset)或[内置数据加工](#dataflow)。

**数据模型**数据集和[查询数据集](#query-dataset)相似，但也有区别，主要的区别是[查询数据集](#query-dataset)可以做数据分组和筛选；如果做了分组查询，[查询数据集](#query-dataset)是**只读**的，在低代码应用中无法进行数据修改和提交。

将**数据模型**添加到页面中，系统提供了两种添加方式：

- 在**数据栏**中点击**添加**按钮，在弹出框中通过搜索或直接在其所在目录下选中该模型，点击确定。
- 点击**数据按钮**>**选择数据模型**，在对话框中通过搜索或直接在其所在目录下选中该模型，点击确定。

![添加](./images/2023-07-12-11-32-11.gif)

**数据模型**常用操作如下：

![数据模型操作](./images/2023-07-20-17-41-54.png)

| 序号 | 操作 | 作用 |
| :--------: | :--------: | :-------- |
| 1 | 打开 | 在当前页面内部打开模型，查看模型数据及结构 |
| 2 | 定位 | 新开浏览器标签页，并在数据模块打开并选中引用的数据模型 |
| 3 | [重新选择](#replace-dataset) | 将当前的**数据模型**替换为其他新的模型 |
| 4 | [查看引用](#view-references) | 查看当前**数据模型**是否被其他组件引用 |

### 查询数据集{#query-dataset}

**查询数据集**是基于已经建模好的[全局模型](./model/model-data-type.md)进行数据过滤、分组、字段筛选后形成的一个查询子集。

与模型数据集相比，**查询数据集**也可以[过滤](#filter)和[排序](#sort-fields)，但还可以进行**分组**和**筛选**，在设置**查询数据集**的过程中，可以即时的看到数据查询结果。另外，**查询数据集**支持在数据集中设定需要输出的字段，这样就可以只把需要用到的数据显示在页面中，简化后续页面制作中字段选择的过程。在低代码页面中对于不分组的查询数据集，也支持数据的**提交**和**修改**。

新建**查询数据集**，可以点击**数据按钮**>**新建数据集**，在对话框内进行新建，新建数据集需要以下几个步骤：

![数据集](./images/2020-10-23-18-10-31.png)

1. 设置数据集名称：输入一个合理且有意义的名称，不能为空
2. 引入数据模型：数据集是基于模型表的子集，使用下拉的方式引入数据模型，添加后模型数据会在右侧的[数据列表](#dataset-field)中展示
3. [查询数据集属性设置](#dataset-properties)：为数据集进行过滤、添加分组或排序字段
4. 保存：保存当前数据集，保存后的数据集用法和引入的数据模型用法一致，在数据模型下可以查看数据集中的字段，在控件的数据中即可引用该数据集

**查询数据集**常用操作如下：

![操作](./images/2023-07-20-17-50-23.png)

| 序号 | 操作 | 作用 |
| :--------: | :--------: | :-------- |
| 1 | 过滤条件 | 对**查询数据集**中引入的数据模型数据进行过滤，可参考[过滤](#filter) |
| 2 | 分组字段 | 设置**查询数据集**的分组字段，设置后查询结果会根据分组字段进行分组 |
| 3 | [字段管理](#dataset-field) | 当引入的数据模型中已有的字段无法满足所需，需要根据已有的字段构造出的新的字段列或者对字段进行修改时，可以**新建字段**，或数据量较大且有些字段不需要时，可通过**选择字段**勾选需要的字段，提高数据查询效率 |
| 4 | 字段属性 | 设置**查询数据集**中字段的**字段类型**、**文字字段**等属性，具体操作可参考[管理字段](./model/README.md#filed-management) |
| 5 | 同步差异 | 当**查询数据集**的结构与引用模型表结构不一致时，数据集对话框中的**刷新**按钮会有黄色标记提示，点击**刷新**按钮可查看模型表与物理表的差异，并勾选需要修改的差异信息同步到数据集 |

### 内嵌数据加工{#dataflow}

**内嵌数据加工**数据集是在当前页面内部新建的一个只供当前页面使用的数据加工模型。

1. 当需要对页面进行较复杂的查询（如关联、联合、数据清洗等），且这个查询只有当前页面会用到，不需要建立全局的数据模型时，可以使用**内嵌数据加工**
2. **内嵌数据加工**是存储于当前页面内部的，它不会影响全局模型，如果以后有其他页面也有可能需要用到同样加工逻辑时，我们就需要从全局数据仓库建模管理的角度去考虑是否需要新建一个全局的数据模型，只有确定这个加工逻辑确实比较个性化，只有这个页面使用时才使用内嵌加工，当然，如果以后需要，也支持将当前页面的内嵌数据加工保存到全局
3. 内嵌加工相当于一个数据视图，它的加工结果是不会存储的，每次查询时都会实时查询，这也就意味着，内嵌加工数据集是只读的，不能用于低代码**提交**和**修改**

![数据加工](./images/2023-07-14-11-38-14.png)

新建页面内数据加工，可以点击**数据源按钮**>**数据加工**，加工操作参考文档[新建数据加工](../data-process/create-dataflow.md)。

![新建加工](./images/2023-07-14-11-56-11.gif)

当前页面内新建的数据加工，如果需要保留到全局使用，可以右键模型选择**转换为全局模型**，再在对话框中确定模型**名称**、**描述**以及**目录**，这样就可以将当前页面内的数据加工保存到指定目录下，供全局使用。

![转换](./images/2023-07-14-13-45-22.png)

### 枚举数据集{#enumerate-dataset}

**枚举数据集**是存储在当前页面内的一个小的、静态数据集合。

1. **枚举数据集**常用作给当前页面提供一些静态数据，比如为**下拉框**的下拉选项、**多选面板**的枚举值等
2. **枚举数据集**是存储在当前页面的只读数据集，不能用于低代码的**提交**和**修改**
3. 通常使用**枚举数据集**的地方也可以使用一个小的**维表**替代，在页面内新建**枚举数据集**更快捷一些，但**枚举数据集**不具备和数据模型关联的能力，如果枚举项存在和其他模型表数据的维键关联的情况，那么应该新建**维表**而不是**枚举数据集**
4. **枚举数据集**是一种**前端数据集**，所以无法使用一些**汇总**、**分组**等后端查询方式，仅仅只能用作于明细查询

**枚举数据集**中录入的数据的方式，可以参考[创建空白模型](./input-model-data.md)。

![枚举数据集](./images/2023-07-14-17-11-36.png)

### JSON数据集{#json-dataset}

**JSON数据集**是一个JSON数据包（来自表达式函数计算、或JS、Web API等）转换为一个数据集。

1. 利用**JSON数据集**的灵活运算能力，从而实现将一行数据拆分成多行，可参考[表达式拆分多行数据集](https://demo.succbi.com/v5/demo-spg/表达式拆分多行数据集)。或根据表达式动态生成数据集数据，并提供给其他组件使用，可参考[表达式定义动态数据集](https://demo.succbi.com/v5/demo-spg/表达式定义动态数据集)
2. 调用JS函数来获取任意API的返回结果数据，并解析成数据集供当前页面使用，可参考[调用JS函数获取API数据](https://demo.succbi.com/v5/demo-spg/调用JS函数获取API数据)

![表达式数据集](./images/2023-07-14-17-26-52.png)

系统支持通过表达式返回如下几种约定格式的值：

1. 分割文本
2. 一维数组
3. 二维数组
4. JSON（仅支持简单JSON格式）

### 脚本数据集{#script-dataset}

todo

### 系统数据集{#system-dataset}

**系统数据集**可以让用户使用系统内部的系统表。

系统内部有很多系统数据表、比如机构表、部门表等，通常用户没有权限直接访问这些表的数据（存在安全隐患），而通过**系统数据集**去访问这些数据可以更方便更安全。

**系统数据集**目前提供了如下系统表的访问能力：

![系统数据集](./images/2023-07-14-17-37-00.png)

- 用户数据集：将系统用户表引入到当前页面，可以设置一些限制条件，也可以设置自定义过滤条件
  - 限制显示当前部门用户：过滤掉当前登录用户的同部门用户
  - 限制显示上级部门用户：过滤掉当前登录用户的上级部门用户
  - 限制显示指定部门数据：过滤掉指定部门的用户
  - 限制显示指定用户组用户：过滤掉指定用户组的用户
- 部门数据集：将系统部门表引入到当前页面，可以自定义过滤条件
- 机构数据集：将系统机构表引入到当前页面，可以自定义过滤条件

### 流程数据集{#process-form-data}

**流程数据集**允许用户引用流程相关的数据集。

通过引用不同的**流程数据集**，可以快速配置出不同类型的任务列表、表单页面等流程相关的业务页面。

系统提供如下几种**流程数据集**：

![流程数据集](./images/2023-07-14-17-49-32.png)

- [流程状态数据](#process-status)
- [流程任务信息](#task-img)
- [流程表单数据](#page-img)

### 流程状态数据{#process-status}

当需要制作待办或已办等展示流程任务数据的列表时，可以在页面中引入[流程任务表](../dev/sys-tables/README.md#flow_tasks)，用户可直接将其引入或通过加工关联上业务表数据后再引入，再根据需求设置对应的**过滤条件**。基于上述设置，在**流程数据集**中提供了**我的待办**、**我的已办**等快捷设置方式，本质上还是引入了[流程任务表](../dev/sys-tables/README.md#flow_tasks)，但对引入的数据源会有默认的过滤条件，例如**我的待办**会在[流程任务表](../dev/sys-tables/README.md#flow_tasks)中过滤出属于当前用户的活动中的任务数据，具体设置如下：

![流程状态数据](./images/2023-07-18-15-14-35.png)

- 选择要获取的数据：可在此设置中切换成其他类型的工作流数据源
- 关联表单数据一起：流程的任务数据是不包含业务数据的，当用户希望查询的任务列表能带上一些业务数据的信息时，比如需要查询出请假申请的请假人和请假天数，此时可以勾选关联表单数据一起并选择一个业务表作为关联对象，系统会自行将选择的业务表与流程任务表通过业务代码进行关联
- 自定义过滤条件：勾选后，在默认的过滤条件基础上课额外添加过滤条件

系统目前已经支持如下几种流程状态数据：

- 我的待办事项
- 我的申请事项
- 我的已办事项
- 我的所有事项
- 我的未读消息
- 我的已读消息
- 我的所有消息

### 流程任务信息{#task-img}

当需要在页面中获取到当前正在处理的流程任务的相关信息时，比如当前任务处于流程的哪个环节，需要引入**流程任务信息**，**流程任务信息**的来源也是[流程任务表](../dev/sys-tables/README.md#flow_tasks)，不同于**我的待办**，**流程任务信息**总是单行的，通过数据源设置上的**任务ID**来自动过滤[流程任务表](../dev/sys-tables/README.md#flow_tasks)来得到唯一行的任务数据，具体设置如下：

![任务信息](./images/2023-07-18-15-24-09.png)

- 选择要获取的数据：可在此设置中切换成其他类型的**工作流数据源**
- 任务ID：通常是输入一个参数或一个实际的任务ID，通过有效的任务ID能在[流程任务表](../dev/sys-tables/README.md#flow_tasks)中过滤出对应的任务信息

### 流程表单数据{#page-img}

**流程表单数据**指的是工作流中使用的业务表，如请假申请表或报销申请表等。工作流中的相关操作**提交表单**、**执行流程**等都需要借助**流程表单数据**的作用来达到效果。具体设置如下：

![表单数据](./images/2023-07-18-15-27-34.png)

- 选择要获取的数据：可在此设置中切换成其他类型的**工作流数据源**
- 选择工作流：只能在工作流文件中选择，用于确定是哪个工作流中的业务数据
- 选择表单：只能在选定的工作流的业务数据中选择，多张业务表需要同时使用时，要添加多个**流程表单数据**
- 任务ID：通常是输入一个参数或一个实际的任务ID，通过有效的任务ID可以得到指定的业务表数据
- 根据流程设置显示隐藏或禁用输入项：勾选后，所有绑定当前**流程表单数据**的输入组件会自动根据[节点数据权限设置](../app/workflow/datapermissions.md)来控制显示和禁用情况

:::tip

**流程表单数据**就是对工作流中的业务表加上了一层定义，代表选出来的业务表是工作流中的表。不同于直接引入这些业务表，引入这个定义是为了方便系统能默认提供一些流程上的设置：

- [提交表单](../app/superpage/design/action/submit-data.md#start-flw)交互只有往**流程表单数据**中新增数据时才会自动生成流程任务数据
- 通过**流程表单数据**可以获取到[节点数据权限](../app/workflow/work-with-spg.md#read-and-write)，根据设置能自动控制绑定了**流程表单数据**中字段的输入组件的显示和禁用
- 根据提供的**任务ID**能快速过滤出当前处理的业务数据并装载到业务表单上

:::

## 数据集属性{#dataset-properties}

系统提供数据集属性管理，可以为数据集设置如下属性：

- [过滤](#filter)：在数据集上设置过滤条件，将数据先进行一次过滤
- [排序](#sort-fields)：在数据集上设置排序字段，将查询出来的数据先进行排序
- [参数](#params)：更改数据集参数值
- [补足](#supplement)：对数据结果进行补足
- [安全](#permission)：限制数据集读写、导出、查询等权限
- [查询](#query)：设置数据集查询属性，如分页、查询行数等
- [缓存](#cache)：设置数据集缓存，如是否查询缓存等
- [高级](#senior)：设置数据集高级设置，比如数据集数据粒度

### 过滤{#filter}

当可视化分析内所有的组件具有相同的取数口径时，可以通过右键点击模型，选择**设置**>**过滤**，在数据集上设置全局过滤，过滤条件会影响所有使用该数据集的控件，这样就无需为组件一一设置过滤。可以使用**参数**或者根据[输入组件](../data-viz/dash/components/input/combobox.md)的值进行过滤。过滤条件的编写可参考文档[过滤](../data-viz/dash/design/data/data-filter/README.md)。

![过滤](./images/2020-10-26-18-30-13.png)

### 排序{#sort-fields}

在**设置**>**排序**中，可以为数据集添加一个或多个排序字段并指定排序方式。通常用于需要按照某种顺序显示数据的场景，比如销售数据按照【销售数量（件）】降序显示，并且数据集中指定排序字段的优先级高于[数据模型中指定排序字段](./model/model-settings.md#sort-fields)。默认按照数据集上排序设置或者主键进行排序。

![排序字段设置](./images/2022-06-07-15-46-23.png)

### 排序方式{#sort-order}

**排序**中提供多种排序选择：

![排序方式](./images/2023-07-14-15-08-26.png)

- 自动：使用模型排序的设置，或模型的主键进行排序
- 不排序：总是不排序，可以较大提升查询效率
- 指定字段：选择固定的字段进行排序
- 动态排序：通过配置项，动态设置排序方式
  ![动态排序](./images/2023-07-14-15-11-32.png)

### 参数{#params}

若分析页面使用的数据集设置了参数，而分析时需要对参数进行更改时，可以在分析页面右键点击该数据集，选择**设置**>**参数**，对参数进行更改，并传递给该数据集，得到新的数据处理结果，无需重新在数据集中更改参数，参考文档[设置动态加工参数](../data-process/setting-params.md)

![参数](./images/2020-10-26-18-34-13.png)

::: tip
数据集上如果没有参数，那么设置中会自动隐藏参数设置项
:::

### 补足{#supplement}

当页面中的数据行数不符合业务期望时，可以考虑使用**补足**属性，对数据结果进行补足，使其符合一定的行数规则。右键数据集**设置**>**补足**，勾选**启用补足后**，可以设置相应的补足规则，具体如下：

![补足](./images/2023-07-14-15-24-39.png)

- 补足方式：系统提供**补空白行**、**补维项**、**补已有数据**和**合并其他数据集**四种补足方式
  1. 补空白行：当行数不足时，补空白行。勾选后，需要配置**期望行数**。这样设置后，如果数据不足指定行数，那么将字段补上空白行
     ![补空白行](./images/2023-07-14-15-39-01.png)
  2. 补维项：按主键字段关联的维表，补足维表中的数据。勾选后，需要配置用来关联的**维键字段**。同时支持**按其他模型补足**，勾选后，可以指定其他模型用来关联补足
     ![补维项](./images/2023-07-14-15-40-33.png)
  3. 补已有数据：从当前数据集中取已存在的数据进行补足。勾选后，可以设置过滤条件，这样可以将过滤后的数据不足到当前数据行中
     ![补已有数据](./images/2023-07-14-15-42-32.png)
  4. 合并其他数据集：将另外一个数据集的查询结果合并过来。勾选后，需要配置指定**数据集**。支持**自动映射同名字段**，也可以手动**自定义字段映射**
     ![合并其他数据集](./images/2023-07-14-15-43-34.png)
- 仅初始化时补足：勾选后，仅在未提交数据时补足，提交数据后总是装载数据

::: tip
**补足**属性对单行数据集无效。
:::

### 安全{#permission}

当需要限制用户的读写权限时，或者允许用户查看脱敏前的明文数据时，可以右键数据集**设置**>**安全**中进行设置，提供如下安全设置：

![安全](./images/2023-07-14-15-53-52.png)

- 限制读：勾选后，可以限制用户读取数据的权限，可以指定用户或者通过表达式动态筛选用户，默认不勾选
- 限制导出：勾选后，可以限制用户导出数据的权限，可以指定用户或者通过表达式动态筛选用户，默认不勾选
- 允许脚本查询：默认的只有数据集被引用了之后才能被查询，允许脚本查询后系统将总是允许浏览器发起查询，默认不勾选
- 按需查询字段：默认的系统会一次性查询所有被引用的字段数据。当字段很多且有一些字段一开始并不显示，可以勾选**按需查询字段**，此时系统值按需查询当前需要显示出来的字段，默认不勾选
- 允许查看明文：勾选后，忽略字段上的脱敏设置，允许用户查询明文数据，默认不勾选
- 允许导出明文：勾选后，忽略字段上的脱敏设置，允许用户导出明文数据，默认不勾选

### 查询{#query}

当使用到列表展示数据且需要分页展示，或者需要限制用户的最大查询行数时，可以右键数据集**设置**>**查询**中进行设置，提供如下查询设置：

![查询](./images/2023-07-14-16-07-57.png)

- 分页：当数据集被查询明细的组件使用时，比如列表、明细表、浮动面板等，可以启用分页。提供**自动**、**启用**、**禁用**三个选项，默认为**自动**
- 每页行数：设置分页后每页查询行数，当**分页**勾选了**自动**或**启用**时，可设置**每页行数**
- 最大查询行数：限制一次查请求最大的查询数据量，避免页面加载过多的数据导致浏览器崩溃，默认查询10000行数据
- 手动刷新：当过滤条件或参数引用的内容发生变化时是否需要手动刷新数据，默认自动刷新会驱动相关的可视化组件刷新。勾选后，需要通过**刷新**交互主动刷新，默认不勾选
- 初始时不查询：勾选后，页面一开始显示时不自动查询，需要用户使用**刷新**交互查询数据，默认不勾选
- 自动更新影响的指标：当前数据集被修改后，自动更新影响的其他数据表的指标，被影响的数据表的指标需要定义正确的取数口径，默认不勾选
- 启用增量加载：勾选后，系统将按照模型上设置的最后修改时间增量加载数据，把上次加载后有变化的数据增量加载到当前数据集中，默认不勾选
- 启用查询条件：勾选后，可以编写查询条件，当查询条件返回true时才会真正的发起数据库查询，默认不勾选

### 缓存{#cache}

系统提供缓存机制的相关设置，可以按需控制是否通过缓存来进行数据的查询，可以右键数据集**设置**>**缓存**中进行设置，提供如下缓存设置：

![缓存](./images/2023-07-14-16-23-24.png)

- 前端预加载数据：提供**继承数据表**、**允许全量加载**、**按需加载**三种预加载方式，默认**继承数据表**
  - 继承数据表：继承数据表的设置进行预加载
  - 允许全量加载：尽量从后端获取足够的数据，然后在浏览器进行分组、过滤和排序，减少对后端数据库的查询频率
  - 按需加载：只允许查询条件范围内的数据
- 优化合计行查询：勾选后，尽量基于已有的查询在浏览器端完成合计行计算，如一个报表，浮动行下面有一个合计行（不分页），此时合计行可以直接基于浮动行在前端计算，默认勾选
- 启用查询缓存：提供**自动**、**启用**、**禁用**三种缓存查询设置
  - 自动：自动使用查询中的主查询明细的设置，默认选择此项
  - 启用：自动缓存数据到临时文件，以提升系统效率，如果模型的数据经常修改，通常不建议启用缓存
  - 禁用：禁用查询缓存数据
- 集群共享缓存：当启用查询缓存后，可以设置是否在集群间共享缓存。启用后，查询缓存文件将存储在集群共享文件夹下，各个集群节点可以共享，当集群节点很多时（比如大于10台）启用集群共享缓存可以避免多个集群节点并发同时查询数据库，降低数据库压力
- 设置缓存有效期：当启用查询缓存后，可以设置缓存的有效时间，在有效期内，即便数据被修改了系统还是可以继续使用之前的缓存，减少数据库查询和网络流量。此选项通常用于海量用户（如千万级别以上（访问一些公共数据，且用户能接受不立即查询到最新的数据）

### 高级{#senior}

数据集提供更高级的设置，如**数据集数据粒度设置**。

### 数据集数据粒度{#dataset-granularity}

数据集数据粒度表示一个数据集查询返回的结果集的最细粒度，有**单行**、**单主键**和**普通数据集**三种，可以右键数据集**设置**>**高级**中进行设置，系统提供如下设置项：

![数据集类型](./images/2023-07-14-16-26-34.png)

- **自动时别**：默认为**自动识别**，表示会根据当前表自动判断数据集类型
- **单行**：返回数据结果只有一行并不一定就是单行数据集，单行数据集是对结果集的一种确定性约束，不论数据行数如何变化，结果都只会有一行，比如按照模型的所有主键字段过滤，则就是单行结果集，如果对所有数据汇总那么也会是单行结果集，但如果使用某个过滤条件导致数据此时是只返回一行数据，但是随着来源数据的变化有可能返回不是一行，那么这不能称之为单行数据集。单行结果集是一种根据模型的主键或者加工的逻辑理论上推测出来的返回结果最多只有一行的结果集。
- **单主键**：指数据集只有一个字段作为逻辑主键，当为**单主键**类型时，需要设置**主键字段**

:::tip
**单行**和**单主键**是特殊情况，有时候比较复杂，无法自动识别，需要手动设置类型
:::

## 数据集字段管理{#field-management}

系统提供数据集的字段管理，比如可以[新建计算字](#calc-field)、[创建分组字段](#calc-group-field)等等。

### 数据集字段列表{#dataset-list}

数据集引入后，系统会自动解析数据集结构。解析后，会将数据集中的**维度**、**度量**这些数据集字段分为两部分展示出来。同时系统也会提供**度量名称**、**字段名称**、**度量值**和**总行数**这四个系统字段。

![模型列表](./images/2023-07-13-18-05-27.png)

- 度量名称：维度字段，记录模型表中的所有维度字段，通常与**度量值**一起配合使用
- 字段名称：维度字段，记录模型表中的所有字段，通常结合[输入控件](../data-viz/dash/components/input/README.md)进行数据过滤
- 度量值：度量字段，记录模型表中的所有度量字段，通常与**度量名称**一起使用，返回的是对度量值的sum值。
- 总行数：度量字段，模型表中的数据总行数

### 新建计算字段{#calc-field}

当数据集中已有的字段无法满足用户所需，需要根据已有的字段构造出的新的字段时，可以使用新增计算字段方式实现。新增计算字段的操作方式和**数据模型**上的一致，参考文档[新增计算字段](../data-process/transform/calc-field.md)。新增计算字段的方式有两种：

| 方法一 | 方法二 |
| :--------: | :--------: |
| ![方法一](./images/2023-07-14-10-00-11.gif) | ![方法二](./images/2023-07-14-10-00-12.gif) |

1. 点击**数据栏**>维度行旁边的**箭头**>**新增计算字段**，在编辑框中通过函数、参数等构造新的字段
2. 选中某一字段，右键选择**创建**>**计算字段**，此时编辑框中会出现选中的字段，可在该字段的基础上构造新字段

### 创建分组字段{#calc-group-field}

如需对某一维度的数据按不同类型进行划分，可通过创建分组的方式，右键点击对应的维度字段，选择**创建**>**分组**，创建分组的操作方式和数据模型上的一致，参考文档[创建分组字段](../data-process/transform/calc-group-field.md)。

![分组字段](./images/2023-07-14-10-09-11.png)

### 创建分段字段{#calc-section-field}

如需对某一度量的数据按不同范围进行划分，可通过创建分段的方式，右键点击对应的度量字段，选择**创建**>**分段**，创建分段的操作方式和数据模型上的一致，参考文档[创建分段字段](../data-process/transform/calc-section-field.md)。

![分段字段](./images/2023-07-14-10-11-18.png)

### 设置字段属性{#field-properties}

数据集列表中可以针对不同字段设置不同的属性，比如：[地理角色](#set-geo)、[显示格式](#set-display-format)、[聚合方式](#set-sum)等等。

### 设置地理角色{#set-geo}

todo

### 设置显示格式{#set-display-format}

用于设置数据在组件中的显示格式，比如设置为显示整数、百分比等。右键点击字段，选择**显示格式**中进行设置，参考文档[显示格式](../data-viz/dash/design/data/displayformat.md)。

![显示格式](./images/2023-07-14-10-22-01.png)

### 设置合计方式{#set-sum}

系统提供了部分常用的合计方式，通过选择相应方式即可便捷对数据进行合计，如计数、平均值、最大值、最小值等。右键点击**度量字段**>**合计**，选择对应的合计方式即可，当字段拖入控件中后，数据会以选择的合计方式进行合计。

![合计方式](./images/2023-07-14-10-30-22.png)

### 设置汇总方式{#set-group}

系统提供了部分常用的汇总方式，用于在[表格控件](../data-viz/dash/components/table/README.md)中求合计值时对数据的汇总。通过选择相应方式即可对数据快速进行合计、最大值等计算。右键点击**度量字段**，选择**汇总方式**即可。

![汇总方式](./images/2023-07-14-10-34-04.png)

### 替换字段引用{#replace-field}

当数据集发生调整，需要将某个字段的引用全部修改为新增字段时，可以使用替换字段的方式一键替换所有该字段的引用。比如右键点击【色系】，选择**替换引用**，在弹出框中选择【价格档次】，点击确定，控件中【色系】就会被替换为【价格档次】。

![替换](./images/2023-07-14-10-45-11.gif)

## 数据集管理{#dataset-management}

### 查看引用{#view-references}

系统提供追溯字段是否被引用的的功能，提供两种查看引用的方式：

| 指定字段引用 | 数据集字段引用 |
| :--------: | :--------: |
| ![指定字段](./images/2023-07-14-11-19-16.png) | ![数据集字段](./images/2023-07-14-11-23-55.png) |

1. 指定字段引用：查看数据集中指定字段的引用关系。右键指定字段，选择**查看引用**即可查看当前字段是否被页面中组件引用。
2. 模型集字段引用：查看数据集中所有字段是否被引用。右键指定数据集，选择**查看引用**即可查看当前数据集中所有字段的引用情况。

### 设置别名{#rename}

为数据集重命名，右键点击数据集，选择**设置别名**，在对话框中输入名称即可。当修改别名后，组件中的字段引用的数据集或字段名称会同步修改。

![设置别名](./images/2023-07-14-11-32-57.png)

### 替换已有数据集{#replace-dataset}

若原有数据集被删除或因为需求变更等原因不再使用时，可以重新选择其他数据集进行替换。右键点击数据集，选择**重新选择**，在弹出框中选择新的模型，新选择的模型会替换原有模型，组件中所使用的原数据集字段也会替换为新数据集中所对应的字段。

![替换](./images/2023-07-14-16-41-06.png)

- 保留设置内容（过滤条件、计算字段）：勾选后，可以保留原有数据集上的过滤条件和计算字段，默认勾选

::: tip
若某些数据字段只存在于原数据集中，那么替换后引用这些数据字段的控件会提示相应字段不存在
:::

### 刷新模型{#refresh-dataset}

制作可页面的过程中，若所使用的数据集的结构发生了修改，可以通过右键点击数据集，选择**刷新**来刷新数据集、同步修改。

![刷新](./images/2023-07-14-16-44-29.png)

### 克隆数据集{#clone-dataset}

克隆数据集会复用原数据集的所有操作，包括新建的计算字段、过滤条件、字段显示方式等，右键点击数据集，选择**克隆**即可克隆该数据集，克隆数据集的命名规则是在原数据集名字的后面加数字，数字从1开始依次累加，比如**销售明细表**第一次克隆产生的新表为**销售明细表1**，第二次克隆产生的新表为**销售明细表2**，克隆后的模型支持[设置别名](#rename)。

![克隆](./images/2023-07-14-16-46-51.png)

### 删除数据集{#delete-dataset}

右键点击数据集，选择**删除**，如果该数据集没有被使用到，则会直接删除。如果有组件引用了该数据集，则会弹出提示框显示当前页面中有哪些组件引用了当前数据集。

![删除](./images/2023-07-14-16-49-29.png)
