第 4 课:添加具有“全选”值的多值参数
更新日期: 2006 年 12 月 12 日
在本课中,将把 SalesOrderID 和 DayoftheWeek 参数从单值参数更改为多值参数。 多值参数允许您为报表参数选择多个值。 若要修改报表参数 SalesOrderID,需要更改 AdventureWorks 数据集的查询,以便对所选值集(并不等于单个值)中的 @SalesPersonID 进行测试,并检查该报表参数的多值属性。 若要修改 DayoftheWeek 报表参数,需要检查多值属性、设置来自新数据集的可用值,并为默认值提供表达式。 您将创建一个新数据集,为 DayoftheWeek 参数提供可用值。 最后,将向报表添加一个文本框,以便为选择的 DayoftheWeek 显示参数值。
打开销售订单报表
在 SQL Server Business Intelligence Development Studio 中,打开在上一课中创建的 Tutorial 报表服务器项目。
在解决方案资源管理器中,双击“销售订单”报表。 将在“布局”视图中打开此报表。
单击“数据”选项卡。
修改用于测试的数据集查询,以便纳入值集
从“数据集”下拉列表中,选择 AdventureWorks。
将
@SalesPersonID
测试从等式 (= (@SalesPersonID)
) 更改为包含表达式(IN (@SalesPersonID)
),从而修改现有查询的 WHERE 子句。用以下查询替换该数据集的查询字符串。
SELECT S.OrderDate, DATENAME(weekday, S.OrderDate) as Weekday, S.SalesOrderNumber, S.TotalDue, C.FirstName, C.LastName 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 IN (@SalesPersonID) )
单击“运行”(!) 按钮。 提示输入查询参数的值时,请使用下表来输入值。 查询设计器不支持测试多值参数。
@StartDate
20010101
@EndDate
20030101
@SalesPersonID
286
单击“确定”。 随即显示 SalesPersonID = 286 的销售人员 Ranjit Varkey Chudakatil 的结果集。
设置报表参数 SalesPersonID 的属性
在“报表”菜单中,选择“报表参数”。 将打开“报表参数”对话框。
在“参数”窗格中,选择 SalesPersonID。
在“属性”部分中,选中“多值”。
在“提示”文本框中,键入“选择销售人员:”****。
单击“确定”。
单击“预览”选项卡。 此报表将显示销售人员名称下拉列表。
注意: |
---|
系统将把“(全选)”值作为多值参数可用值下拉列表中的第一个值。 使用该复选框可以选中或清除所有值。 |
注意: |
---|
在 SQL Server 2005 Service Pack 1 中禁用了“全选”选项,但在 SQL Server 2005 Service Pack 2 中已恢复此选项。 |
为 DaysoftheWeek 可用值添加新的数据集
在“数据”选项卡的“数据集”下拉列表中,选择 <新建数据集>。
将数据源设置为 AdventureWorks 数据源。
在“名称”字段中,键入 WeekDaysfromQuery。
在查询窗格中粘贴以下查询字符串。
SET DATEFIRST 1; SELECT DISTINCT DATEPART(weekday, S.OrderDate) as WeekDayNumber, DATENAME(weekday, S.OrderDate) as Weekday FROM Sales.SalesOrderHeader S Order by WeekDayNumber
DATEFIRST
将设置要作为第一天的工作日。 例如,SET DATEFIRST 7
将更改工作日的顺序,以便将星期日作为第一天。 有关详细信息,请参阅 SET DATEFIRST (Transact-SQL)。在本教程中,星期一是每周的第一天。
单击“确定”。
单击查询设计器工具栏中的“运行”(!)按钮。 结果集将显示序号及每周的工作日。
设置报表参数 DayoftheWeek 的属性
在“报表”菜单中,选择“报表参数”。 将打开“报表参数”对话框。
在“参数”窗格中,选择 DayoftheWeek。 该参数在第 2 课中创建。
在“属性”部分中,选中“多值”。
在“提示”文本框中,键入“筛选每周工作日:”。
在“可用值”部分的“数据集”下拉列表中,选择 WeekDaysfromQuery。
从“值”字段下拉列表中,选择 Weekday。
从“标签”字段下拉列表中,选择 Weekday。
对于默认值,在第一个“值”文本框中键入“星期六”****,在第二个“值”文本框中键入“星期日”。
单击“确定”。
可以预览该报表前,需要更改为表数据区域定义的筛选表达式以使用 IN 运算符,这是因为 DayoftheWeek 参数现在是多值参数。
更改筛选器以使用多值参数
在“布局”视图中,选择该表。 该表会显示一个灰色轮廓。
右键单击表轮廓并选择“属性”。 将打开“表属性”对话框。
单击“筛选器”选项卡。
在“表达式”列的下拉列表中,确保值为
=Fields!Weekday.Value
。将运算符由等号 (=) 更改为 In 运算符。
在“值”文本框的下拉列表中,确保值为
=Parameters!DayoftheWeek.Value
。单击“确定”。
表的筛选器现在被设置为使用 In 运算符将字段 Weekday 的值与参数 DayoftheWeek 的值进行比较。 为报表参数选择多个值时,筛选器将测试表的每一行,以查看 Weekday 字段是否存在于 DayoftheWeek 集合中。
单击“预览”选项卡。 该报表会显示默认值为“星期六”和“星期日****”的报表参数 DaysoftheWeek。
注意: |
---|
除前一步中所述的情况之外,系统都会把“(全选)”值作为多值参数可用值下拉列表中的第一个值。 使用该复选框可以选中或清除所有值。 |
添加文本框以显示参数值
在“布局”视图中,选择该表。 按数次向下键向下移动该表,并扩展报表高度。
从工具框中,将一个文本框拖动到该表上方。 选中该文本框的一边,扩展其宽度以与该表的宽度匹配。
在此文本框中粘贴以下表达式:
="From " & Parameters!StartDate.Value & " to " & Parameters!EndDate.Value & vbCrLf & "For the following " & Parameters!DayoftheWeek.Count & " days of the week: " & Join(Parameters!DayoftheWeek.Value,", ") & vbCrLf & "First and last selected salespersons: " & Parameters!SalesPersonID.Label(0) & " and " & Parameters!SalesPersonID.Label(Parameters!SalesPersonID.Count-1)
关于该表达式,请注意以下几点:
- 您可以引用参数标签,但不能引用参数值。 例如,可以引用
Parameters!SalesPersonID.Label
,但不能引用Parameters!SalesPersonID.Value
。 - 若要处理参数集合中的各个成员,应使用从零开始的索引。 例如:
Parameters!SalesPersonID.Label(0)
。 - 若要处理整个集合,不要使用索引。 例如:
Parameters!SalesPersonID.Value
。 - 若要查找值的数目,请使用
Parameters!SalesPersonID.Count
。 - 您还可以查明参数是否是多值参数。 例如:
Parameters!SalesPersonID.IsMultivalue
。 - 可以使用 Visual Basic Join 函数将多值参数中的所有选定值串联起来。 例如,
Join(Parameters!DayoftheWeek.Value,", ")
。
- 您可以引用参数标签,但不能引用参数值。 例如,可以引用
单击“预览”。 确保单击“查看报表”时,该文本框会显示在参数中选定的值。
后续步骤
您已成功地将报表参数属性从单值更改为多值。 并已对查询、筛选器和表达式做出必要的更改,以便能够使用多值参数集合。 您还学到在表达式中使用多值参数。 在下一课中,您将学习创建布尔值参数来控制查看报表的详细程度。 请参阅第 5 课:添加控制行可见性的参数。
更改历史记录
发布日期 | 历史记录 |
---|---|
2006 年 12 月 12 日 |
|