第 1 课:创建共享数据集和配置报表参数 (SSRS)

在本课中,您将基于针对 Employee_Sales_Summary_2008R2 报表的数据集查询参数创建共享数据集和配置报表参数。

学习内容

在本教程中,您将了解如何执行下列操作:

  • 首先创建基本报表的副本。

  • 向项目和报表中添加多个共享数据集。

  • 配置自动为每个数据集查询参数自动创建的报表参数。

  • 添加用于向报表用户说明报表用途的应用场景说明。

  • 添加有条件隐藏的文本,以显示数据源和数据集查询信息。

  • 添加有条件隐藏的文本,以显示报表用户选择的参数值。

  • 添加有条件隐藏的文本,以显示报表说明。

  • 添加报表标题。

  • 预览并验证报表。

  • 部署报表。

本教程的预计学时:15 分钟。

提示

有关常用提示的列表,请参阅报表设计提示(Report Builder 3.0 和 SSRS)

打开项目并制作报表的副本

  1. 在 Business Intelligence Development Studio 中,打开报表服务器项目 AdventureWorks 2008R2 示例报表。

  2. 在解决方案资源管理器中,执行下列操作:

    1. 右键单击报表 AdventureWorks2008R2_Base.rdl,然后单击**“复制”**。

    2. 右键单击项目节点,然后单击**“粘贴”**。

    3. 将复制的报表重命名为 Employee_Sales_Summary_2008R2.rdl。

创建共享数据集

此报表项目使用四个共享数据集,这些数据集基于共享数据源 AdventureWorks2008R2。

创建 EmployeeSalesYearOverYear2008R2

为各年同比销售添加共享数据集

  1. 在解决方案资源管理器中,添加名为 EmployeeSalesYearOverYear2008R2 的共享数据集。

    该数据有助于回答以下问题:我的季节性销售额各年同比增长如何?

    在该报表中,折线图和迷你图将显示此数据。

  2. 指向 AdventureWorks2008R2 共享数据源并添加以下查询:

    SELECT   P.FirstName + ' ' + P.LastName AS Employee, 
       DATEPART(Year, SOH.OrderDate) AS [Year], 
       DATEPART(Month, SOH.OrderDate) AS MonthNumber, 
       DATENAME(Month, SOH.OrderDate) AS [Month], 
       SUM(DET.LineTotal) AS Sales
    FROM [Sales].[SalesPerson] SP 
       INNER JOIN [Sales].[SalesOrderHeader] SOH ON SP.[BusinessEntityID] = SOH.[SalesPersonID]
       INNER JOIN Sales.SalesOrderDetail DET ON SOH.SalesOrderID = DET.SalesOrderID
       INNER JOIN [Sales].[SalesTerritory] ST ON SP.[TerritoryID] = ST.[TerritoryID] 
       INNER JOIN [HumanResources].[Employee] E ON SOH.[SalesPersonID] = E.[BusinessEntityID] 
       INNER JOIN [Person].[Person] P ON P.[BusinessEntityID] = SP.[BusinessEntityID]
    WHERE (DATEPART(Year, SOH.OrderDate) <= @ReportYear - 1 OR
       DATEPART(Year, SOH.OrderDate) = @ReportYear AND DATEPART(Month, SOH.OrderDate) <= @ReportMonth) AND 
       (SOH.SalesPersonID = (@EmployeeID))
    GROUP BY P.FirstName + ' ' + P.LastName, SOH.SalesPersonID, 
       DATEPART(Year, SOH.OrderDate), DATEPART(Month, SOH.OrderDate), 
       DATENAME(Month, SOH.OrderDate)
    

    共享数据集将显示在解决方案资源管理器中。

  3. 在“报表数据”窗格中,创建名为 EmployeeSalesYearOverYear2008R2 的数据集。

  4. 在**“数据集属性”对话框中选择“使用共享数据集”**,并单击您刚刚在解决方案资源管理器中创建的数据集。

    数据集查询包括查询变量 @ReportMonth、@ReportYear@EmployeeID。

  5. 在**“数据集属性”**中,确保为每个查询变量都创建了数据集参数。

  6. 在“报表数据”窗格中,确保为每个数据集参数都创建了报表参数。

“报表数据”窗格中的数据集是对解决方案资源管理器中的共享数据集的引用。发布该报表后,该引用将指向报表服务器或 SharePoint 站点上的共享数据集。

创建 EmployeeSalesDetail2008R2

添加包含每个销售订单的数据的共享数据集

  1. 在解决方案资源管理器中,添加名为 EmployeeSalesDetail2008R2 的共享数据集。

    该数据有助于回答以下问题:我是否达到了全月和每个类别的销售定额?

    在该报表中,矩阵和嵌入指示器将显示此数据。

  2. 使用 AdventureWorks2008R2 共享数据源及以下查询:

    SELECT PER.FirstName + ' ' + PER.LastName AS Employee,
       PS.Name AS Subcategory, SUM(DET.LineTotal) AS Sales, 
       SOH.SalesOrderID,  SOH.SalesOrderNumber, 
       P.Name AS Product, 
       SUM(DET.OrderQty) AS OrderQty, DET.UnitPrice, 
       PC.Name AS Category
    FROM Sales.SalesOrderHeader SOH 
       INNER JOIN [Sales].[SalesPerson] SP ON SP.[BusinessEntityID] = SOH.[SalesPersonID]
       INNER JOIN Sales.SalesOrderDetail DET ON SOH.SalesOrderID = DET.SalesOrderID
       INNER JOIN [HumanResources].[Employee] E ON SOH.[SalesPersonID] = E.[BusinessEntityID] 
       INNER JOIN [Person].[Person] PER ON PER.[BusinessEntityID] = SP.[BusinessEntityID]
       INNER JOIN Production.Product P ON DET.ProductID = P.ProductID 
       INNER JOIN Production.ProductSubcategory PS ON P.ProductSubcategoryID = PS.ProductSubcategoryID 
       INNER JOIN Production.ProductCategory PC ON PS.ProductCategoryID = PC.ProductCategoryID
    WHERE (DATEPART(Year, SOH.OrderDate) = @ReportYear) AND 
       (DATEPART(Month, SOH.OrderDate) = @ReportMonth) AND 
        (SOH.SalesPersonID = @EmployeeID)
    GROUP BY PER.FirstName + ' ' + PER.LastName, 
       DATEPART(Month, SOH.OrderDate), SOH.SalesOrderID, SOH.SalesOrderNumber, 
       P.Name, PS.Name, DET.UnitPrice, PC.Name
    

    共享数据集将显示在解决方案资源管理器中。

  3. 在“报表数据”窗格中,创建名为 EmployeeSalesDetail2008R2 的数据集。

  4. 在**“数据集属性”对话框中选择“使用共享数据集”**,并单击您刚刚在解决方案资源管理器中创建的数据集。

创建 EmpSalesMonth2008R2

为各月环比销售添加共享数据集

  1. 在解决方案资源管理器中,添加名为 EmpSalesMonth2008R2 的共享数据集。

    该数据有助于回答以下问题:本月的分类销售与往年同月相比情况如何?

    在该报表中,柱形图和数据条形图将显示此数据。

  2. 使用 AdventureWorks2008R2 共享数据源及以下查询:

    SELECT PER.FirstName + ' ' + PER.LastName AS Employee, 
       DATEPART(Year, SOH.OrderDate) AS [Year], 
       DATEPART(Month, SOH.OrderDate) AS [MonthNumber], 
       DATENAME(Month, SOH.OrderDate) AS [Month], 
       PC.Name AS Category, SUM(DET.LineTotal) AS Sales
    FROM Sales.SalesOrderHeader SOH 
       INNER JOIN [Sales].[SalesPerson] SP ON SP.[BusinessEntityID] = SOH.[SalesPersonID]
       INNER JOIN Sales.SalesOrderDetail DET ON SOH.SalesOrderID = DET.SalesOrderID
       INNER JOIN [HumanResources].[Employee] E ON SOH.[SalesPersonID] = E.[BusinessEntityID] 
       INNER JOIN [Person].[Person] PER ON PER.[BusinessEntityID] = SP.[BusinessEntityID]
       INNER JOIN Production.Product P ON DET.ProductID = P.ProductID 
       INNER JOIN Production.ProductSubcategory PS ON P.ProductSubcategoryID = PS.ProductSubcategoryID 
       INNER JOIN Production.ProductCategory PC ON PS.ProductCategoryID = PC.ProductCategoryID
    WHERE
       (DATEPART(Year, SOH.OrderDate) <= @ReportYear) 
       AND (DATEPART(Month, SOH.OrderDate) = @ReportMonth)  
       AND (SOH.SalesPersonID = @EmployeeID)
    GROUP BY PER.FirstName + ' ' + PER.LastName, 
       DATEPART(Year, SOH.OrderDate), DATEPART(Month, SOH.OrderDate), 
       DATENAME(Month, SOH.OrderDate), PC.Name
    

    共享数据集将显示在解决方案资源管理器中。

  3. 在“报表数据”窗格中,创建名为 EmpSalesMonth2008R2 的数据集。

  4. 在**“数据集属性”对话框中选择“使用共享数据集”**,并单击您刚刚在解决方案资源管理器中创建的数据集。

创建 SalesEmployees2008R2

为雇员可用值列表创建数据集

  1. 在解决方案资源管理器中,添加名为 SalesEmployees2008R2 的共享数据集。

    此数据为 EmployeeID 参数提供有效值。

  2. 使用 AdventureWorks2008R2 共享数据源及以下查询:

    SELECT s.[BusinessEntityID], p.[FirstName] + N' ' + p.LastName AS Employee, e.[JobTitle]
    FROM [Sales].[SalesPerson] s
       INNER JOIN [HumanResources].[Employee] e ON e.[BusinessEntityID] = s.[BusinessEntityID]
       INNER JOIN [Person].[Person] p ON p.[BusinessEntityID] = s.[BusinessEntityID]
    

    共享数据集将显示在解决方案资源管理器中。

  3. 在“报表数据”窗格中,创建名为 SalesEmployees2008R2 的数据集。

  4. 在**“数据集属性”对话框中选择“使用共享数据集”**,并单击您刚刚在解决方案资源管理器中创建的数据集。

配置报表参数

共享数据集包含数据集查询以及针对 ReportYear、ReportMonth 和 EmployeeID 的查询变量。将自动为每个查询变量创建对应的报表参数。默认情况下,将针对数据类型 String、单个值、无默认值或有效值列表的情况设置每个报表参数的属性。必须根据需要手动配置每个参数。

更改参数的顺序

更改报表查看器工具栏上参数的顺序

  1. 在“报表数据”窗格中,双击 ShowAll。

  2. 在工具栏上的“报表数据”窗格中,单击**“下移”**,直至参数处于列表中的最后。

  3. 单击 ReportMonth。

  4. 单击**“上移”**,直至参数显示在列表中的第一位。

配置 ReportMonth

@ReportMonth 配置为仅接受来自您单独指定的一组值的值。默认值必须为这些值之一,否则报表将不会自动运行。

配置报表参数 @ReportMonth

  1. 在“报表数据”窗格中,展开**“参数”**。

  2. 打开 @ReportMonth 的**“参数属性”**。

  3. 在**“常规”页上,将“数据类型”改为“整数”**。

  4. 在**“可用值”页上,选择“指定值”**。

  5. 为一年中的每个月分别添加一个条目。将**“标签”设置为月份名,将“值”**设置为月份的序号。例如,第一个条目为 January 和 1。最后一个条目为 December 和 12。填写全部 12 个值。

  6. 在**“默认值”页上,选择“指定值”。在“值”**中,键入 7。

这会将默认值设置为 July。如果每个报表参数均具有默认值,则报表将在第一次查看时自动运行。

配置 ReportYear

配置报表参数 @ReportYear

  1. 打开 @ReportYear 的**“参数属性”**。

  2. 在**“常规”页上,将“数据类型”改为“整数”**。

  3. 在**“默认值”页上,选择“指定值”**。

  4. 添加值。在**“值”**中,键入 2007。

配置 EmployeeID

配置报表参数 @EmployeeID

  1. 打开 @EmployeeID 的**“参数属性”**。

  2. 在**“常规”页上,将“提示”**改为 Employee。

  3. 将**“数据类型”改为“整数”**。

  4. 在**“可用值”页上,选择“从查询中获取值”**。

  5. 在**“数据集”**中,选择 SalesEmployees2008R2。

  6. 在**“值”**中,选择 BusinessEntityID。

  7. 在**“标签”**中,选择 Employee。

  8. 在**“默认值”页上,选择“指定值”。在“值”**中,键入 283。此值即 David Campbell 的雇员 ID。

添加应用场景说明

添加应用场景说明

  • 在应用场景说明文本框中,将现有文本替换为以下文本:

    作为 AdventureWorks 的销售人员,我想知道如何将我的销售额与前几年的季节性销售额进行比较。

    折线图和迷你图显示了所有类别各年的销售额。

    具有指示器的矩阵显示当前销售额与定额的对比。在报表查看器工具栏上更改定额值。

    柱形图和数据条形图显示每个类别的销售额。

在后面的课程中,您将从文本中的单词链接到相关的数据区域。

显示数据源、数据集和参数值

您可以显示数据集查询命令文本以及用户为每个报表参数选择的值。为了减少报表中的混乱,请将文本框中的此信息放在最后一页上的有条件隐藏的矩形容器中。

添加矩形

  1. 在报表底部页脚上方添加一个矩形。

  2. 在**“矩形”**属性中,执行以下操作:

    1. 在**“常规”页上,选择“在组件前面添加分页符”**。

    2. 在**“可见性”页上,选择“基于表达式显示或隐藏”**,然后键入:=NOT Parameters!ShowAll.Value

在以下步骤中,当您完成文本框后,将每个文本框添加到此矩形。根据需要扩展该矩形。通过将矩形用作容器,您可以轻松地将所有文本框作为一个单元进行移动。

添加显示参数值的文本框

  1. 向表体添加一个文本框以及以下文本(在单独的行上):

    1. 报表月份:[@ReportMonth] [@ReportMonth.Label]

    2. 报表年度:[@ReportYear]

    3. 员工 ID:[@EmployeeID] [@EmployeeID.Label]

  2. 将该文本框拖至此矩形并根据需要调整大小。

添加显示数据源和数据集信息的文本框

  1. 向表体添加一个名为 DataSourceandDatasets 的文本框以及以下文本:

    1. 数据源 AdventureWorks2008R2:

    2. 创建一个名为 AdventureWorks2008R2 的占位符,其值为:=DataSources!AdventureWorks2008R2.DataSourceReference

    3. 数据集 EmployeeSalesYearOverYear2008R2:

    4. 创建一个名为 EmployeeSalesYearOverYear2008R2 的占位符,其值为:=DataSets!EmployeeSalesYearOverYear2008R2.CommandText。

    5. 数据集 EmployeeSalesDetail2008R2:

    6. 创建一个名为 EmployeeSalesDetail2008R2 的占位符,其值为:=DataSets! EmployeeSalesDetail2008R2.CommandText。

    7. 数据集 EmpSalesMonth2008R2。

    8. 创建一个名为 EmpSalesMonth2008R2 的占位符,其值为:=DataSets! EmpSalesMonth2008R2.CommandText。

  2. 按需设置文本格式。例如,在数据集名称之下添加下划线。

  3. 将该文本框拖至此矩形并根据需要调整大小。

添加说明

添加说明

  1. 在页脚中,将说明文本框中的文本替换为以下文本:

    用途:汇总报表。显示针对所有类别、单个类别和定额的各年同比销售情况。包括图表(线图、迷你图、具有刻度分隔符的柱形图、数据条)、Tablix(切换行、行组、表和组级别的指示器)、组和报表变量、矩形容器、共享数据集、共享数据源、图表线条颜色的自定义代码、书签、钻取操作、多值参数,以及用于控制文本框和切换行的条件可见性的参数。

  2. 单击报表背景以便在属性窗格中显示**“报表属性”**。

  3. 在**“说明”**中,粘贴说明文本。

添加报表标题

添加报表标题

  1. 在页眉中,添加具有以下两行文本的文本框:

    Sales Report for [@EmployeeID.Label]

    [@ReportMonth.Label], [@ReportYear]

  2. 按需设置格式。

预览报表

预览并检查报表

  1. 预览报表。

  2. 检查报表是否自动运行。

  3. 在报表查看器工具栏上,检查以下事项:

    1. Report Month 具有包含所有月份的下拉列表。默认情况下,该值为 July。

    2. Report Year 具有默认值 2007。

    3. Employee 具有包含所有雇员姓名的下拉列表。默认情况下,该值为 David Campbell。

  4. 在页眉中,将显示徽标、报表名称和报表标题。

  5. 单击切换项时,将显示应用场景文本。

  6. 当您将 ShowAll 设置为 True 并运行报表时,参数值、数据源和数据集信息以及说明将显示在报表的最后一页上。

部署报表

部署报表

  1. 在解决方案资源管理器中,右键单击该项目,再单击**“部署”**。检查 BI Development Studio 的状态行中或“输出”窗格中是否显示错误。

    注意注意

    由于该报表依赖于共享数据集,因此,首次部署该报表时,必须部署整个项目。

  2. 在浏览器中,导航到报表服务器或 SharePoint 站点,确保共享数据源、共享数据集和报表显示在正确的文件夹中,并且您可以查看这些报表。

后续步骤

您已完成了报表项目和基本报表的创建过程。现在可以创建示例报表。有关详细信息,请参阅教程:创建 AdventureWorks 2008R2 示例报表 (SSRS)