gpt4 book ai didi

reporting-services - 带 SSRS 的条件下拉列表

转载 作者:行者123 更新时间:2023-12-01 22:43:14 25 4
gpt4 key购买 nike

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

非常感谢您提供的任何帮助。

最佳答案

Reporting Services 的强大功能之一是一切都是表达式,包括数据集的 SQL 语句。

假设您的第一个参数(描述要选择的内容的参数)称为 Location,它选择了一个位置列表,例如国家、地区等。也许您从一个表中得到它有一个 LocationId 和一个 Description,如下所示:

SELECT LocationId, Description FROM Locations

您将 Location 参数连接到此查询以获得 Location 参数的位置选择器下拉列表。

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

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

=IIF(Parameters!Location.Value = 1, 
"SELECT CountryId AS Id, CountryName AS Description FROM Countries",
"SELECT RegionId AS Id, RegionName AS Description FROM Regions")

因此,如果 Location 参数设置为 1(国家/地区),您可以从国家/地区表中选择,否则您可以从地区表中选择。您为字段名称设置别名,以便为您的数据集获得一致命名的字段,以便在 Select 参数查询中使用。显然,您可以根据需要将其扩展到更多选择。

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

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

SELECT CountryId AS Id, CountryName AS Description FROM Countries

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

SELECT RegionId AS Id, RegionName AS Description FROM Regions

现在 Locations 表中包含 Selections 数据集的 SQLStatement 值。你不能直接使用它(你的数据集只会返回 SQL 语句字段的值,而不是执行它)但是你想要一些东西返回这个字符串作为用于 Selections 的 SQL 语句的表达式 数据集。自定义代码可用于执行此操作。所以用于 Selections 数据集的表达式将是这样的:

=Code.GetSQLStatement(Parameters!Location.Value)

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

Public Function GetSQLStatement(LocationId As Integer) As String
Dim SQL As String
SQL = "SELECT SQLStatement FROM Locations WHERE LocationId = " + CStr(LocationId)
' Connect to database, get SQLStatement field
GetSQLStatement = <Field Value>
End Function

当您想添加另一个位置选择时,例如大洲,您所要做的就是向 Locations 表中添加另一行,例如 LocationId = 3, Description = Continent 和 SQLStatement = SELECT ContinentId AS Id, ContinentName AS Description FROM Continents,现在您拥有的每个按位置选择的报告都可以使用 Continents。

关于reporting-services - 带 SSRS 的条件下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8040080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com