主子表从多数据源取数
应用场景
用户有多个数据库,每个数据库中都有相同的表和字段,然后基于数据库表做报表
展现数据的报表,可能需要查A数据库的数据,也可能查B数据库的数据,还可能同时查A、B数据库的数据,这时,就希望,以参数的形式,将数据源的名称传给数据集语句,来连接数据库获取数据
我们来看一下例子
Sql server 数据库
数据库A:xrq1
数据库表:CREATE TABLE a1(
id varchar(20) default NULL,
name varchar(20) default NULL,
num varchar(20) default NULL
);
数据集:SELECT * FROM xrq1.dbo.a1
数据库B:xrq2
数据库表: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单元格中,展现参数:
B3,C3,D3合并,设置子报表
3 制作子报表,接收主报表单元格的值传过来的参数,如下图:
给子报表设置参数,arg1,如下图:
给子报表设置动态宏
子报表的数据集,Sql:SELECT * FROM ${macro1}.dbo.a1
宏:case(arg1,
list(“”), “” ,
list(“xrq1″), “xrq1″ ,
list(“xrq2″), “xrq2″ ,
list(“xrq3″), “”
)
4 再主报表中设置子报表,设置参数关联关系,如下图:
到此,制作就完成了,就能看到页面展现的效果了。