第 2 课:添加创建可用值列表的参数 (SSRS)

可用值(即有效值)为用户提供一系列可能的报表参数值。报表作者可以提供专门用于从数据源中检索一组值的查询中的有效值,也可以提供一组预定义的值。通过将一组可用值绑定到处理报表时运行的数据集查询,可以确保只能从下拉列表中选择数据库中存在的值。

在本课中,您将修改 Sales Orders 报表以显示 SQL Server AdventureWorks2008R2 数据库中可用销售人员姓名的下拉列表。并将设置一个表属性,以便在所选参数值的结果集中没有行时显示消息。当选择某个姓名并查看此报表时,此报表只显示该销售人员的销售额。

替换现有数据集

  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 = (@BusinessPersonID)
    

    除添加了将结果集限定为一个销售人员的条件之外,该查询与以前的查询相同:

    AND soh.SalesPersonID = (@BusinessPersonID)

  6. 单击**“运行”(!**) 按钮。提示输入查询参数的值时,请使用下表来输入值。

    @StartDate

    1/31/2001

    @EndDate

    1/31/2003

    @BusinessPersonID

    290

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

填充报表参数的有效值列表

  1. 在“报表数据”窗格中,单击**“新建”,然后单击“数据集”。此时将打开“数据集属性”**对话框。

  2. 在**“名称”**字段中,键入 BusinessPersons。该数据集将用于填充 SalesPersonID 报表参数的有效值列表。

  3. 确保数据源为 AdventureWorks_Ref。

  4. 将以下 Transact-SQL 查询粘贴到查询窗格中:

    SELECT SP.BusinessEntityID, C.FirstName, C.LastName
    FROM   Sales.SalesPerson AS SP INNER JOIN
         HumanResources.Employee AS E ON E.BusinessEntityID = SP.BusinessEntityID INNER JOIN
         Person.Person AS C ON C.BusinessEntityID = E.BusinessEntityID
    ORDER BY SP.BusinessEntityID
    

    单击两次**“确定”**。随即填充 BusinessPersons 数据集的字段列表。该数据集将用于提供 BusinessPersonID 参数的有效值。

  5. 您将发现 BusinessPersons 数据集具有名为 FirstName 和 LastName 的字段。接下来,我们将这两个字段连接为一个名为 Name 的字段。

在“报表数据”窗格中定义计算字段

  1. 在“报表数据”窗格工具栏中,右键单击 BusinessPersons 数据集,再单击**“添加计算字段”。随即将打开“数据集属性”对话框的“字段”**页,并向网格添加一个新行。

  2. 在最后一个**“字段名称”**文本框中,键入 Name。

  3. 在**“字段源”**文本框中,粘贴以下表达式:

    =Fields!LastName.Value & ", " & Fields!FirstName.Value

  4. 单击“确定”。

  5. 在“报表数据”窗格的 BusinessPersons 数据集下,新字段 Name 将出现在该数据集的字段集合中。

使用可用值列表填充报表参数

  1. 在“报表数据”窗格中,展开“参数”节点,右键单击 BusinessPersonID,然后单击**“参数属性”**。

  2. 在**“提示”**中,键入“选择业务人员:”。

  3. 在**“数据类型”中,选择“整数”**。

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

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

  6. 从**“数据集”**下拉列表中,选择 BusinessPersons

  7. 从**“值字段”**下拉列表中,选择 BusinessEntityID

  8. 从**“标签字段”下拉列表中,选择“名称”**。

    通过选择标签的名称,BusinessEntityID 参数的有效值下拉列表现在将显示每个销售人员的姓名,而不是销售人员编号。

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

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

  11. 从**“数据集”**下拉列表中,选择 BusinessPersons

  12. 从**“值字段”**下拉列表中,选择 BusinessEntityID

  13. 单击“确定”。 

  14. 单击**“预览”**选项卡。此报表将显示业务人员姓名下拉列表。

  15. 单击**“查看报表”**。选择其他参数值以查看结果。

后续步骤

您已经成功地向现有报表添加了参数的可用值列表。接下来,您将修改 DayoftheWeek 和 SalesPersonID 参数,使其成为多值参数。请参阅第 3 课:添加在列表中选择多个值的参数 (SSRS)