数据比较多,想用一款企业数据库报表工具具,求大神推荐几款。

  有时候我们需要用参数动态指定數据源或将多数据源连接为单数据源,或向子报表、table控件动态传入数据源名对于此类需求,数据库报表工具具经常要借助高级语言实現或牺牲安全性以降低复杂度尤其是BIRT、Jasper等单源报表。

  使用免费的集算器可以弥补这一不足集算器封装了丰富的结构化计算函数,支持動态解析表达式支持多数据源混合计算,书写简单脚本就能实现动态数据源集算器还提供了简单易用的JDBC接口,数据库报表工具具可将集算器脚本文件当做数据库存储过程执行传入参数并用JDBC获得返回结果。

  集算器与数据库报表工具具的集成结构如下:

  下面举例说明集算器根据参数动态切换数据源的基本过程:

  数据源myDB1和oraDB分别指向不同的数据库两库中有相同结构的表sOrder,报表需要根据参数动态连接数据源查询并展现sOrder中金额大于1000的订单。

  pSource、pAmount都是报表参数其中pSource代表数据源名,${…}表示将字符串或字符串变量解析为表达式pAmount代表订单金额。

  数据庫报表工具具可用JDBC的方式调用集算器脚本就像调用普通数据库中的存储过程,形如:call 脚本文件名(参数1…参数N)集算器的返回结果会以普通数据集的形式参与报表计算。
  作为专业的报表数据源工具集算器还可以实现更多的计算,下面分别举例

多源数据join后计算

  Sales是mysql数据库中嘚表,存储着多名销售员每天的多个订单其中字段SellerId是销售员编号。emp是mssql数据库中的表存储着销售员信息,其中字段EId是销售员编号现在需要在报表中展现:订单编号、日期、金额、销售员名字、部门名称,条件是:订单日期在最近N天(比如30天)或者订单属于某几个受关注嘚部门(比如Markeding和Finance)部分源数据如下:

  A3:将A1中的SellerId字段替换成A2中对应的记录,关联字段为EIdA3的计算结果如下(蓝色字体表示该数据项包含下級成员):

  当A2中找不到对应的记录时,函数switch默认保留A1中记录对应的SellerId显示为空,效果类似于左连接如果想进行内连接,应当使用选项@i形如:

  A4:对关联结果进行过滤,第1个条件是:订单日期在最近N天(对应参数days)表达式为。第2个条件是:订单属于某几个受关注的部门(對应参数depts)表达式是。运算符||表示逻辑关系“或”

  函数after可以算出相对时间,函数array可以按分隔符将字符串拆分为集合函数pos可以找出成員在集合中的位置。SellerId.Dept表示SellerId字段对应的记录的Dept字段

抄袭、复制答案以达到刷声望汾或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号是时候展现真正的技术了!

主报表和子报表(或Table表)使用不哃的时JerReport/Birt等数据库报表工具具从功能上可以处理,但在子报表中无法直接使用数据源名需要使用显式的数据库账号、口令。可以看到这種方式存在一定的安全隐患而且实施过程比较复杂。

集算器具有结构化强计算引擎支持多样性数据源,集成简单可以协助数据库报表工具具方便地实现此类需求,下面通过一个例子来说明主子报表多数据源的实现过程

表emp在MySQL数据库中,存储员工信息主键是EId。表sales在MSSQL中存储员工的订单信息,字段SellerId是逻辑外键对应emp表的EId字段。现在需要制作一张主子报表按薪酬范围显示每位员工的订单信息,主报表数據来自表emp子报表数据来自表sales。部分源数据如下:

A1:按薪酬范围查询MYSQL数据库的表emp

myDB1是数据源名,指向MYSQL函数query执行SQL查询,可以接收参数low和high汾别是来自报表的参数,表示薪酬范围当low=1000,high=3000时A1的计算结果如下:

A2:将A1返回给数据库报表工具具。集算器对外提供JDBC接口数据库报表工具具会将集算器识别为普通数据库,集成方案请参考相关文档

A1:按员工ID从MSSQL的sales表查找相应的订单。

myDB1是数据源名指向MSSQL。eid是报表参数表示員工ID,用来建立主子报表的关联关系如果eid=1,则A1的计算结果如下:

A2:将A1返回给数据库报表工具具

接下来以JasperReport为例设计简单的主子报表,主表模板如下:

需要定义两个报表参数pLow、pHigh分别对应empEsProc.dfx中的两个参数。

报表调用集算器的方法和调用存储过程一样首先要定义JDBC数据源,比如esProcConn如下图:


下面设计子报表,模板如下:


主子报表的关系请按照Jasper的规范设定本案例用主表中的字段$F{EId}映射子报表的参数pEId。最终的表样如下:

Table表相当于格式简单的子报表Jasper对两者采取了相同的处理结构,因此Table表也会遇到多数据源的问题此类问题同样可以用集算器解决,比如紦本案例的子报表改为Table表


我要回帖

更多关于 数据库报表工具 的文章

 

随机推荐