主子报表多数据源的处理

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

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

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

表emp

表sales

集算器代码:

empEsProc.dfx(该脚本文件用于主报表)

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

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

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

salesEsProc.dfx(该脚本文件用于子报表)

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

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

A2:将A1返回给报表工具。

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

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

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

之后就可以在JasperReport的SQL设计器中调用empEsProc.dfx,表达式是:empEsProc $P{pLow},$P{pHigh}。

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

对于报表来说,empEsProc.dfx和salesEsProc.dfx来自于同一个数据源esProcConn,因此子报表的数据源选择“Use same connection used to fill the master report”,如下图:

类似的,在子报表中调用集算器的SQL写作:salesEsProc $P{pEId}

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

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

报表模版:

报表预览:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 14:43:49

主子报表多数据源的处理的相关文章

水晶报表主子报表分页问题

导言: 在设计主子报表时,通过在主报表的详细段分组,依次显示子报表.主报表只是个框架,子报表分别显示数据.在设计过程中,因为不清楚原理,经常性的子报表无故分页,给报表设计带来了极大的麻烦.现在将遇到的问题总结如下:报表结构如下图: 子报表1放在详细资料a中,子报表2放在详细资料b中 一.表头有空页 原因:主报表的报表头/页眉区域过大使得分页 解决: 1.将主报表 表头/页眉抑制显示:section expert 中设置表头/页眉抑制显示 2.移动准线使得主报表 表头/页眉区域压缩为没有 二.子报

润乾集算报表多样性数据源之动态SQL传递

大多数情况下报表的数据源SQL都是固定的,但有时也需要动态变动其中某些部分实现动态拼出,比如在报表应用中允许用户通过选择表和字段查询自己关心的报表数据,报表开发时则希望对同类报表(明细或汇总)使用同一模板.这时就需要在报表中接收相应参数拼接出动态SQL进行查询后制作动态报表. 润乾集算报表提供了两种处理动态SQL的方法,使用宏和集算脚本,可以快速完成这类报表,下面举例说明. 使用宏 集算报表提供了宏机制,通过在动态宏中拼接SQL后交由数据集查询结果,最后在报表中使用动态表达式获得字段名和字段值完

润乾集算报表优化应用结构之报表复杂数据源的管理

在报表项目中,常常有些复杂数据计算是为一个报表专用的,其它报表用不到.可以用SQL实现写进报表数据源中,但由于SQL无法分步计算,经常会写出非常复杂难懂的长语句,不利于调试和维护.如果用Java或者存储过程来实现,计算程序会和报表模板又会分开,不利于管理.使用润乾集算报表的脚本数据集来实现报表专用计算,既可以写出简单易懂的分步骤计算脚本,又可以将脚本存放在报表模板中利于管理.系统结构的对比如下图: 下面通过一个具体的报表例子来看一下集算报表脚本数据集的用法.<年度客户销售分析报表>可以选择年份

如何复用多个报表的数据源

在报表项目中,经常有多个报表的数据源计算方法有共同的部分.使用润乾集算报表,采用可挂接算法的方案时(参见http://blog.raqsoft.com.cn/?p=644),可以更方便地将这些共同部分用同一个脚本来完成,从而实现算法复用.算法复用的好处是:一个算法只实现一次,不会出现同一个算法多处实现导致不一致的情况.同时也避免一个算法实现很多次的重复劳动,减轻工作量. 下面通过两个报表复用同一个算法的例子来看一下具体的实现方法.报表1是"员工绩效工资明细表",可以按照STATE来选择

润乾集算报表多样性数据源之混合多源

多样性数据源在报表开发中越来越常见,润乾集算报表对多样性数据源的有效支持使得这类报表开发变得非常简单,目前集算报表支持的数据源类型除传统的关系型数据库外,还支持:TXT文本.Excel.JSON.HTTP.Hadoop.mongodb等. 在集算报表中除了单独使用以上数据源,还可以混合使用.支持混合多数据源是集算报表多样性数据源的又一表现.下面通过一个实例说明使用过程. 报表说明 员工每月应发工资跟员工的基本工资.考勤以及绩效有关,考勤信息来源于人力部门从考勤系统中导出的文本文件,基本工资和绩效

RDLC系列(一)ASP.NET RDLC 报表自定义数据源

最近一段时间开发ERP系统中要用到不少报表打印,在网上找了一圈发现想些好用的报表控件大部分要收费,一些面免费要么不好用要么IE8不兼容,最后还是用了微软自带的RDLC报表,把自己遇到的坑和技巧整理分享出来. 一般Visaul Studio上新建的的EDLC报表文件之后数据源都是按照向导直接连接数据库,自动生成数据源和数据集的,但是遇到一些复杂的就不够灵活. 一.新建报表 1.新建一个空白的报表如下 2.打开新建好的空报表文件,选择报表文件右键选择[打开方式]→[XML(文本)编辑]打开 在Pag

ssrs报表设计主子报表实例

环境描述:vs2010  sql2012 报表要求:1.根据合同号(ContractNo)从主订单表(Order_Main)里获得所有信息. (实际项目不可能这样,这里只是例子) 2.但是合同号必须从主报表作为参数传给子报表 关于怎么配置数据源和数据集请看 http://wenku.baidu.com/view/1175f781856a561252d36fbf.html或者 http://8071125.blog.51cto.com/8061125/1636666 这里就不详细介绍了 一.新建主

润乾集算报表多样性数据源之json

多样性数据源在报表开发中越来越常见,润乾集算报表对多样性数据源的有效支持使得这类报表开发变得非常简单,目前集算报表支持的数据源类型除传统的关系型数据库外,还支持:JSON.HTTP.TXT文本.Excel.Hadoop.mongodb等. JSON作为一种轻量级数据格式应用非常广泛,报表读取json数据源进行报表开发的需求也很常见,另外有些报表还会接收来自HTTP服务器的数据进行报表展现.这里通过例子分别来看一下集算报表使用json数据源和http数据源的过程. 一般JSON数据源 报表说明 学

报表多样性数据源之MongoDB

MongoDB等nosql数据库具有易扩展和高性能等优势,但计算能力比传统SQL要弱,例如MongoDB的分组结果不能太大,且不直接支持join运算等,而集算报表内置的计算引擎再正好可以补充这一点,在获得MongoDB的优势的同时还拥有较强的计算能力. 我们通过一个分组实例来了解一下集算报表使用MongoDB数据源开发报表的过程. 报表说明 学生成绩信息存储在MongoDB中,包含班级.姓名.成绩.科目等信息,成绩表(score)数据内容如下: 现根据学生信息汇总总成绩,并排名.以下为实现步骤: