虚拟数据源

和JDBC数据源类似,也支持如下的三种数据源类型:

  • JDBC连接数据源
  • JNDI连接数据源
  • CUSTOM数据源:自定义数据源,利用自定义类返回java.sql.DataSource

但是和JDBC数据源有差别的是,当你定义好数据源后,还无法在报表或数据流程中直接使用它。

你还需要继续在虚拟数据源下添加好数据集,定义好的数据集才可以在报表或数据流程中使用。

数据集合的类型有:

  • 表格
  • 视图
  • SQL

你可以单击虚拟数据源,进入管理界面后单击添加按钮,看到数据集添加下拉菜单:

数据集添加

添加表格或视图

如果是添加表格或视图,则下拉列表中会自动出现对应的表格或视图供开发人员选择,选中后命名这个数据集的名字就可以。

一般来说同名表格在该处添加一个即可。不要重复。

数据集添加

添加SQL数据集

开发人员也可以自定义sql定义数据集:

SQL数据集添加

对于SQL类型的Dataset,对于SQL的定义也支持表达式的形式定义动态SQL,包括对查询参数也是支持的。只是最终参数的定义是在报表或数据流程那边。运行时如果是报表引用统一数据源中的SQL数据集,则参数由报表那边负责定义和初始化,执行时系统会自动传入Sql数据集,并动态解析参数查询数据。

虚拟数据源的安全性

你在数据流程,报表,仪表盘设计时,只能引用虚拟数据源中预先定义好的数据集,供系统进行设计和开发。但是不能在设计时加入新的表或视图,或SQL查询别的数据。 这样有利于对数据源的数据进行控制,只开放系统设计需要的数据。从而提高数据安全性。


为什么使用虚拟数据源

虚拟数据源相比直连数据库数据源具有以下核心优势:

1. 数据安全管控

使用直连 JDBC 数据源时,报表开发人员可以在 SQL 中自由访问数据库中的任何表、视图或存储过程,存在数据泄露风险。而虚拟数据源通过白名单机制彻底解决这一问题:

  • 管理员在 BaskServer 中仅开放业务系统确实需要的数据集
  • 报表开发人员在设计时只能从预定义列表中选择,无法越权访问其他数据
  • 即便开发人员熟悉底层数据库结构,也无法在报表中直接构造任意 SQL 查询敏感数据

典型场景:财务报表开发人员可以使用"月度销售汇总"数据集,但无法通过报表访问"员工薪资"等敏感表。

2. 数据定义集中管理、一处修改全局生效

直连数据集的 SQL 分散在每一张报表内部,当业务逻辑或表结构发生变化时,需要逐一修改所有相关报表,维护成本极高。虚拟数据源将数据定义统一托管在 BaskServer 中:

  • 一处定义,多处复用:同一个虚拟数据集可以被报表、仪表盘、数据流程等多个产品同时引用
  • 一处修改,全局生效:当 SQL 逻辑需要调整时,只需在 BaskServer 中修改一次,所有引用该数据集的报表自动获得更新

典型场景:20 张报表共用同一个"订单明细"数据集,当订单表新增字段时,只需在 BaskServer 中更新一次数据集定义即可。

3. 职责分离,团队协作更高效

虚拟数据源使数据层展示层的开发职责得到清晰分离:

角色 职责
数据管理员 在 BaskServer 中维护虚拟数据源和数据集,负责 SQL 性能优化、数据安全管控
报表开发人员 专注于报表样式、布局和参数配置,直接使用已封装好的数据集,无需关心底层 SQL

4. 跨产品数据一致性

同一个虚拟数据源下的数据集可以同时用于:

  • BaskReport 报表设计
  • BaskReport 仪表盘 图表配置
  • BaskAdapt 数据流程

各端引用同一数据源,确保不同产品之间的数据口径完全一致。


与报表结合的完整流程

流程概览

① 管理员在 BaskServer 定义虚拟数据源及虚拟数据集(含 SQL 参数定义)
        ↓
② 报表开发人员添加服务器数据源(选择虚拟数据源)
        ↓
③ 从虚拟数据集列表中选择并添加数据集
        ↓
④ 在报表端定义与 SQL 中对应的查询参数
        ↓
⑤ 将数据集字段绑定到报表单元格
        ↓
⑥ 配置查询表单(可选),实现交互式数据过滤
        ↓
⑦ 保存并预览报表

步骤详解

① 在 BaskServer 定义虚拟数据集(管理员)

在 BaskServer 平台中配置好虚拟数据源,并添加所需的 SQL 数据集。SQL 中可预留参数占位(如 ${$dept_id}),但参数的初始化由报表端负责。

② 报表端添加服务器数据源

报表设计器 → 数据源设置面板 → 添加 → 选择添加服务器数据源 → 选中对应的虚拟数据源。

③ 添加虚拟数据集

数据集标签页 → 添加 → 选择服务器虚拟数据源数据集 → 双击列表中的目标数据集 → 确定。

④ 定义报表参数

报表设置 → 参数配置,按照 SQL 中使用的参数名逐一添加。参数名须与 SQL 表达式中的 $paramName 对应。

示例:SQL 中使用了 $dept_id$start_date,则需在报表端定义同名参数:

参数名 类型 默认值
dept_id 字符串 (空)
start_date 日期 (空)

⑤ 绑定数据集字段

在单元格属性中输入绑定表达式:

数据集名称.聚合方式(字段名)

例如:

employees.list(emp_name)
employees.list(salary)
employees.sum(salary)

⑥ 配置查询表单(可选)

点击报表设计器上方的查询表单标签页,将已定义的参数组件拖入工作区,配置好标签、默认值及提交行为,即可实现交互式数据查询。

详见:参数实现数据查询


调试与排查

查看运行时 SQL

虚拟数据集 SQL 类型数据集中的动态 SQL 在运行时执行,若需查看实际执行的 SQL,可开启日志输出。

SpringBoot 项目(在 application.yml 中配置):

logging:
  level:
    com:
      basksoft:
        core:
          database: DEBUG

快速开关(v2.0.2+)

baskreport.sql.output.enable=true

开启后,运行时 SQL 及动态查询参数将直接输出到控制台,便于快速定位问题。

常见问题

问题 原因 解决方式
数据集列表为空 虚拟数据源未添加任何数据集 联系管理员在 BaskServer 中添加数据集
参数不生效,数据全量返回 SQL 中参数判断逻辑有误,或参数名拼写不一致 检查 SQL 表达式中 $paramName 与报表参数名是否完全一致
预览时报表无数据 参数默认值为 null,且 SQL 无空值处理逻辑 为参数设置默认值,或在 SQL 表达式中添加 isEmpty() 判断

与其他数据源类型对比

特性 数据库数据源(直连) 虚拟数据源 Bean 数据源
数据来源 直连 JDBC 数据库 BaskServer 虚拟数据源 Java 代码
SQL 编写权限 报表开发人员可任意编写 仅能使用预定义数据集 不适用
数据安全性 较低(开发人员可查任意表) 较高(仅开放白名单数据集) 由代码控制
参数支持 ✅ 完整支持 ✅ 完整支持 ✅ 通过 BeanContext 获取
多报表共用 每个报表独立配置 统一在 BaskServer 中管理 需 SPI 注册
适用场景 快速开发、单报表场景 企业级、多团队协作、权限管控 需要 Java 逻辑处理数据

results matching ""

    No results matching ""