birt如何连接mysql_如何让Birt报表脚本数据源变得既简单又强大

本文介绍了如何使用集算器作为Birt报表的数据准备层,增强报表处理复杂计算的能力。集算器提供简洁的语法,替代SQL函数和存储过程,实现了在JVM上运行的SQL功能,适用于没有强大分析函数或存储过程的数据库,如MySQL。集成步骤包括在Birt中添加集算器JDBC驱动和配置文件,以及编写和部署集算器脚本,实现与数据库无关的计算逻辑。
摘要由CSDN通过智能技术生成

概述:运行在 JVM 上的 SQL 函数和存储过程

总所周知,有些数据库没有强大的分析函数(eg. Mysql), 有些数据库没有存储过程(eg. Vertica),当遇到复杂的数据计算,往往只能通过 Python,R 等外部脚本来实现,但这些脚本语言和主流工程语言(Java)集成性不好,如果直接用工程语言实现类似 SQL 函数和存储过程的功能,经常只是针对某个计算需求编写冗长的代码,代码几乎不可复用。

另外,即便拥有强大的分析函数,实现稍复杂的逻辑其实也不算容易,比如下面这种常见的业务计算,找出“销售额占到一半的前 n 个客户,并按销售额从大到小排序”,在 Oracle 中 SQL 实现如下:

with A as

(selectCUSTOM,SALESAMOUNT,row_number() over (order by SALESAMOUNT) RANKING

from SALES)

select CUSTOM,SALESAMOUNT

from (select CUSTOM,SALESAMOUNT,sum(SALESAMOUNT) over (order by RANKING) AccumulativeAmount

from A)

where AccumulativeAmount>(select sum(SALESAMOUNT)/2 from SALES)

order by SALESAMOUNT desc

说明:按照销售额累计值从小到大排序,通过累计值大于“一半销售额”的条件,逆向找出占到销售额一半的客户。为了避免窗口函数在计算累计值时对销售额相同的值处理出现错误,用子查询先计算了排名。

下面是用集算器实现相同逻辑的代码:

d9034925039524e4f9b7b652baf2249d.png

从上述代码我们可以看到,集算器利用一套简洁的语法取代了需嵌套 SQL+ 窗口函数才能实现的逻辑,并且具有通用一致性(任何数据源代码一致)。

集算器是一套运行在 JVM 上专门处理结构化数据的脚本语言,类似用 SQL 函数和存储过程,与 Java 集成可以创建可移植、功能强大和与数据库无关的计算逻辑,运行于中间层的计算逻辑和运行于数据库层的数据逻辑之间的分离,提高了应用程序的可扩展性、灵活性和可维护性。

应用场景:报表数据准备

应用结构

c927393e400236dca849163609d6ca50.png

集成后,集算器嵌入报表应用层,相当于本地的逻辑数据库(不需要单独服务器部署),在报表与数据源间作为报表数据准备层,完成各种复杂的计算任务。

如何集成

下面以 Vertica 为数据源,Birt 为报表工具,描述怎样集成 esProc 作为数据准备层。

(一) Birt 开发环境

1、 基础 jar 集成

集算器 JDBC 需要三个基础 jar 包,都可以在 [esProc 安装目录]\esProc\lib 目录下找到,分别为:

dm.jar 集算器计算引擎及JDBC驱动包

jdom.jar 解析配置文件

icu4j\_3\_4_5.jar 处理国际化

除了基础包外,还有一些为完成特定功能的 jar 包。如,要在集算器 JDBC 用其它数据库作为集算器的数据源,那么还需要相应数据库的驱动 jar 包,本文涉及到 vertica,所以要同时增加其 JDBC 驱动包(以 vertica9.1。0 为例)

vertica-jdbc-9.1.0-0.jar vertica 官网即可下载

获取到以上 Jar 后,将其拷贝至 Birt 开发环境 [安装目录]\plugins\org.eclipse.birt.report.data.oda.jdbc_4.6.0.v20160607212 下。

注意:标红部分,不同 birt 版本略有不同

2、 配置文件集成

raqsoftConfig. ,主要包含集算器授权、脚本文件路径、其他作为集算器数据源的连接配置等。

可在 [esProc 安装目录]\esProc\config 下找到,需复制后放置在类路径下,同样将其拷贝至 Birt 开发环境 [安装目录]\plugins\org.eclipse.birt.report.data.oda.jdbc_4.6.0.v20160607212 下。

注意:配置文件名不能改变

(二) Birt 应用环境

1、 将(一)中的所有 jar 拷贝至应用的 WEB-INF\lib 下

2、 将 raqsoftConfig. 拷贝至应用的 WEB-INF\classes 下

例一:常规调用

1、 Vertica 内 Sales 表字段及数据说明(通过 vsql 查询,本测试库有 2013/14/15 年数据)

2467e66b38721384b9fb522ded4e105c.png

2、 编写并部署 esProc 脚本

(1) esProc 设计器添加 vertica JDBC 驱动包

vertica 官网下载 jdbc 驱动包(如,vertica-jdbc-9.1.0-0.jar),放至【esProc 安装目录】\common\jdbc 下

(2) 新增 vertica 数据源

打开设计器,Tool—Datasource connection 新增 JDBC 方式连接

04af6864dc0afea7e77ba7439d45c36c.png

点 ok 保存,再点 connect 连接

9315859579ef8303ba21e425afa718df.png

数据源名称变为粉色即表示连接成功。

(3) 编写算法脚本 (文件:VerticaExternalProcedures.dfx)

File – New

1eb4a810c840cbe064b7951193f993d8.png

(4) 部署脚本

将脚本文件部署到 raqsoftConfig. 配置的脚本文件主目录下。

c48e03ec92024f6500f5b932ca59b416.png

3、 esProc 配置文件 raqsoftConfig. 内增加 vertica 数据源连接配置

4、 Birt 开发工具内新建报表,并增加 esProc 数据源“esProcConnection”

0750ef7c6344aef755d0b4a869a5f394.png

Driver class 为”com.esproc.jdbc.InternalDriver(v1.0)”,会用到 dm.jar 等

Data URL 为”jdbc:esproc:local://"

5、 Birt 调用 Vertica 外部存储过程(esProc 数据集)

新建“Data Sets”,选择配置的集算器数据源(esProcConnection),数据集类型选择存储过程(SQL Stored Procedure Query)

75f59f6c108ba3f0f38a80752abcc143.png

Next,查询脚本(Query-Query Text)输入:{call VerticaExternalProcedures()}

a64b74b7322cd43c77b2a2ae43f31b85.png

其中:VerticaExternalProcedures 为 esProc 脚本文件名

Finish,预览数据(Preview Results)

69181962ee4992fc3d4574ab6986599c.png

此时,便看到了把 esProc 脚本作为 Vertica 外部存储过程取数辅助计

算的过程。

6、 Birt Web 端呈现

以简单的网格报表为例

报表设计如下

c7242392df6b657ec85d662eaddb82b9.png

Web 发布预览

6f31756f6b0a720ca10a122f15e23ba5.png

例二:参数调用

这里把“找出订单销售额占到一半的前 n 个客户,并按销售额从大到小排序”,改为要求按年查询,即“按年度查询订单销售额占到一半的前 n 个客户,并按销售额从大到小排序”,因此增加了参数过滤功能。

下面看下具体的改法:

1、 esProc 脚本增加按年度参数及过滤功能

打开 esProc 设计器,Program – Parameter – Add

参数名为“qyear”(可与报表参数名不同)

8bc9dd4e05166ac799e35737f0e0bc7d.png

脚本改动:

e897a5a5d6e1105fe7ec9076daa01a17.png

注:A2 增加条件过滤

2、 报表内增加年度参数

报表增加按年查询的入口参数,参数名为“qyear”

开发工具打开报表,Data Explorer – Report Parameter – new patameter

7c9f73d54686f0f5a61a5c86986e9e7b.png

Default value 为 qyear 的默认值。

3、 报表数据集增加数据集参数并与报表参数绑定

Data set 内编辑 VerticaExternalProcedures 数据集

e5fc7e19b034e02d15a6ac2a3491b612.png

Query Text 改为“{call VerticaExternalProcedures(?)}”,? 为入口参数年

度,此处用占位符设置。

选 Parameters,增加数据集参数 qyear 并与报表参数 qyear 绑定。

d2551842b68d83b50d2ff633257276be.png

Preview Results, 这里根据 qyear 默认值仅有查询 2013 年数据

677bee496fef872449d2601efb83c679.png

改为“2015”后

112f7134621a4bca62e3ebc7a3cf5c81.png

4、 Web 端预览

5244449a676b2a0736d59bd5924e6dda.png

查询“2015”年数据

fc6515634d7d517d50969a9e23755edf.png

修改或 url 传入 qyear 为“2013”年后

89da4f8057a3c6c210bfb1fbb0f47a2c.png

总结

以上所述是小编给大家介绍的如何让Birt报表脚本数据源变得既简单又强大,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值