第 3 课:添加在列表中选择多个值的参数 (SSRS)

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

替换现有数据集

  1. 在“报表数据”窗格中,右键单击数据集 AdventureWorksDataset,然后单击**“数据集属性”**。

  2. 在**“数据源”**中,确保已选中 AdventureWorks_Ref。

  3. 在**“查询类型”中,确保已选中“文本”**。

  4. 单击**“查询设计器”**按钮打开查询设计器。

  5. 用下列查询替换文本框中的文本:

    SELECT 
       soh.OrderDate AS [Date], DATENAME(weekday, soh.OrderDate) as Weekday,
       soh.SalesOrderNumber AS [Order], 
       pps.Name AS Subcat, pp.Name as Product,  
       SUM(sd.OrderQty) AS Qty,
       SUM(sd.LineTotal) AS LineTotal
    FROM Sales.SalesPerson sp 
       INNER JOIN Sales.SalesOrderHeader AS soh 
          ON sp.BusinessEntityID = soh.SalesPersonID
       INNER JOIN Sales.SalesOrderDetail AS sd 
          ON sd.SalesOrderID = soh.SalesOrderID
       INNER JOIN Production.Product AS pp 
          ON sd.ProductID = pp.ProductID
       INNER JOIN Production.ProductSubcategory AS pps 
          ON pp.ProductSubcategoryID = pps.ProductSubcategoryID
       INNER JOIN Production.ProductCategory AS ppc 
          ON ppc.ProductCategoryID = pps.ProductCategoryID
    GROUP BY ppc.Name, soh.OrderDate, soh.SalesOrderNumber, 
       pps.Name, pp.Name,    soh.SalesPersonID
    HAVING 
    ppc.Name = 'Clothing' 
    AND (soh.OrderDate BETWEEN (@StartDate) AND (@EndDate))
    AND  soh.SalesPersonID IN (@BusinessPersonID)
    

    除将条件从等于更改为包含之外,该查询与以前的查询相同。

    AND soh.SalesPersonID IN (@BusinessPersonID)
    
  6. 单击**“运行”(!**) 按钮。提示输入查询参数的值时,请使用下表来输入值。查询设计器不支持测试多值参数。

    @StartDate

    1/1/2001

    @EndDate

    1/1/2003

    @BusinessPersonID

    290

  7. 单击“确定”。 

    随即显示 BusinessPersonID = 290 的销售人员 Ranjit Varkey Chudukatil 的结果集。

编辑 BusinessPersonID 报表参数以接受多个值

  1. 在“报表数据”窗格中,展开**“参数”**,然后双击 BusinessPersonID 参数。

  2. 选中**“允许多个值”**选项。

  3. 单击“确定”。 

  4. 单击**“预览”**。报表将自动运行。BusinessPersonID 的下拉列表显示所有销售人员姓名。

注意注意

系统将(“全选”)值用作多值参数可用值下拉列表中的第一个值。使用该复选框可以选中或清除所有值。默认情况下,会选中所有值。

添加新数据集以填充报表参数的有效值

  1. 切换到“设计”视图。

  2. 在“报表数据”窗格中,右键单击 AdventureWorks_Ref,然后单击**“添加数据集”。此时将打开“数据集属性”**对话框。

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

  4. 在**“查询类型”**中,验证是否已选中“文本”。

  5. 在**“查询”**中,键入或粘贴以下查询字符串:

    SET DATEFIRST 1;
    SELECT DISTINCT 
       DATEPART(weekday, S.OrderDate) as WeekDayNumber,
       DATENAME(weekday, S.OrderDate) as Weekday
       FROM Sales.SalesOrderHeader S
    Order by WeekDayNumber
    
  6. 单击查询设计器工具栏上的**“运行”(!**) 按钮。结果集将显示序号及每周的工作日。

  7. 单击两次**“确定”退出“数据集属性”**对话框。

    数据集 WeekDaysfromQuery 将显示在“报表数据”窗格中。

编辑参数以接受多个值、默认值和有效值

  1. 在“报表数据”窗格中,展开**“参数”,然后双击 DayoftheWeek。此时将打开“报表参数属性”**对话框。

  2. 选择**“允许多个值”**。

  3. 单击**“可用值”**。

  4. 选择**“从查询中获取值”**。

  5. 在**“数据集”**下拉列表中,选择 WeekDaysfromQuery。

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

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

  8. 单击**“默认值”**。

  9. 选择**“指定值”**。

  10. (可选)选择现有值 Friday,并单击**“删除”**。

  11. 单击**“添加”**。

  12. 在**“值”**中,键入 Saturday。

  13. 单击**“添加”**。

  14. 在**“值”**中,键入 Sunday。

  15. 单击“确定”。 

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

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

  1. 在**“设计”视图中,右键单击表,然后单击“Tablix 属性”。此时将打开“Tablix 属性”**对话框。

  2. 单击**“筛选器”**。其中已包含一个在第 1 课中为 DaysoftheWeek 添加的筛选器。

  3. 在**“表达式”**的下拉列表中,确保值为 [Weekday]。

  4. 确保已选中**“文本”**。

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

  6. 在**“值”**文本框的下拉列表中,确保值为 [@DayoftheWeek]。

  7. 单击“确定”。 

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

  8. 单击**“预览”**。该报表会显示默认值为 Saturday 和 Sunday 的报表参数 DaysoftheWeek。使用下拉列表为 DayoftheWeek 参数选择多个值。

后续步骤

您已成功地将报表参数属性从单值更改为多值。并已对查询、筛选器和表达式做出必要的更改,以便能够使用多值参数集合。您还学习了在表达式中使用多值参数。在下一课中,您将学习如何创建根据前面参数的选定值有条件地填充其值的参数。请参阅第 4 课:添加级联参数 (SSRS)