我创建了一份SSRS报告,其中包含一个下拉列表,用于参数化报告的数据。这很好用。我现在需要添加另一个参数来进一步过滤报告。例如,我有一个位置下拉列表,显示区域,国家,地区等。我需要添加另一个下拉列表,该下拉列表取决于第一个下拉列表。因此,如果我在第一个下拉菜单中选择“国家/地区”,我会在第二个下拉列表中显示国家/地区列表,或者如果我选择地区 - 我会在第二个下拉列表中显示区域列表。国家,地区,地区数据存储在不同的表中。所以基本上我的查询需要足够智能,以便根据第一个下拉选择运行适当的sql。
非常感谢你给予的任何帮助。
答案 0 :(得分:4)
Reporting Services的一个强大功能是所有内容都是表达式,包括数据集的SQL语句。
假设您的第一个参数(描述要选择的内容的参数)被称为Location
,它会选择一个位置列表,例如国家/地区,区域等。也许您可以从具有{的表中获取该参数。 {1}}和LocationId
之类似:
Description
您将Location参数连接到此查询,以获取SELECT LocationId, Description FROM Locations
参数的位置选择器的下拉列表。
现在创建一个名为Location
的第二个参数,我们要从国家或地区列表中进行选择。为了简单起见,我假设只有两个位置:LocationId为1的Country和LocationId为2的Region。
创建一个名为Select
的新数据集,并手动向其中添加名为Selections
和Id
的字段。将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.
如果不清楚,请告诉我。