带SSRS的条件下拉列表

时间:2011-11-07 17:21:33

标签: reporting-services ssrs-2008

我创建了一份SSRS报告,其中包含一个下拉列表,用于参数化报告的数据。这很好用。我现在需要添加另一个参数来进一步过滤报告。例如,我有一个位置下拉列表,显示区域,国家,地区等。我需要添加另一个下拉列表,该下拉列表取决于第一个下拉列表。因此,如果我在第一个下拉菜单中选择“国家/地区”,我会在第二个下拉列表中显示国家/地区列表,或者如果我选择地区 - 我会在第二个下拉列表中显示区域列表。国家,地区,地区数据存储在不同的表中。所以基本上我的查询需要足够智能,以便根据第一个下拉选择运行适当的sql。

非常感谢你给予的任何帮助。

3 个答案:

答案 0 :(得分:4)

Reporting Services的一个强大功能是所有内容都是表达式,包括数据集的SQL语句。

假设您的第一个参数(描述要选择的内容的参数)被称为Location,它会选择一个位置列表,例如国家/地区,区域等。也许您可以从具有{的表中获取该参数。 {1}}和LocationId之类似:

Description

您将Location参数连接到此查询,以获取SELECT LocationId, Description FROM Locations 参数的位置选择器的下拉列表。

现在创建一个名为Location的第二个参数,我们要从国家或地区列表中进行选择。为了简单起见,我假设只有两个位置:LocationId为1的Country和LocationId为2的Region。

创建一个名为Select的新数据集,并手动向其中添加名为SelectionsId的字段。将Description参数连接到此数据集。现在,对于Select数据集的SQL语句,请输入以下表达式:

Selections

因此,如果=IIF(Parameters!Location.Value = 1, "SELECT CountryId AS Id, CountryName AS Description FROM Countries", "SELECT RegionId AS Id, RegionName AS Description FROM Regions") 参数设置为1(国家/地区),则从“国家/地区”表中进行选择,否则您将从“区域”表中进行选择。您对字段名称进行别名,以便为数据集获得一致的命名字段,以便在Location参数查询中使用。显然,您可以根据需要将其扩展到更多选择。

您明白了这一点,但这有点脆弱 - 只要您想添加新的位置类型,就必须浏览所有报告并更新Select数据集的SQL语句。这很乏味,没有人想要那份工作。我们想要的是一个自动化系统,所有报告在添加时都会获得新的选择。

因此,让我们在Locations表中添加一个名为SQLStatement的列。对于Country行,它将具有值:

Selections

对于Region行,SQLStatement字段的值为:

SELECT CountryId AS Id, CountryName AS Description FROM Countries

现在,Locations表中包含SELECT RegionId AS Id, RegionName AS Description FROM Regions 数据集的SQLStatement值。你不能直接使用它(你的数据集只会返回SQL语句字段的值,而不是执行它)但是你希望有一些东西将这个字符串作为用于{{1}的SQL语句的表达式返回数据集。自定义代码可用于执行此操作。因此,用于Selections数据集的表达式将是这样的:

Selections

然后你有这样的自定义代码函数(遗漏了重要部分):

Selections

如果要添加其他位置选择(例如大陆),您只需向Locations表添加另一行,例如LocationId = 3,Description = Continent和SQLStatement = =Code.GetSQLStatement(Parameters!Location.Value) ,现在每个报告你有按位置选择将能够使用大陆。

答案 1 :(得分:0)

第一个数据集添加此SQL

Select ContryName, CountryID From Country

假设上述数据集的参数名称为@country,则在第二个数据集上添加以下SQL

Select RegionName, RegionID From Region

Where CountryID IN( @country)

答案 2 :(得分:0)

很简单。我们假设表“ONE”的数据如下:

**Location_Type**   **Location**
Country            India
Country            Sri Lanka
Country            China
Country            Japan
City               Bangalore
City               Hyderabad
City               Delhi

Ex: - 查询Report参数(@ Location_Type1):

Select Distinct Location_Type from One

查询第二个报告参数:

Select Location from ONE where Location_Type = @Location_Type1.

如果不清楚,请告诉我。