如何使用外部传来的 SQL 语句做分析报表

分析报表本身可以让用户自定义数据库 SQL 类型的数据集,但是前提是得会写 SQL,这个对于绝大多数终端业务人员可能都做不到,所以,可能会考虑直接根据其角色自动带入用于分析的 SQL 语句直接分析。

针对这种情况,润乾报表的分析功能已经提供了可用的方法:sqlId 类型的数据集,可以直接在页面定义 JS 来实现(只需开发人员定义好,用户访问分析页面带入 SQL 就好了且通用)。

注:SQL 可能涉及到的数据源需要预先在配置文件配置好。

另外自带数据库 SQL 类型的分析需要先把数据缓存,也就是此时的分析报表结果是从缓存文件中取数的,当用户需要实时去数据库查询的时候就不满足了,sqlId 类型数据集也解决了这个问题。

下面我们就看一下具体的操作过程:

注:页面采用润乾报表 demo 内提供的 olap.jsp,数据库采用自带 demo

1、 页面接收外部 SQL

以从 url 传入为例(request 获取,还有 N 中方式,只要能在 olap.jsp 获取到即可)

imagepng

String wSQL = request.getParameter(“wSQL”);

2、 页面定义 sqlId 类型数据集

imagepng

增加一个名字(可按起名规则随意取)为“wSql”的 sqlId 配置,其中 sql 是动态传入的。另外,像 dataSource 也是可以动态指定的,这里只做 SQL 语句的简单示例,其他属性操作过程都类似。

3、 测试效果

访问分析页面,传递指定的 sqlId 数据集名称,并带入 SQL 语句:

url:http://localhost:6868/demo/raqsoft/guide/jsp/olap.jsp?sqlId=wSql&wSQL=select * from 订单 where 雇员 ID=2

imagepng

从上图可以看出,采用我们指定的 sqlId 且传入的 SQL 呈现出相应的分析界面(数据是数据库直接取出),如果我们还可以模拟切换用户访问,更换下 url 中 SQL 再来对比下:

将 “雇员 ID=2”改为”雇员 ID=8”,

url:http://localhost:6868/demo/raqsoft/guide/jsp/olap.jsp?sqlId=wSql&wSQL=select * from 订单 where 雇员 ID=8

imagepng

数据已是雇员 ID 为 8 的用户的数据,因此这种方式还可以做到控制不同用户采用不用 SQL 来分析。