第 3 课:添加矩阵、变量和指示器作为 KPI (SSRS)

在本课程中学习如何向 Employee_Sales_Summary_2008R2 报表添加报表项,以帮助 Adventure Works 销售人员回答以下问题:

  • 我是否达到了销售总定额?

  • 我在哪类产品上达到了自己的定额?

Employee_Sales_Summary_2008R2 是显示销售数据汇总的主报表。您将对销售订单号添加一个钻取操作,用户通过单击此操作可以打开一个单独的报表,以显示特定销售订单的所有明细。

学习内容

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

  • 基于产品类别和销售订单号添加一个具有行组的矩阵。

  • 为与基于销售订单号的子组关联的行添加展开/折叠切换项。

  • 添加一个布尔参数,用户通过此参数可以控制在首次运行报表时是显示还是隐藏所有切换行。默认情况下,您将切换状态配置为将要折叠。

  • 添加针对销售订单号的钻取操作。您将在后面的教程中创建目标报表。有关详细信息,请参阅创建 Sales_Order_Detail_2008R2 报表 (SSRS)

  • 添加一个数据集以及一个计算字段,以便为每个类别定义销售定额,并定义一个可由此数据集填充的多值参数。

  • 向表中添加以下两个指示器以表示 KPI(关键绩效指标):

    • **达到所有类别的定额。**此指示器的作用域限于矩阵级别,它显示所有类别的销售额是否超过本月的定额。

    • **达到每个单独类别的定额。**此指示器的作用域限于类别组级别,它根据销售额是否在目标值的百分比范围内来显示状态。

    可以通过更改参数值通过交互方式更改类别定额,从而查看每个指示器的状态如何变化。

  • 定义报表和组级别变量,以帮助编写复杂的表达式。

  • 作为设计和调试方面的帮助,在一个文本框中显示多个计算结果。通过根据参数来设置文本框可见性,用户可以控制是否显示此可选信息。

  • 向 Tablix 角单元添加一个包含多个报表项的矩形。

  • 添加一个从应用场景文本至矩阵的书签链接。

  • 添加用于描述矩阵用途的说明文本。

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

要求

有关要求的信息,请参阅 AdventureWorks 2008R2 示例报表的前提条件 (SSRS)

本课程假设您已经完成了创建报表服务器项目和 AdventureWorks2008R2_Base 报表 (SSRS)以创建报表项目、共享数据源和共享报表,以及第 2 课:添加折线图和迷你图 (SSRS)

提示

回顾使用“文档大纲”窗格查看各报表项的层次结构关系时的相关提示。有关详细信息,请参阅报表设计提示(Report Builder 3.0 和 SSRS)

打开项目和报表

  1. 在 Business Intelligence Development Studio 中,打开您在上一课中创建的报表服务器项目 AdventureWorks 2008R2 示例报表。

  2. 打开 Employee_Sales_Summary_2008R2 报表。

添加矩阵

若要设计比较复杂的矩阵,请在报表设计图面上直接使用矩阵,以简化选择和配置矩阵属性的过程。在后面的步骤中,您将向矩形容器添加矩阵。

添加矩阵以显示销售订单

  1. 向报表设计图面添加一个**“矩阵”**。

  2. 在矩阵中,执行下列操作:

    1. 悬停在**“行”单元上方,单击字段标记,指向“数据集”**,指向 EmployeeSalesDetail2008R2,然后单击 Category。

    2. 从“报表数据”窗格中展开数据集,然后展开 EmployeeSalesDetail2008R2。

    3. 将 SalesOrderNumber 拖到“行组”窗格中的 Category 之下。此时创建了一个子行组。

    4. 在**“数据”**单元中,单击字段标记,然后单击 Sales。将此单元中的文本框的格式设置为“货币”。

  3. 右键单击 Category 单元,指向**“添加总计”,然后单击“晚于”**。

  4. 按需设置矩阵格式。

创建一个参数以控制展开/折叠切换

  1. 在“报表数据”窗格中,添加一个名为 ExpandAllTableRows 的参数。

  2. 在**“报表参数属性”**对话框中,执行以下操作:

    1. 将**“提示”**更改为 Expand all table rows?

    2. 在**“数据类型”中,选择“布尔值”**。

    3. 在**“默认值”**上,将值设置为 false。

为子行组创建展开/折叠切换

  1. 在“分组”窗格中,针对 SalesOrderNumber 打开**“组属性”**。

  2. 在**“可见性”页上,单击“基于表达式显示或隐藏”**,并输入以下表达式:=NOT Parameters!ExpandAllTableRows.Value。

  3. 选择**“可以切换显示”**,然后从下拉列表中选择具有父组的组表达式的文本框名称:Category。

文本框会根据添加到它的第一个字段自动命名。

创建指向其他报表的钻取链接

  1. 在矩阵中,右键单击 SalesOrderNumber,然后单击**“文本框属性”**。

  2. 在**“操作”页上,单击“转到报表”**。

  3. 在**“指定报表”**中,键入 Sales_Order_Detail_2008R2。

    注意注意

    因为目标报表尚不存在,所以您必须准确地手动键入报表名称和参数名称。如果目标报表在项目中确实存在,则可以从报表名称和对应报表参数的下拉列表中进行选择。

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

  5. 在**“名称”**中,键入 SalesOrderIDStart。

  6. 在**“值”**中,键入 [SalesOrderID]。

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

  8. 在**“名称”**中,键入 SalesOrderIDEnd。

  9. 在**“值”**中,键入 [SalesOrderID]。

  10. 在**“字体”页上,将“颜色”设置为“蓝色”,将“效果”设置为“下划线”**。

Sales_Order_Detail_2008R2 报表显示一系列销售订单号中每个销售订单的明细。通过将目标报表参数设置为同一个销售订单号,报表将显示单个销售订单的明细。

添加数据集以提供初始定额和范围

添加定额数据

  • 在“报表数据”窗格中,添加一个名为 CategoryQuotas 的数据集。使用现有共享数据源,指定嵌入的数据集,并使用以下查询:

    SELECT 1 as ID, 'Accessories' as Category, 
       1000 as Quota, 25 as PercentDeviation
    UNION SELECT 2 as ID, 'Bikes' as Category, 
       70000 as Quota, 5 as PercentDeviation
    UNION SELECT 3 as ID, 'Clothing' as Category, 
       2500 as Quota, 20 as PercentDeviation
    UNION SELECT 4 as ID, 'Components' as Category, 
       20000 as Quota, 10 as PercentDeviation
    

Quota 字段表示货币。Quota 的值将用您在后续步骤中创建的名为 @CategoryQuota 的报表参数的初始值来填充。若要表示非整数值,该报表参数的数据类型必须为 Float。在下一步中,您需要基于类型为 Float 的 Quota 创建计算字段。

创建计算字段

  1. 在“报表数据”窗格中,右键单击名为 CategoryQuotas 的数据集,然后单击**“添加计算字段”**。

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

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

  4. 在**“字段源”**中,将值设置为以下表达式:

    =CDbl(Fields!Quota.Value)

添加一个参数,使用户可以指定定额值

添加多值参数 @CategoryQuota

  1. 在“报表数据”窗格中,添加一个新参数。

  2. 在**“常规”**页上,执行以下操作:

    1. 将**“名称”**设置为 CategoryQuota。

    2. 将**“提示”**设置为 Category quotas (Accessories, Bikes, Clothing, Components):

    3. 将**“数据类型”**设置为 Float。

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

  3. 在**“默认值”**页上,执行以下操作:

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

    2. 对于**“数据集”**,选择 CategoryQuotas。

    3. 对于**“值字段”**,选择 QuotaF。

  4. 运行该报表,检查各个参数是否正确显示,每个参数是否具有默认值。

若要支持用户通过交互方式更改分类定额,请不要为数据集指定可用值。可用值限制了参数的选择范围。

将复杂表达式定义为报表变量

使用变量可以仅定义一次复杂表达式,然后在其他表达式中添加对该变量的引用。处理报表时,仅计算一次报表变量。组变量对每个组实例计算一次。

创建报表变量

  1. 若要创建报表变量,请打开**“报表属性”**。

  2. 在**“变量”**页上,执行以下操作:

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

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

    3. 在**“值”**中,键入 =CDbl(Parameters!CategoryQuota.Value(0)+Parameters!CategoryQuota.Value(1)+Parameters!CategoryQuota.Value(2)+Parameters!CategoryQuota.Value(3))

此表达式将总定额计算为各分类定额的总和。您将在配置作用域限于矩阵的指示器时用到此变量。

将复杂表达式定义为组变量

创建组变量

  1. 选择矩阵,以便在“分组”窗格中显示行组。

  2. 右键单击 Category 组,然后打开**“组属性”**。

  3. 单击**“变量”**,并执行以下操作:

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

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

    3. 在**“值”**中,键入 =Lookup(Fields!Category.Value,Fields!Category.Value,Fields!ID.Value,"CategoryQuotas")

      这将检索组值 Category 的 ID,即 1、2、3 或 4。这些 ID 对应于按字母顺序列出的各个类别:Accessories、Bikes、Clothing、Components。

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

    5. 在**“名称”**中,键入 PercentDeviation。

    6. 在**“值”**中,键入 =.01 * CDbl(Lookup(Fields!Category.Value,Fields!Category.Value,Fields!PercentDeviation.Value,"CategoryQuotas"))

      这将检索组值 Category 的百分比偏差字段,即 25%、5%、20%、10%。对于 Bikes 这样的类别,由于销售额预计较大,所以与定额的百分比偏差较小。对于 Accessories 这样的类别,销售额较小,所以定额的百分比偏差较小。

您将在配置作用域限于类别组的指示器时用到组变量。

在下一步中,您将通过添加有条件隐藏的文本,来显示用来计算每一分类定额的范围最高值和最低值的表达式的各部分。

添加组标题行并显示计算结果

可以计算和显示表达式,以帮助理解运行时的属性值。使用条件可见性在不需要这些值时隐藏它们。

为 Category 添加组头行

  1. 右键单击包含 SalesOrderNumber 的文本框,如果需要选择此文本框并退出编辑模式,则指向**“插入行”,然后单击“组外部 - 上方”**。

  2. 在“销售”列中,在您刚添加的行中单击此单元对应的字段标记,然后单击“销售”。将文本框的格式设置为货币。

随之添加与 Category 组相关联的组头行。

向文本框添加表达式的多个部分

  1. 选择位于您刚添加的组头行中的 SalesOrderNumber 之上的空文本框。此单元中的数据的作用域是该类别组。

  2. 为了提供更多的工作空间,可在矩形中展开单元的行宽度和列宽度。

  3. 在文本框中,插入一个名为 rectCategoryQuotas 的**“矩形”**。借助矩形容器,您可以设置边框样式和颜色,使其与矩阵中的单元保持一致。

  4. 向该矩形添加具有以下文本的名为 tbCategoryQuotas 的文本框:

    1. 定额:

    2. 使用以下格式化为**“货币”的值创建一个名为 Quota 的“占位符”**:=CDbl(Parameters!CategoryQuota.Value((Variables!IndextoCategoryQuota.Value)-1))

    3. 在下一行上,输入减号 (-)、一个名为 PercentDeviation 的占位符、一个冒号 (:) 以及一个名为 MinimumThreshold 的占位符。

    4. 将 PercentDeviation 的**“占位符”**值更改为以下表达式:=FormatPercent(Variables!PercentDeviation.Value,0)

    5. 将 MinimumThreshold 的**“占位符”**值更改为以下表达式:=(1.0-Variables!PercentDeviation.Value) * CDec(Parameters!CategoryQuota.Value((Variables!IndextoCategoryQuota.Value)-1))

    6. 在下一行上,输入加号 (+)、一个名为 PercentDeviation 的占位符、一个冒号 (:) 以及一个名为 MaximumThreshold 的占位符。

    7. 将 PercentDeviation 的**“占位符”**值更改为以下表达式:=FormatPercent(Variables!PercentDeviation.Value,0)

    8. 将 MaximumThreshold 的**“占位符”**值更改为以下表达式:=(1.0+Variables!PercentDeviation.Value) * CDec(Parameters!CategoryQuota.Value((Variables!IndextoCategoryQuota.Value)-1))

    9. 按需设置文本格式。例如,使所有文本右对齐。

    10. 在**“可见性”页上,单击“基于表达式显示或隐藏”**,并输入以下表达式:=NOT Parameters!ShowAll.Value。

    11. 在文本框中,使文本右对齐。

  5. 运行报表。

对于 Accessories,将显示以下文本:

Quota: $1,000

-25%: $750

+25%: $1,250

请注意,矩形的边框样式与矩阵的其余部分不匹配。

指定嵌套矩形的边框属性

  1. 单击名为 tbCategoryQuotas 的文本框,并按 Esc 键,直至 rectCategoryQuotas 的**“矩形”**属性出现在“属性”窗格中。

  2. 在“属性”窗格中,执行以下操作:

    1. 将**“边框颜色”更改为“淡灰色”**。

    2. 将**“边框颜色”设置为“纯色”**。

  3. 运行报表。

矩阵单元边界现在已匹配。

在所有类别中添加销售指示器

添加到矩阵的角单元中的报表项的作用域限为矩阵中的数据。您可以在此角部区中合并多个文本框,添加矩形容器,然后向其添加多个报表项。角单元是一个良好构思,用于显示其作用域限定为矩阵中数据的值。您可以单独控制每个项在矩形中的可见性。

有关详细信息,请参阅了解 Tablix 数据区域(Report Builder 3.0 和 SSRS)

添加作用域限于矩阵数据的指示器

  1. 角单元是处于第一行和第一列中的单元,包含文本 Category。角单元项的数据作用域是应用筛选器后矩阵中的所有数据。您将添加一个文本框、一个指示器,以及一个具有条件可见性以显示类别销售的总定额的文本框。

  2. 右键单击文本框,指向**“插入”,然后单击“矩形”**。矩形将取代文本框。

    将该矩形的名称更改为 rectMatrixCorner。

  3. 展开角单元的行宽度和列宽度,以便提供更多的工作空间。

  4. 向矩形添加一个文本框。用两行输入以下文本:是否达到定额?

  5. 在文本框旁边,插入一个**“指示器”。在“方向”中,使用工具提示单击“3 个三角形(上下)”**。

  6. 将指示器的顶部与文本框顶部对齐。

  7. 打开**“指示器属性”**。

  8. 在**“值和状态”**页上,执行以下操作:

    1. 在**“值”**中,选择 [Sum(Sales)]。

    2. 在**“状态度量单位”中,选择“数字”**。

    3. 在**“指示器状态”**中,删除中间状态。

      在矩阵作用域内,将显示限定为两个状态:达到定额或未达到定额。

    4. 对于第一个状态,在**“开始”**中键入 0。

    5. 在**“结束”**中,键入以下表达式:=Variables!SumParameterThresholds.Value

    6. 对于第二个状态,在**“开始”中,复制对第一个状态中的“结束”**所用的相同表达式。

    7. 在**“结束”**中,键入以下表达式:=Max(Sum(Fields!Sales.Value))

  9. 在指示器之下,添加具有以下文本的名为 tbMatrixQuotas 的文本框:

    1. 定额:

    2. 使用以下格式化为**“货币”的值创建一个名为 Quota 的“占位符”**:=Variables!SumofAllParameterThresholds.Value

    3. 总计:

    4. 使用以下格式化为**“货币”的值创建一个名为 Total 的“占位符”**:=Sum(Fields!Sales.Value)

    5. 在**“可见性”页上,单击“基于表达式显示或隐藏”**,并输入以下表达式:=NOT Parameters!ShowAll.Value。

    6. 在文本框中,使文本右对齐。

  10. Quota:

  11. 将光标放在刚添加的文本旁边,右键单击,然后单击**“创建占位符”**。

  12. 在**“标签”**中,键入 MAX。

  13. 在**“值”**中,键入 =Variables!SumParameterThresholds.Value

  14. 在**“数字”页上的“类别”中,键入“货币”。将“小数位数”**设置为 0。

  15. 向该矩形添加具有以下文本的文本框:Total:

  16. 将光标放在刚添加的文本旁边,右键单击,然后单击**“创建占位符”**。

  17. 在**“标签”**中,键入 Total。

  18. 在**“值”**中,键入 Sum(Fields!Sales.Value)。

  19. 在**“数字”页上的“类别”中,键入“货币”。将“小数位数”**设置为 0。

  20. 打开**“文本框属性”。在“可见性”**页上,执行以下操作:

    1. 单击基于表达式显示或隐藏

    2. 使用以下表达式:=NOT Parameters!ShowAll.Value

  21. 按需设置矩形及其包含的报表项的格式。例如,执行以下操作:

    1. 将文本框和仪表面板的**“填充”**色设置为与行标题背景色匹配。

    2. 将矩形的**“边框颜色”“边框样式”**属性设置为与矩阵单元匹配。

    3. 将仪表面板的**“边框样式”属性设置为“无”**。

在每个类别中添加销售指示器

添加作用域限于 Category 行组的指示器

  1. 右键单击矩阵中最后一个列标题的控点,指向**“插入列”,然后单击“组外部 - 右侧”**。

  2. 在新列中,在与 Category 关联的组行中,插入一个名为 rectCategoryIndicator 的**“矩形”**。

  3. 在该矩形中,插入一个**“指示器”。在“符号”中,使用工具提示单击“3 个符号(无圆形)”**。

    此单元中的数据的作用域是每个产品类别的数据。

  4. 添加的指示器为仪表面板报表项。根据需要,在仪表面板中调整仪表的宽度和高度。

  5. 打开**“指示器属性”,选择“值和状态”**页。

  6. 在**“值”**中,选择 [Sum(Sales)]。

  7. 在**“状态度量单位”中,选择“数字”**。

  8. 在第一种状态中,执行下列操作:

    1. 在**“图标”**中,验证显示了 X

    2. 在**“颜色”中,选择“黄色”**。

    3. 在**“开始”**中,键入 0。

    4. 在**“结束”**中,键入以下表达式:=(1.0-Variables!PercentDeviation.Value) * CDec(Parameters!CategoryQuota.Value((Variables!IndextoCategoryQuota.Value)-1))

  9. 在第二种状态中,执行下列操作:

    1. 在**“图标”**中,将符号更改为

    2. 在**“颜色”中,选择“暗黄绿色”**。

    3. 在**“开始”中,复制对第一个状态中的“结束”**所用的相同表达式。

    4. 在**“结束”**中,键入以下表达式:=(1.0+Variables!PctDeviation.Value) * CDec(Parameters!CategoryQuota.Value((Variables!QuotaIndex.Value)-1))

  10. 在第三种状态中,执行下列操作:

    1. 在**“图标”**中,验证显示了 !

    2. 在**“颜色”中,选择“深紫罗兰”**。

    3. 在**“开始”中,复制对第二个状态中的“结束”**所用的相同表达式。

    4. 在**“结束”**中,键入以下表达式:=Max(Sum(Fields!Sales.Value))

  11. 将列标题文本设置为 Met Category Quota?

为矩阵添加矩形容器

为矩阵添加一个矩形容器以及说明矩阵用途的文本。

添加矩形容器

  1. 在报表**“主体”上,插入一个名为 rectMatrix 的“矩形”**。

  2. 向该矩形添加具有以下文本的文本框:Compare sales to quotas by category。

  3. 按需设置格式。

  4. 选择该矩阵。将矩阵的左上角拖至矩形中文本框的下方。矩形将按需扩展。

  5. 选择该矩形。在“属性”窗格中,将**“书签”**设置为 QuotasRectangle。

  6. 使用“布局”工具栏将名为 rectCharts 和 rectMatrix 的矩形顶部对齐。

添加一个从应用场景文本至矩阵的链接

添加从文本至书签的链接

  1. 选择包含应用场景文本的文本框中的文本。

  2. 用鼠标突出显示 matrix 一词。

  3. 右键单击并打开**“文本属性”**对话框。

  4. 在**“字体”页上,将“颜色”设置为“蓝色”,将“效果”设置为“下划线”**。

  5. 在**“操作”页上,单击“转到书签”**。

  6. 在**“选择书签”**中,键入 QuotasRectangle。

更改 ReportMonth 的默认值

若要验证组指示器设置,请使用归入指示器所有三个范围的数据。

@ReportMonth 设置默认值

  1. 在“报表数据”窗格中,针对 @ReportMonth 打开**“报表属性”**。

  2. 在**“默认值”页上,在“值”**中,输入 11。

使用 11 月份的销售数据。

预览报表

预览并检查报表

  1. 预览报表。

  2. 检查下列各项:

    1. 两个主要矩形容器并排显示。

    2. 默认情况下,销售订单的矩阵行是折叠的。

    3. 报表运行时,更改 @ExpandAllTableRows 的值可展开和折叠矩阵中的所有行。

    4. 表角部区的指示器显示绿色。

    5. 类别指示器显示以下图像:

      Accessories:一个黄色叉形标记 (X)

      Bikes:一个绿色对勾标记 ()

      Clothing:一个黄色叉形标记 (X)

      Components:一个紫色惊叹号 (!)

    6. 您可以基于 @ShowAll 参数值显示或隐藏计算信息。

    7. 键入不同的定额值,检查指示器是否显示正确的状态。

  3. 如果您计划将报表导出到 .pdf 文件或其他打印兼容格式,请使用报表查看器工具栏的“打印布局”按钮来验证报表按预期方式呈现。如果出现多个意外的水平页面,则根据需要删除空白并调整容器宽度。有关详细信息,请参阅报表设计提示(Report Builder 3.0 和 SSRS)