第 4 课:添加具有“全选”值的多值参数

更新日期: 2006 年 12 月 12 日

在本课中,将把 SalesOrderIDDayoftheWeek 参数从单值参数更改为多值参数。 多值参数允许您为报表参数选择多个值。 若要修改报表参数 SalesOrderID,需要更改 AdventureWorks 数据集的查询,以便对所选值集(并不等于单个值)中的 @SalesPersonID 进行测试,并检查该报表参数的多值属性。 若要修改 DayoftheWeek 报表参数,需要检查多值属性、设置来自新数据集的可用值,并为默认值提供表达式。 您将创建一个新数据集,为 DayoftheWeek 参数提供可用值。 最后,将向报表添加一个文本框,以便为选择的 DayoftheWeek 显示参数值。

打开销售订单报表

  1. 在 SQL Server Business Intelligence Development Studio 中,打开在上一课中创建的 Tutorial 报表服务器项目。

  2. 在解决方案资源管理器中,双击“销售订单”报表。 将在“布局”视图中打开此报表。

  3. 单击“数据”选项卡。

修改用于测试的数据集查询,以便纳入值集

  1. 从“数据集”下拉列表中,选择 AdventureWorks。

  2. @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)
       )
    
  3. 单击“运行”(!) 按钮。 提示输入查询参数的值时,请使用下表来输入值。 查询设计器不支持测试多值参数。

    @StartDate

    20010101

    @EndDate

    20030101

    @SalesPersonID

    286

  4. 单击“确定”。 随即显示 SalesPersonID = 286 的销售人员 Ranjit Varkey Chudakatil 的结果集。

设置报表参数 SalesPersonID 的属性

  1. 在“报表”菜单中,选择“报表参数”。 将打开“报表参数”对话框。

  2. 在“参数”窗格中,选择 SalesPersonID。

  3. 在“属性”部分中,选中“多值”。

  4. 在“提示”文本框中,键入“选择销售人员:”****。

  5. 单击“确定”。

  6. 单击“预览”选项卡。 此报表将显示销售人员名称下拉列表。

Aa337396.note(zh-cn,SQL.90).gif注意:
系统将把“(全选)”值作为多值参数可用值下拉列表中的第一个值。 使用该复选框可以选中或清除所有值。
Aa337396.note(zh-cn,SQL.90).gif注意:
在 SQL Server 2005 Service Pack 1 中禁用了“全选”选项,但在 SQL Server 2005 Service Pack 2 中已恢复此选项。

为 DaysoftheWeek 可用值添加新的数据集

  1. 在“数据”选项卡的“数据集”下拉列表中,选择 <新建数据集>。

  2. 将数据源设置为 AdventureWorks 数据源。

  3. 在“名称”字段中,键入 WeekDaysfromQuery。

  4. 在查询窗格中粘贴以下查询字符串。

    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)

    在本教程中,星期一是每周的第一天。

  5. 单击“确定”。

  6. 单击查询设计器工具栏中的“运行”(!)按钮。 结果集将显示序号及每周的工作日。

设置报表参数 DayoftheWeek 的属性

  1. 在“报表”菜单中,选择“报表参数”。 将打开“报表参数”对话框。

  2. 在“参数”窗格中,选择 DayoftheWeek。 该参数在第 2 课中创建。

  3. 在“属性”部分中,选中“多值”。

  4. 在“提示”文本框中,键入“筛选每周工作日:”。

  5. 在“可用值”部分的“数据集”下拉列表中,选择 WeekDaysfromQuery。

  6. 从“值”字段下拉列表中,选择 Weekday。

  7. 从“标签”字段下拉列表中,选择 Weekday。

    对于默认值,在第一个“值”文本框中键入“星期六”****,在第二个“值”文本框中键入“星期日”。

  8. 单击“确定”。

    可以预览该报表前,需要更改为表数据区域定义的筛选表达式以使用 IN 运算符,这是因为 DayoftheWeek 参数现在是多值参数。

更改筛选器以使用多值参数

  1. 在“布局”视图中,选择该表。 该表会显示一个灰色轮廓。

  2. 右键单击表轮廓并选择“属性”。 将打开“表属性”对话框。

  3. 单击“筛选器”选项卡。

  4. 在“表达式”列的下拉列表中,确保值为 =Fields!Weekday.Value

  5. 将运算符由等号 (=) 更改为 In 运算符。

  6. 在“值”文本框的下拉列表中,确保值为 =Parameters!DayoftheWeek.Value

  7. 单击“确定”。

    表的筛选器现在被设置为使用 In 运算符将字段 Weekday 的值与参数 DayoftheWeek 的值进行比较。 为报表参数选择多个值时,筛选器将测试表的每一行,以查看 Weekday 字段是否存在于 DayoftheWeek 集合中。

  8. 单击“预览”选项卡。 该报表会显示默认值为“星期六”和“星期日****”的报表参数 DaysoftheWeek

Aa337396.note(zh-cn,SQL.90).gif注意:
除前一步中所述的情况之外,系统都会把“(全选)”值作为多值参数可用值下拉列表中的第一个值。 使用该复选框可以选中或清除所有值。

添加文本框以显示参数值

  1. 在“布局”视图中,选择该表。 按数次向下键向下移动该表,并扩展报表高度。

  2. 从工具框中,将一个文本框拖动到该表上方。 选中该文本框的一边,扩展其宽度以与该表的宽度匹配。

  3. 在此文本框中粘贴以下表达式:

    ="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,", ")
  4. 单击“预览”。 确保单击“查看报表”时,该文本框会显示在参数中选定的值。

后续步骤

您已成功地将报表参数属性从单值更改为多值。 并已对查询、筛选器和表达式做出必要的更改,以便能够使用多值参数集合。 您还学到在表达式中使用多值参数。 在下一课中,您将学习创建布尔值参数来控制查看报表的详细程度。 请参阅第 5 课:添加控制行可见性的参数

更改历史记录

发布日期 历史记录

2006 年 12 月 12 日

更改的内容:
  • 在 SP 2 中,已恢复“全选”选项。

请参阅

任务

第 1 课:创建参数教程的报表服务器项目

其他资源

在 Reporting Services 中使用参数

帮助和信息

获取 SQL Server 2005 帮助