第 4 课:添加级联参数 (Report Builder 2.0)

级联参数提供了一种管理大量报表数据的方法。使用级联参数,一个参数的值列表取决于前面参数选取的值。

在本课中,您将使用为服装类别的子类别和产品定义查询参数的主数据集查询来创建新报表。您将定义两个其他数据集,以便为每个级联参数提供可用值。

创建新的报表定义文件并将其保存到报表服务器上

  1. 单击**“开始”,依次指向“程序”**、Microsoft SQL Server 2008 Report Builder,再单击 Report Builder 2.0

  2. 在设计图面上,单击**“单击此处添加标题”**,然后键入 Cascading Parameters。

  3. 从**“报表生成器”按钮,单击“另存为”**。

  4. 单击**“最近使用的站点和服务器”**。

  5. 单击您拥有保存报表权限的报表服务器的名称。

  6. 在**“名称”**中,键入 Cascading Parameters。

  7. 单击**“保存”**。

    您已将新报表保存到报表服务器。

添加数据源引用

  1. 在“报表数据”窗格工具栏中,单击**“新建”,然后单击“数据源”**。

  2. 选择**“使用共享连接或报表模型”**。

  3. 选择或浏览至在教程:创建基本表报表 (Report Builder 2.0) 中为 AdventureWorks2008 示例数据库创建的数据源。

  4. 单击“确定”。

    您已为 AdventureWorks2008 数据库添加了对数据源的引用。 

使用查询和查询参数创建主数据集

  1. 在“报表数据”窗格工具栏中,单击**“新建”,然后单击“数据集”**。

  2. 在**“名称”**中,键入 SalesbyCategory。

  3. 在查询窗格下面,单击**“查询设计器”**。

  4. 单击**“编辑为文本”**。

  5. 在“查询”窗格中,粘贴以下查询:

    SELECT
      SH.OrderDate
      ,DATENAME(weekday, SH.OrderDate) as Weekday
      ,SH.SalesOrderNumber
      ,SD.OrderQty
      ,SD.LineTotal
      ,P.Name AS [Product]
      ,PS.Name AS [Subcategory]
    FROM Sales.SalesPerson SP 
      INNER JOIN Sales.SalesOrderHeader AS SH 
          ON SP.BusinessEntityID = SH.SalesPersonID
      INNER JOIN Sales.SalesOrderDetail AS SD 
         ON SH.SalesOrderID = SD.SalesOrderID
      INNER JOIN Production.Product AS P
       ON SD.ProductID = P.ProductID
      INNER JOIN Production.ProductSubcategory AS PS
       ON PS.ProductSubcategoryID = P.ProductSubcategoryID
      INNER JOIN Production.ProductCategory AS PC
       ON PC.ProductCategoryID = PS.ProductCategoryID
    WHERE PC.Name = 'Clothing' 
       AND (SH.OrderDate BETWEEN (@StartDate) AND (@EndDate))
       AND PS.Name = (@Subcategory)
       AND P.Name IN (@Product)
    

    已添加 @StartDate、@EndDate、@Subcategory@Product 的查询参数,以为一组级联值创建主查询。

  6. 单击“运行” (!) 以查看结果集。将打开**“定义查询参数”**对话框。

  7. 在**“参数值”**列中,按照下表键入各查询参数的值。

    参数名称

    参数值

    @StartDate

    20010101

    @EndDate

    20030101

    @Subcategory

    Gloves

    @Product

    Full-Finger Gloves, M

  8. 单击“确定”。 

    结果集包含指定类型手套的销售订单号列表。

    运行查询时,每个查询参数生成了相应的报表参数。单击两次**“确定”**退出查询设计器和相应对话框。

  9. (可选)在“报表数据”窗格中,展开“参数”节点,确保显示以下报表参数:StartDate、EndDate、Subcategory 和 Product。

  10. (可选)每个数据集查询参数的值绑定到同名的报表参数。若要对此进行验证,请在“报表数据”窗格中,右键单击 SalesbyCategory,然后单击**“数据集属性”**。

    1. 单击**“参数”**。

    2. 在**“参数名称”**列中,确保名称为 @StartDate、@EndDate、@Subcategory@Product。

    3. 在**“参数值”**列中,确保值为 [@StartDate]、[@EndDate]、[@Subcategory] 和 [@Product]。

      这些简单表达式引用在“报表数据”窗格中显示的报表参数。

    下面,您将创建一个数据集来为 @Subcategory@Product 提供值。每个新数据集将填充参数的可用值和默认值。

设置日期参数的数据类型和默认值

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

  2. 在**“数据类型”**中,选择 Date/Time

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

  4. 选择**“指定值”**选项。

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

  6. 在“值”中,键入 2001-01-01

  7. 单击“确定”。

  8. 在“报表数据”窗格中,右键单击 EndDate,然后单击**“参数属性”**。

  9. 在**“数据类型”**中,选择 Date/Time

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

  11. 选择**“指定值”**选项。

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

  13. 在“值”中,键入 2003-01-01

  14. 单击“确定”。

数据参数的数据类型和默认值设置完成。

为报表参数 Subcategory 添加值数据集

  1. 在“报表数据”窗格工具栏中,单击**“新建”,然后单击“数据集”**。

  2. 在**“名称”**中,键入 SubcategoryValues。

  3. 单击**“查询设计器”,然后单击“编辑为文本”**。

  4. 将以下查询文本粘贴到“查询”窗格中:

    SELECT DISTINCT PSC.Name AS Subcategory 
       FROM Production.ProductSubcategory AS PSC
          INNER JOIN Production.ProductCategory AS PC
          ON PC.ProductCategoryID = PSC.ProductCategoryID
          WHERE PC.Name = 'Clothing'
    
  5. 单击两次**“确定”**退出查询设计器和相应对话框。

  6. 数据集 SubcategoryValues 将显示在“报表数据”窗格中。Subcategory 字段有 8 行,列出了服装类别的子类别。

    接下来,设置 @Subcategory 报表参数的属性,以将上面查询中的值用作其可用值和默认值。

设置 Subcategory 报表参数的可用值和默认值

  1. 在“报表数据”窗格的“参数”文件夹中,右键单击 Subcategory,然后单击**“参数属性”**。

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

  3. 单击**“从查询中获取值”**。

  4. 在**“数据集”**下拉列表中,单击 SubcategoryValues。

  5. 在**“值”**字段中,单击 Subcategory。

  6. 在**“标签”**字段中,单击 Subcategory。

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

  8. 单击**“指定值”**。

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

  10. 在“值”中,键入 Gloves。

  11. 单击“确定”。

    接下来,创建取决于 @Subcategory 值的 @Product 参数。

为报表参数 Product 添加值数据集

  1. 在“报表数据”窗格工具栏中,单击**“新建”,然后单击“数据集”**。

  2. 在**“名称”**中,键入 ProductValues。

  3. 单击**“查询设计器”,然后单击“编辑为文本”**。

  4. 将以下查询文本粘贴到“查询”窗格中:

    SELECT DISTINCT P.Name AS Product
    FROM Production.Product P
       INNER JOIN Production.ProductSubcategory AS PSC
       ON P.ProductSubcategoryID = PSC.ProductSubcategoryID
       INNER JOIN Production.ProductCategory AS PC
       ON PC.ProductCategoryID = PSC.ProductCategoryID
       WHERE (PC.Name = 'Clothing'
          AND PSC.Name = (@Subcategory))
    
  5. 单击两次**“确定”**退出查询设计器和相应对话框。

    此时,将向“报表数据”窗格添加包含一个 Product 字段的 ProductValues 数据集。

接下来,设置 @Product 参数的属性,并将上面查询中的值用作其可用值和默认值。

设置 Product 报表参数的可用值和默认值

  1. 在“报表数据”窗格的“参数”文件夹中,右键单击 Product,然后单击**“参数属性”**。

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

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

  4. 单击**“从查询中获取值”**。

  5. 在**“数据集”**下拉列表中,单击 ProductValues。

  6. 在**“值”**字段中,单击 Product。

  7. 在**“标签”**字段中,单击 Product。

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

  9. 单击**“从查询中获取值”**。

  10. 在**“数据集”**下拉列表中,单击 ProductValues。

  11. 在**“值”**字段中,单击 Product。

  12. 单击“确定”。

  13. 单击**“运行”**以预览报表。

  14. 从 Subcategory 下拉列表中,选择 Jerseys。

    请注意,Product 下拉列表仅显示属于 Jerseys 的产品。

  15. 在报表查看器工具栏上,单击**“查看报表”**。

    报表中的表和图表将显示销售订单,这些订单包含所选择的产品以及受报表参数销售订单日期和工作日限制的产品。

后续步骤

您已使用按子类别筛选的级联参数成功创建了显示特定产品销售订单的新报表。在下一课中,您将学习将参数传递给钻取报表。请参阅第 5 课:添加要传递给钻取报表的参数 (Report Builder 2.0)