创建 Customers_Near_Stores_2008R2 报表 (SSRS)

本教程帮助您基于全套 AdventureWorks 2008R2 示例报表生成 Customers_Near_Stores_2008R2 报表。

此报表显示居住在距某地理位置一定半径范围之内的 AdventureWorks 个人客户的列表及客户统计数据。该地理位置作为一个 String 参数传递,该参数包含地理位置的熟知文本 (WKT) 表示形式。有关全套报表及报表间关系的详细信息,请参阅教程:创建 AdventureWorks 2008R2 示例报表 (SSRS)

学习内容

在本教程中,您将执行以下任务:

  • 添加具有个人客户信息(包括从家庭地址到指定位置的距离)的数据集。

  • 添加包含分销商商店信息的数据集。

  • 配置一个包含地理位置作为文本的参数。

  • 配置用于指定与商店的距离的参数。

  • 在报表的最后一页上显示数据源、数据集和所选参数值。

  • 添加一个报表标题,其中包含有关报表用途的信息。

  • 添加报表说明。

  • 添加一个报表,以显示居住在指定商店周围一定距离内的客户的统计数据。

  • 定义在指定距离内无客户居住时将显示**“NoRowsMessage”**。

  • 预览并验证报表。

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

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

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

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

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

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

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

创建客户信息数据集

  • 在“报表数据”窗格中,添加名为 CustomerLocations 的嵌入数据集。使用 AdventureWorks2008R2 共享数据源及以下查询:

    SELECT
        [CustomerID]
       , [PersonID] as BusinessEntityID 
       , p.FirstName as Name1
       , p.LastName AS Name2
       , ea.EmailAddress
      -- , t.Name as AddressType -- Home or Shipping
       , ad.City, ad.PostalCode
       , sp.Name as StateProvince
       , sp.StateProvinceCode
       , ad.SpatialLocation.STDistance((@GeoLocation))/1609.344 as DistanceinMiles
       , ad.SpatialLocation
       , p.Demographics.value('declare namespace awns="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/IndividualSurvey"; (awns:IndividualSurvey/awns:NumberCarsOwned) [1]','int') as NumberCarsOwned
       , p.Demographics.value('declare namespace awns="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/IndividualSurvey"; (awns:IndividualSurvey/awns:CommuteDistance) [1]','varchar(30)') as CommuteDistance
      FROM [Sales].[Customer] c
       INNER JOIN Person.Person p ON p.BusinessEntityID = c.PersonID
       INNER JOIN Person.BusinessEntityAddress a ON a.BusinessEntityID = p.BusinessEntityID
       INNER JOIN Person.AddressType t ON a.AddressTypeID = t.AddressTypeID
       INNER JOIN Person.[Address] ad ON ad.AddressID = a.AddressID 
       INNER JOIN Person.EmailAddress ea ON ea.BusinessEntityID = p.BusinessEntityID
       INNER JOIN Person.StateProvince sp ON sp.StateProvinceID = ad.StateProvinceID
     WHERE   -- StoreID IS NULL means Customer is an Individual
        StoreID IS NULL 
        AND t.Name = N'Home' 
        AND sp.CountryRegionCode = N'US'
        -- 1 Mile = 1609.344 Meters 
        AND (ad.SpatialLocation.STDistance((@GeoLocation))/1609.344) < (@Radius)
    

此数据集查询将为居住在距 @GeoLocation @Radius 英里范围之内的客户返回客户信息,包括客户统计数据。

在该报表中,这些数据显示在矩阵中。

为 Geolocation 参数创建有效值列表

  • 在“报表数据”窗格中,添加名为 StoreLocation 的嵌入数据集。使用 AdventureWorks2008R2 共享数据源及以下查询:

    SELECT  
        [StoreID] as BusinessEntityID
        , s.Name as Store
       -- , t.Name as AddressType -- Main Office or Shipping
       , ad.PostalCode
       -- , sp.CountryRegionCode
       --, sp.Name as StateProvince
       --, sp.StateProvinceCode
       , ad.SpatialLocation.ToString() as GeoLocation
      FROM [Sales].[Customer] c
        INNER JOIN Sales.Store s ON s.BusinessEntityID = c.StoreID
        INNER JOIN Person.BusinessEntityAddress a ON a.BusinessEntityID = s.BusinessEntityID
        INNER JOIN Person.AddressType t ON a.AddressTypeID=t.AddressTypeID
        INNER JOIN Person.[Address] ad ON ad.AddressID = a.AddressID 
        INNER JOIN Person.StateProvince sp ON sp.StateProvinceID = ad.StateProvinceID
     WHERE  -- PersonID IS NULL means Customer is a store
       PersonID IS NULL 
       AND t.Name = N'Main Office' 
       AND sp.CountryRegionCode = N'US'
    

该数据集查询将返回 AdventureWorks 商店的主要办公地址及其地理位置的列表。

在该报表中,这些数据显示为 @Geolocation 参数的有效值列表。在报表查看器工具栏上,您看到的是包含商店名称的参数标签而不是包含地理位置的值。

配置报表参数 @Geolocation

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

  2. 将**“提示”**改为 Store location?

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

  4. 对于**“数据集”**,选择 StoreLocation。

  5. 对于**“值”**,请选择 GeoLocation。

  6. 对于**“标签”**,选择 Store。

  7. 在**“默认值”**上,添加一个值并将该值设置为以下文本:

    POINT (-82.4151596338717 40.7459610884615)

此值对应于名为 The Bike Mechanics 的商店。

配置报表参数 @Radius

  1. 打开 @Radius 的参数属性。

  2. 在**“提示”**中,键入 Distance in miles?

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

  4. 在**“默认值”**上,添加一个值并将其设置为 100。

添加页眉说明以返回到父报表

  1. 展开页眉的高度。

  2. 在徽标之下,添加一个名为 tbBackInstructions 的文本框以及以下文本:使用浏览器的“后退”按钮返回到父报表。

  3. 根据需要设置文本框的格式。

添加报表标题

  1. 在报表顶部的页眉下方,添加名为 tbTitle 的文本框以及以下文本:

    Demographics for the [NCustomers] [Customers]

    living within [@Radius] miles of the store

    [@GeoLocation.Label]

    按上下班路程分组

  2. 右键单击 [NCustomers] 以打开**“占位符属性”对话框,将“名称”设置为 NCustomers 并将“值”**设置为 =CountDistinct(Fields!CustomerID.Value,"CustomerLocations")。

  3. 右键单击 [Customers] 以打开**“占位符属性”对话框,将“名称”设置为 Customers 并将“值”**设置为 =IIF(CountDistinct(Fields!CustomerID.Value,"CustomerLocations")=1,"Customer","Customers")。

  4. 使报表上的文本框居中并根据需要格式化每行文本。

删除应用场景文本框

  • 删除 ToggleInformation 文本框以及包含应用场景文本的文本框。

对于此报表,应用场景信息包含在您刚添加的报表标题中。

添加说明

添加说明

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

    用途:从 Sales_by_Region_2008R2 中的商店标记钻取报表。Displays information about customers who live within the specified number of miles from a store.商店地理位置是一个 String 参数,其中包含熟知文本 (WKT) 值。

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

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

在表中显示客户人口统计信息

添加表

  1. 添加一个名为 tblxTable_Demographics 的表,其中显示 CustomerLocations 数据集的以下字段:

    • [Name2], [Name1]

    • [DistanceinMiles]

    • [NumberCarsOwned]

    • [EmailAddress]

  2. 基于 [CommuteDistance] 添加行组。

  3. 按需设置表格式。

添加在不包含数据时所显示的信息

  1. 选择该表。

  2. 在“属性”窗格中,找到**“NoRowsMessage”**,然后键入以下表达式:="No customers live within " & Parameters!Radius.Value & " miles. Display the parameters on the toolbar and enter a different distance."

预览并验证报表

预览并验证报表

  • 运行报表并验证以下事项:

    1. 参数值显示在报表标题中。

    2. 该表按往返距离来组织。

    3. 更改半径参数的值时,客户数随之更改。

    4. 在指定距离内无客户时,将会看到**“NoRowsMessage”**值。

后续步骤

您已生成了此报表。若要生成其他 AdventureWorks 示例报表,请参阅教程:创建 AdventureWorks 2008R2 示例报表 (SSRS)

请参阅

其他资源

更改历史记录

更新的内容

  • 已将报表更改为基于 AdventureWorks2008R2_Base.rdl