配色: 字号:
动态数据源与报表系统绑定的4个步骤
2017-07-17 | 阅:  转:  |  分享 
  
动态数据源/集与报表系统绑定的4个步骤

实际项目中,存在一种设计报表时无法明确知道从哪个数据库中取数的情况。例如,根据

查看报表的用户身份不同,所要取数的数据库也不同。在这种场景中,就需要用到动态数据源。

所谓动态数据源,就是连接字串为表达式形式的数据源。通过在表达式中使用报表参数,

实现不同用户访问不同数据库的效果。

所谓动态数据集,就是SQL语句为表达式形式的数据集。通过在表达式中使用报表参数,

实现不同用户访问不同数据库表或视图的效果。

创建一个动态数据源的思路如下:

(1)先设计好静态的数据源连接字串和数据集。这是为了获得数据集的字段列表,以便

设置表格、图表等报表元素的数据字段绑定。

(2)添加报表参数。

(3)修改数据源,将连接字串设置为表达式,表达式中引用报表参数,从而实现具体数

据源随参数不同而变化的“动态”效果。

下面用葡萄城报表举例,说明具体的设计方法。

4.1设计静态的数据源

启动报表设计器,新建一个RDL类型的报表。

添加一个SQLServer数据源,连接字串如下:

datasource=(local);password=123;initialcatalog=ArsDemo;userid=user1;

如下图:



添加一个数据集,SQL语句如下:

selectfrom产品



字段列表如下:



拖放一个表格到设计区,绑定数据集的字段,如下图:



预览效果如下图:



到目前为止,一个静态数据源的报表就设计完成了。

4.2添加报表参数

添加报表参数是为实现动态数据源做准备。添加报表参数的步骤如下:

(1)右键单击报表资源管理器的【参数】节点,再点击【添加参数】,如下图:



(2)设置参数名称等信息,如下图:



(3)点击【确定】按钮。

此时会看到报表资源管理器的【参数】节点下面多了一个DbName参数,如下图:





4.3修改数据源设置

定义好报表参数之后,就可以重新设置数据源,使之变成动态数据源了。方法如下:

(1)右键单击数据源,再单击【修改】,如下图:



(2)在数据源设置对话框中,切换到【连接字符串】选项卡,再单击代表表达式的fx图

标,如下图:



(3)在表达式编辑器窗口中,将原来的连接字串改为表达式。

具体包括:

(a)在连接字串之前加上等号和双引号(=”)

(b)删除连接字串中末尾的数据库名称ArsDemo。

(c)在连接字串末尾加上双引号、空格、&符,如下图:



(d)在左侧的表达式元素列表树中,展开【参数】,选中之前定义好的DbName参数,

单击【插入】按钮。

此时,连接字串变成下面这样的表达式:

="datasource=(local);userid=user1;password=123;initialcatalog="&

Parameters!DbName.Value

(e)点击【确定】按钮,完成表达式的编辑,返回数据源设置对话框。如下图:



此时,数据源的连接字串就变成一个表达式的形式了。

(4)点击【确定】按钮,保存数据源。

(5)点击【预览】查看报表效果。此时将出现一个报表参数栏,需要先输入DbName参

数,再点击【查看报表】按钮,才能看到报表内容,如下图:



图中输入的数据库名为ArsDemo,如果输入另有一个数据库名,报表系统将连接到那个

数据库执行查询,以获取数据集的数据。这就是动态数据源的效果。

4.4动态数据集的实现

同样的,数据集的SQL语句也支持表达式,因此用同样方法,也可以实现参数化的动态

数据集。具体步骤如下:

(1)定义一个TableName参数,如下图:



(2)在数据集的设置对话框中,点击fx图标,打开表达式编辑器,如下图:



(3)通过插入TableName参数,将SQL语句修改位如下表达式:

="selectfrom"&Parameters!TableName.Value

如下图:



(4)此时预览报表,将需要输入两个参数,分别代表数据库名和表名,如下图:



除了数据库名,数据源连接字串的其他部分也可以设计成参数化的动态表达式,比如数据

库用户名。

同样,除了表名,数据集的SQL语句中,其他构成部分(例如where条件或其中某个

and子句)也可以根据参数设计成动态表达式。

一个典型的应用场景是:如果一个参数有值,那么就按这个参数值过滤某个字段的数据,

否则就不要将这个参数作为过滤条件。

例如:

="selectfromuserwhere1=1"&IIF(Parameters!p1.Value="","","and

usernamelike''%"&Parameters!p1.Value&"%''")

以上表达式的含义就是:如果用户没有输入p1参数,则SQL将为:

Selectfromuserwhere1=1

否则,如果用户输入了p1参数,则SQL语句将变成:

Selectfromuserwhere1=1andusernamelike%p1参数值%



献花(0)
+1
(本文系断天涯大虾q...首藏)