当你在使用报表时,你需要添加参数来缩小报表范围进行更好的分析。你将经常看到你需要不止一个的参数,第二个参数可能取决于第一个参数,通常要求你基于第一个参数更新第二个参数。
此外,你可能需要添加具有多个和/或默认值的参数。这篇文章讲述怎样在SQL Server 2005报表服务(SSRS)中创建参数。
前提要求
要理解本篇文章的内容,你应该对在SSRS中创建报表有所了解,因为这篇文章会详细地回顾怎样在SSRS中创建报表。然而,我将在讲述SSRS报表的创建时尽可能多地介绍。还有,你将需要知道怎么编写连接两个或更多表的基本T-SQL 查询。
为了达到有效地利用资源,你需要将SQL Server 2005和SQL Server商业智能开发套件安装在一起。因为我将使用AdventureWorks 示例数据库中的数据,如果你在你的SQL Server 版本中安装了AdventureWorks 数据库,那将会简单得多。
示例
因为通过示例对读者进行解释总是很有帮助的,所以让我们假设我们想要根据雇员的国家、州/省和城市列出雇员。用户应该有一个选择国家的选项。根据选出的国家,我们要列出所选国家的州/省。在选择了一个州后,我们应该列出相关的城市,并且用户应该具有能从列表中选择一个或多个城市的选项。根据选择的一个或多个城市,最后用户应该就可以得到一个符合标准的雇员列表。
实现
首先,你必须从SQL Server商业智能中创建一个报表服务项目,然后添加一个报表到这个项目中。接下来是创建一个指向AdventureWorks数据库的共享数据源。我们现在需要为国家添加一个数据集。你可以通过在数据集列表框中选择‘选项’从数据库标签添加这个数据集。然后如下图所示的配置dsCountry数据集。
下一个工作是将这个dsCountry 分配给一个报表参数。从报表菜单中选择‘Report Parameters’选项。
#p#下面是你应该看到的一个截屏。
上面对话框中的选项有:
Name – 参数的名称。当你选择了一个值后,这个值会存储在这个参数中。因为这是一个变量名称,所以你不能在这个字段中包含有特殊字符(*,!或空格等等)。
Data Type – 参数的数据类型。这个选项的选择包括:Boolean、Datetime、Integer、Float 和String。在这个例子中,我们将选择‘String’用于国家参数。
Prompt – 提示就是你在报表中将看到的。因为它是一个标签,所以你可以在提示中使用任何字符。
下面的属性如它们的名称所显示的一样简单。Hidden和Internal 的不同之处是Hidden变量可以改变而internal 变量则不能。
下一步是给参数赋值。
当参数具有固定值如是/否、男/女等时,应该使用非询问选项。询问选项是从一个数据集给参数赋值。在这个示例中,数据集是dscountry,我们需要添加两个值:值字段和标签字段。标签字段是用户将会看到的,而值字段是将要存储在参数中的。在这个示例中,如果用户选择了United Status,那么在国家参数中将存储的值是US。
下一步是赋予缺省值。一个缺省值使得用户可以更容易地使用报表,因为缺省值是用户最可能选择的值。例如,在这个报表中用户选择United States,所以将United States 作为缺省值使得用户可以更容易地填写表格。
使用另一个参数的参数
下一个工作是创建州/省参数。如同我前面所说的,州/省参数取决于在第一个询问中用户所选择的国家,所以在我们的州/省数据集中,我们应该编写询问来达到这个标准。
你从上面的图片中可以看到包含了‘@Country’用于询问。这个@Country 变量将获得用户选择的国家参数的值。
接下来是创建一个叫做Province的报表参数,并将它附加到dsProvience数据集中。这个的做法和Country 参数的做法一样。Province 报表参数屏幕如下图所示。
因为我们已经做了接近一半的报表工作,所以我们该做个简单测试了,点击“preview”标签。你可以看到当你改变国家时省份列表也跟着改变了。例如,当国家是Australia和Germany时会看到下面两个图片。
多值参数
在配置了国家和省参数之后,现在我们要配置城市参数。城市数据没有主表。我们将使用Person.[Address]表来获得一个城市列表作为工作区。因为城市取决于所选的省,所以我们需要使用@Province 参数来获得城市列表。下面是城市数据集dsCity的截屏。
【编辑推荐】