第 3 课:添加具有可用值列表的单值参数
新建日期: 2006 年 7 月 17 日
可用值(即有效值)为报表读者提供一系列可能的报表参数值。报表作者可以提供专门用于从数据源中检索一组值的查询中的有效值,也可以提供一组预定义的值。通过将一组可用值绑定到处理报表时运行的数据集查询,可以确保只能从下拉列表中选择数据库中存在的值。
在本课中,您将修改销售订单报表以显示 AdventureWorks 数据库中可用销售人员名称的下拉列表。并将设置一个表属性,以便在所选参数值的结果集中没有行时显示消息。当选择某个名称并查看此报表时,此报表只显示该销售人员的销售额。
打开销售订单报表
在 SQL Server Business Intelligence Development Studio中,打开在上一课中创建的 Tutorial 报表服务器项目。
在解决方案资源管理器中,双击“销售订单”报表。将在**“布局”**视图中打开此报表。
单击**“数据”**选项卡。
向 AdventureWorks 数据集查询添加查询参数
从**“数据”选项卡的“数据集”**下拉列表中,选择 AdventureWorks。
向查询中添加新的查询参数 @SalesPersonID。在查询中,扩展 WHERE 子句以包括以下比较:
AND S.SalesPersonID = (@SalesPersonID)
。用以下文本替换现有的查询:
SELECT S.OrderDate, DATENAME(weekday, S.OrderDate) as Weekday, S.SalesOrderNumber, S.TotalDue, C.FirstName, C.LastName, C.ContactID FROM HumanResources.Employee E INNER JOIN Person.Contact C ON E.ContactID = C.ContactID INNER JOIN Sales.SalesOrderHeader S ON E.EmployeeID = S.SalesPersonID WHERE ( S.OrderDate BETWEEN (@StartDate) AND (@EndDate) AND S.SalesPersonID = (@SalesPersonID) )
注意: 查询参数外的括号是查询语法中的重要部分。 单击**“运行”(!**) 按钮。提示输入查询参数的值时,请使用下表来输入值。
@StartDate
20010101
@EndDate
20030101
@SalesPersonID
286
单击**“确定”**。随即显示 SalesPersonID = 286 的销售人员 Ranjit Varkey Chudakatil 的结果集。
(可选)验证查询参数 @SalesPersonID 是否具有值:
=Parameters!SalesPersonID.Value
。单击**“编辑所选的数据集”(…) 按钮并选择“参数”**选项卡。(可选)验证是否已经为您自动创建了报表参数 SalesPersonID。从**“报表”菜单中,选择“报表参数”。将打开“报表参数”对话框。验证 SalesPersonID 是否在“参数”**窗格中。您将在本主题后面的过程中编辑该参数。
在下一步中,将创建一个为报表参数 SalesPersonID 的可用值下拉列表提供值的单独的数据集。
创建 SalesPersons 可用值数据集
在**“数据集”下拉列表中,选择 <新建数据集>。将打开“数据集”**对话框。
提供新数据集的名称。在**“名称”**字段中,键入 SalesPersons。该数据集将用于输入有效值列表。
在查询窗格中粘贴以下 Transact-SQL 查询:
SELECT SP.SalesPersonID, C.FirstName, C.LastName FROM Sales.SalesPerson AS SP INNER JOIN HumanResources.Employee AS E ON E.EmployeeID = SP.SalesPersonID INNER JOIN Person.Contact AS C ON C.ContactID = E.ContactID
单击**“运行”(!**) 按钮。SalesPersonID、FirstName 和 LastName 列显示在结果集中,并且显示为数据集 SalesPersons 中的字段。
虽然可以向查询添加计算字段(例如,向 SELECT 语句添加
LastName + N' ' + FirstName as Name
作为附加列),但 Reporting Services 仍然提供了一种从现有数据集字段创建新计算字段的方法。如果查询使用检索一组预定义列的存储过程,则可以使用该功能。在下一步中,将为包含两个现有字段的数据集创建一个新字段。
添加新的计算数据集字段
在“数据集”窗口中,右键单击 SalesPersons 数据集并选择**“添加”**。
如果“数据集”窗口未打开,请按 ALT+CTRL+D。
在**“名称”**文本框中,键入 Name。
选择**“计算字段”**选项。
在文本框中粘贴以下表达式:
=Fields!LastName.Value + ", " + Fields!FirstName.Value
单击**“确定”**。
在数据工具栏中,单击**“刷新字段”**。新字段 Name 即显示在数据集 SalesPersons 的字段集合中。
在下一步中,将设置表数据区域属性 NoRows。如果从表的相关数据集中没有检索到数据,则显示该属性中的文本。
向表添加 NoRows 消息
单击**“布局”**选项卡以切换到“布局”视图。
从**“视图”菜单中,选择“属性”**窗口。
从“属性”窗口的对象下拉列表中,选择表。默认情况下,表名称为 table1。
在“属性”窗口中,滚动到 NoRows。
单击 NoRows 旁边的文本框,并输入以下文本:
没有适用于该参数组合的可用结果。
如果特定查询参数的结果集没有生成行,则显示该消息。
(可选)单击**“预览”**。在 SalesPersonID 参数中,键入 1。将在表数据区域中显示 NoRows 消息。
在下一步中,将编辑自动生成的报表参数 SalesPersonID。将设置报表属性,以便在可用值下拉列表中显示销售人员的名称,而不是数据库标识符。
设置报表参数 SalesPersonID 的属性
在**“报表”菜单中,选择“报表参数”。将打开“报表参数”**对话框。参数窗格中将显示 SalesPersonID 参数。
在**“数据类型”**下拉列表中,选择 Integer。
在**“提示”**文本框中,键入“选择销售人员:”。
在**“可用值”部分中,选择“来自查询”**。
在**“数据集”**下拉列表中,选择 SalesPersons。
对于“值”字段,选择 SalesPersonID。
对于“标签”字段,选择 Name。
SalesPersonID 参数的有效值下拉列表现在将显示每个销售人员的名称,而不是 SalesPersonID。
在**“默认值”部分中,选择“来自查询”**。
在**“数据集”**下拉列表中,选择 SalesPersons。
对于“值”字段,选择 SalesPersonID。
单击**“确定”**。
单击**“预览”**选项卡。此报表将显示销售人员名称下拉列表。
后续步骤
您已经成功地向现有报表添加了一个单值参数。接下来,您将修改 DayoftheWeek 和 SalesOrderID 参数,使其成为多值参数。请参阅第 4 课:添加具有“全选”值的多值参数。
请参阅
其他资源
在 Reporting Services 中使用参数
使用单值和多值参数
在表达式中使用参数