派生数据集
基于已有数据集做关联、筛选、排序、分组汇总或脚本处理,生成新的数据集;含配置项与运行时行为。
概述
派生数据集以模板内已有的数据集作为「数据源」,在报表引擎内存里做关联、筛选、排序、投影与分组汇总,生成一份新数据集。它不访问数据库,适合把 SQL 数据集与内置数据集(如目标值)合并对比。
生成方式有两种:「界面化配置」和「脚本处理生成」(这是脚本能力的入口之一)。
功能入口
「新建SQL数据集」拆分按钮 >「派生数据集」,打开「编辑派生数据集」,在「配置」标签页操作。预览提示:「当前版本预览仅支持模板内数据集」。
操作步骤
界面化配置
- 填「数据集名称」,「生成方式」选「界面化配置」。
- 在「数据源」列表点击「添加数据源」,为每个源数据集设置「别名」「源数据集」以及必需或可空。界面化配置目前最多使用两个数据源。
- 在「关联设置」选择左侧数据源、「关联类型」、右侧数据源,并设置关联条件(左字段 = 右字段)。
- 需要时配置「筛选设置」「排序设置」。
- 在投影字段中确定输出字段,可点「从源字段导入」「智能补全」「添加字段」。
- 需要汇总时设置「分组与汇总」。
- 预览后保存。
脚本处理生成
- 「生成方式」选「脚本处理生成」,添加数据源。
- 编写脚本,必须非空(默认
return [])。 - 配置结果字段定义并预览。
属性说明
基础信息
| 属性 | 说明 | 取值/默认值 |
|---|---|---|
| 数据集名称 | 数据集名称 | 必填 |
| 生成方式 | 「界面化配置」或「脚本处理生成」 | 界面化配置 |
| 预览行数 | 预览及运行时的结果行数上限 | 1–5000,默认 100 |
| 超时(ms) | 超时配置 | 1000–300000,默认 15000 |
预览行数如果设置了值,运行时也会按它截断结果。「超时(ms)」在后端只被解析保存,检索源码没有发现其被用于执行控制,请不要依赖它。
关联类型
| 界面文案 | 含义 |
|---|---|
| 仅保留两侧都匹配的数据 | INNER |
| 保留左侧全部数据 | LEFT |
| 保留右侧全部数据 | RIGHT |
| 两侧全部保留 | FULL |
关联条件有两个开关:大小写「区分大小写」或「忽略大小写」(默认忽略),空值处理「NULL=空」或「NULL不相等」(默认 NULL=空)。关联按嵌套循环执行,数据量大时会慢。
筛选、排序、投影
| 项 | 说明 |
|---|---|
| 筛选设置 | 表达式,字段写作 别名.字段,例如 orders.amount > 100 && customers.level == 'VIP' |
| 排序设置 | 选择数据源、字段与「升序」「降序」 |
| 投影字段 | 输出字段、显示名、来源别名、来源字段、数据转换(表达式模板)、类型 |
| DISTINCT | 「DISTINCT」去重或「保留重复」 |
分组与汇总
每个字段选择角色:「仅明细」「分组键」「参与汇总」。汇总方式有首条、求和、平均值、计数、最小值、最大值。存在汇总的同时又有「仅明细」字段时,保存报错。
脚本模式
脚本返回值支持 QueryResult、RecordSet、List<Map>、Map。脚本内可使用:
| 函数 | 说明 |
|---|---|
rawDataset(名称) |
返回指定数据集的原始完整结果(全部行) |
rawDataset(名称, 字段) |
返回该字段所有行的值列表 |
dataset(名称[, 字段]) |
读取数据集,定义在报表函数中 |
$参数名 |
报表参数 |
示例
把科室门诊量(SQL 数据集 ds_visit,字段 dept_code、visit_cnt)与目标值(内置数据集 ds_target,字段 dept_code、target)关联:
| 配置 | 值 |
|---|---|
| 数据源 | 别名 v = ds_visit;别名 t = ds_target |
| 关联类型 | 保留左侧全部数据 |
| 关联条件 | v.dept_code = t.dept_code |
| 投影字段 | dept_code(来源 v.dept_code)、visit_cnt(来源 v.visit_cnt)、target(来源 t.target) |
| 筛选设置 | v.visit_cnt > 0 |
预览得到每个有门诊量的科室及其目标值,没有目标的科室 target 为空。之后可在报表中直接用 visit_cnt / target 计算完成率。
脚本模式的最简示例:
return rawDataset('ds_visit')
注意事项
注意:派生数据集读取的是源数据集的原始完整结果,源数据集的行数限制仍然生效。
注意:派生数据集受非 SQL 数据集行数限制,超过时报错。
提示:能在 SQL 里关联的,优先在 SQL 里关联,数据库比内存嵌套循环更快;派生数据集适合跨数据源合并。