数据集概述
数据集的五种类型、公共数据集、创建入口、查询行数与超时的全局设置,以及各类型文档索引。
概述
数据集是报表取数的单位:一个数据集定义一份结果集(字段与行),单元格、图表、查询表单的下拉选项都从数据集读取。数据集不保存业务数据本身,运行时才向数据库或接口取数,只有「内置数据集」把数据存放在报表定义里。
赛特数据现有五种数据集类型(后端枚举 DatasetType):
| 类型 | 界面名称 | 数据来源 | 文档 |
|---|---|---|---|
sql |
SQL数据集 | 数据连接 + SQL 或存储过程 | SQL 数据集 |
api |
API数据集 | HTTP 接口(GET/POST) | API 数据集 |
builtin |
内置数据集 | 手工录入或粘贴的数据 | 内置数据集 |
derived |
派生数据集 | 其他数据集的关联、筛选、汇总,或脚本 | 派生数据集 |
staged |
运行时注入数据集 | 宿主系统在运行时推送的数据 | 运行时注入数据集 |
存储过程不是独立类型,而是 SQL 数据集的一种写法,见 存储过程数据集。同样,没有独立的「脚本数据集」类型,脚本能力体现在三处:派生数据集的「脚本处理生成」、SQL 与 API 数据集的「后处理脚本」,以及 SQL 中的 #{}、${} 表达式,见 后处理脚本与计算字段。
功能入口
模板数据集
在报表设计器的数据集面板中,有「模板数据集」与「公共数据集」两个标签页。「模板数据集」只属于当前报表模板。
新建:点击拆分按钮「新建SQL数据集」,下拉菜单有「SQL数据集」「内置数据集」「API数据集」「派生数据集」「运行时注入数据集」。
数据集节点的右键菜单:
| 菜单项 | 作用 |
|---|---|
| 编辑 | 打开对应类型的编辑对话框 |
| 复制 | 复制数据集 |
| 转为 SQL 数据集… | 把内置数据集改为 SQL 数据源 |
| 恢复为内置数据集 | 转换后恢复 |
| 生成明细表 | 用该数据集的字段生成明细表 |
| 删除 | 删除数据集 |
公共数据集
在「系统」菜单的「公共数据集」页面统一维护,供多张报表引用。见 公共数据集。
操作步骤
- 先在「系统 > 数据连接」建好连接,见 数据源配置。
- 打开报表设计器,在数据集面板点击「新建SQL数据集」,选择类型。
- 填写数据集内容,点击「数据预览」,确认字段与数据正确,见 数据集预览与调试。
- 点击「确定」保存。保存 SQL 数据集时系统会用 1 行的限制实际执行一次 SQL 来识别字段,因此 SQL 有语法错误时会在保存时报错。
- 在单元格中绑定数据集字段,见 单元格绑定与扩展。
属性说明
通用能力
各类型编辑对话框共有的能力:
| 能力 | 适用类型 | 说明 |
|---|---|---|
| 数据集名称 | 全部 | 报表内唯一,引用时使用 |
| 报表参数 | SQL、API、派生 | 数据集中引用的 $参数名 会自动登记为报表参数,见 数据集参数 |
| 后处理脚本 | SQL、API | 查询后、过滤前对结果集做脚本处理 |
| 计算字段 | SQL、API、内置、派生、运行时注入 | 最多 10 个,按行计算 |
查询行数与超时
SQL 数据集执行有行数上限和超时。取值按下列顺序确定:数据集自己填写的值优先,未填写则使用系统全局设置。
全局设置位于「系统 > 系统设置」的「报表」标签页「报表运行」面板:
| 设置项 | 取值范围 | 说明 |
|---|---|---|
| 输出每条SQL日志 | 开启 / 关闭(推荐) | 配置键 app.report.run.sql.console.enabled。开启后日志含查询参数 |
| SQL单次查询行数限制 | 界面 5000–100000 | 配置键 app.report.run.sql.query-row-limit,代码内默认 30000 |
| SQL查询超时(秒) | 5–3600 | 配置键 app.report.run.sql.query-timeout-seconds,默认 60 |
数据集自身的覆盖值:「查询行数限制」5000–200000,「查询超时(秒)」5–3600,超出范围时执行报错「SQL单次查询行数限制超出允许范围」或「SQL查询超时时间超出允许范围」。数据大屏对超时另有更短的上限。
SQL 结果超过行数上限时不会截断,而是报错「SQL查询结果超过最大行数限制(N行),请优化查询条件或联系管理员调整限制」。非 SQL 数据集(API、内置、派生、运行时注入)的行数限制由配置键 app.report.run.dataset.row-limit 控制,缺省与 SQL 的限制相同,超过时同样报错。
示例
一份典型的医院门诊报表使用三个数据集:
| 数据集名称 | 类型 | 内容 |
|---|---|---|
ds_visit |
SQL数据集 | 按日期和科室查询门诊量 |
ds_dept |
SQL数据集 | 科室列表,供查询表单的下拉框使用 |
ds_target |
内置数据集 | 各科室月度目标值,手工录入 |
需要把门诊量与目标值放在同一张表里比较时,再新建一个派生数据集,把 ds_visit 与 ds_target 按科室关联,见 派生数据集。
注意事项
注意:目前编辑器中没有数据集级别的缓存选项,每次报表执行都会重新取数。代码里只有关于共享数据集缓存的待办注释,未实现。
注意:数据集的权限跟随所在功能:设计器里的数据集随报表访问权限,公共数据集页面与数据连接页面需要系统权限
datasource。数据集管理接口接受datasource或report-design。
提示:数据量大的明细查询应在 SQL 里加条件过滤,不要依赖行数上限。