主子表从多数据源取数

应用场景

用户有多个数据库,每个数据库中都有相同的表和字段,然后基于数据库表做报表

展现数据的报表,可能需要查A数据库的数据,也可能查B数据库的数据,还可能同时查AB数据库的数据,这时,就希望,以参数的形式,将数据源的名称传给数据集语句,来连接数据库获取数据

我们来看一下例子

Sql server 数据库

数据库Axrq1

数据库表:CREATE TABLE a1(

id varchar(20) default NULL,

name varchar(20) default NULL,

num varchar(20) default NULL

);

数据集:SELECT * FROM xrq1.dbo.a1

数据库Bxrq2

数据库表:CREATE TABLE a1(

id varchar(20) default NULL,

name varchar(20) default NULL,

num varchar(20) default NULL

);

数据集:SELECT * FROM xrq2.dbo.a1

在页面展现的效果:

既根据传过来的数据库参数,查出数据库中的数据,然后将这些数据库中的数据当一个并集,然后展现在页面中。

实现这样的效果,有3个简便的方法:

1 存储过程

将数据源名称传给存储过程,在存储过程中,实现数据的合并,返回一个结果集

2 视图

将多个数据库中的表数据,先生成一个大视图,然后从这个视图中取数

3 主子表

将主表单元格的值(数据源名称)当参数传递给子表,子表展现数据

存储过程和视图的方法,这里就不介绍了,下面详细介绍一下主子表的实现方法:

主子表的实现步骤:

1 制作参数表单,供下拉选择数据源名称,可多选,如下图:

B1单元格中的WEB变量值设置为arg1

2 制作主报表,接收参数表单传过来的参数,如下图:

在报表中定义一个参数,arg1,数据类型选”字符串组”

A3单元格中,展现参数:

B3C3D3合并,设置子报表

3 制作子报表,接收主报表单元格的值传过来的参数,如下图:

给子报表设置参数,arg1,如下图:

给子报表设置动态宏

子报表的数据集,SqlSELECT * FROM ${macro1}.dbo.a1

宏:case(arg1,

list(“”), “” ,

list(“xrq1″), “xrq1″ ,

list(“xrq2″), “xrq2″ ,

list(“xrq3″), “”

)

4 再主报表中设置子报表,设置参数关联关系,如下图:

到此,制作就完成了,就能看到页面展现的效果了。

热门文章