教程:向报表添加参数(报表生成器)

将参数添加到报表,让用户从数据源或报表中筛选报表数据。 为数据集查询中包含的每个查询参数自动创建报表参数。 参数的数据类型确定了参数在报表视图工具栏上显示的方式。

rs_tut_Parameter

学习内容

本教程介绍如何执行以下作:

  1. 从表或矩阵向导创建矩阵报表和数据集

  2. 从表或矩阵向导中组织数据、选择布局和样式

  3. 添加查询参数以创建报表参数

  4. 更改报表参数的默认数据类型和其他属性

    1. 添加数据集以提供可用值和显示名称

    2. 指定要创建值的 Drop-List 的可用值

    3. 指定默认值,以便报表自动运行

    4. 从具有名称/值对的数据集中查找值

  5. 在报表中显示所选参数值

  6. 在筛选器中使用报表参数

  7. 更改报表参数以接受多个值

  8. 为条件可见性添加布尔参数

  9. 添加报表标题

  10. 保存报表

注释

在本教程中,将向导的多个步骤合并为一个过程。 有关如何浏览到报表服务器、选择数据源和创建数据集的分步说明,请参阅本系列中的第一篇教程:教程:创建基本表报表(报表生成器)。

完成本教程的估计时间:25 分钟。

要求

有关要求的信息,请参阅教程的先决条件(报表生成器)。

1.从表或矩阵向导创建矩阵报表和数据集

创建矩阵报表、数据源和数据集。

注释

在本教程中,由于查询包含了数据值,因此它不需要外部数据源。 这样,查询就会非常长。 在业务环境中,查询不会包含数据。 本教程中的查询仅供学习使用。

创建新矩阵报表

  1. 依次单击“ 开始”、“ 程序”、“ Microsoft SQL Server 2014报表生成器”,然后单击“ 报表生成器”。

    此时将显示 “入门” 对话框。

    注释

    如果未显示“ 入门 ”对话框,请在 “报表生成器 ”按钮中单击“ 新建”。

  2. 在左窗格中,验证是否选择了 “报表 ”。

  3. 在右窗格中,单击“ 表”或“矩阵向导”。

  4. 单击 “创建”

  5. 在“ 选择数据集 ”页上,单击“ 创建数据集”。

  6. 单击 “下一步”

  7. 在“ 选择与数据源的连接 ”页上,选择类型为 SQL Server 的数据源。 从列表中选择数据源或浏览到报表服务器以选择一个数据源。

  8. 单击 “下一步”

  9. “设计查询 ”页上,单击“ 编辑为文本”。

  10. 将以下查询粘贴到查询窗格中:

    ;WITH CTE (StoreID, Subcategory, Quantity)   
    AS (  
    SELECT 200 AS StoreID, 'Digital SLR Cameras' AS Subcategory, 2002 AS Quantity  
    UNION SELECT  200 AS StoreID, 'Camcorders' AS Subcategory, 1954 AS Quantity  
    UNION SELECT  200 AS StoreID, 'Accessories' AS Subcategory, 1895 AS Quantity  
    UNION SELECT  199 AS StoreID, 'Digital Cameras' AS Subcategory, 1849 AS Quantity  
    UNION SELECT  306 AS StoreID, 'Digital SLR Cameras' AS Subcategory, 1579 AS Quantity  
    UNION SELECT  306 AS StoreID, 'Camcorders' AS Subcategory, 1561 AS Quantity  
    UNION SELECT  306 AS StoreID, 'Digital Cameras' AS Subcategory, 1553 AS Quantity  
    UNION SELECT  306 AS StoreID, 'Accessories' AS Subcategory, 1534 AS Quantity  
    UNION SELECT 307 AS StoreID, 'Accessories' AS Subcategory, 1755 AS Quantity  
    UNION SELECT 307 AS StoreID, 'Camcorders' AS Subcategory, 1631 AS Quantity  
    UNION SELECT 307 AS StoreID, 'Digital SLR Cameras' AS Subcategory, 1772 AS Quantity)  
    SELECT StoreID, Subcategory, Quantity  
    FROM CTE  
    

    此查询将公共表表达式中多个 Transact-SQL SELECT 语句的结果组合在一起,以指定基于 Contoso 示例数据库中简化数据的值。 Contoso 销售数据表示消费品的国际销售数据。 本教程使用相机的销售数据。 子类别代表数码相机、数字单镜头反光(SLR)相机、摄像机和配件。

    查询中指定了列名,其中包括商店标识符、销售项的子类别,以及从三个商店的销售订单中订购的数量。 在此查询中,存储名称不是结果集的一部分。 在本教程的后面部分,你将从单独的数据集中查找与存储标识符相对应的存储区的名称。

    此查询不包含查询参数。 本教程稍后将添加查询参数。

  11. 在查询设计器工具栏上,单击“ 运行 ”()。 结果集显示 11 行数据,其中说明了四个商店的每个子类别所售项目的数量,并包括以下列:StoreID、Subcategory、Quantity。

  12. 单击 “下一步”

2. 从表或矩阵向导中组织数据、选择布局和样式

使用此向导可提供用于显示数据的起始设计。 此向导中的预览窗格可帮助您在完成表或矩阵设计之前将对数据进行分组的结果可视化。

将数据组织成组

  1. “排列字段 ”页上,将子类别拖动到 行组

  2. 将 StoreID 拖到 列组

  3. 将 Quantity 拖到“值”中。

    已组织按子类别分组的行中的销售数量值。 将为每个商店设置一列。

  4. 单击 “下一步”

  5. “选择布局 ”页上的 “选项”下,验证是否选择了 “显示分类汇总”和“总计 ”。

    运行报表时,最后一列将显示所有商店的每个子类别的总数量,最后一行将显示每个商店的所有子类别的总数量。

  6. 单击 “下一步”

  7. 在“ 选择样式 ”页上的“样式”窗格中,选择样式。

  8. 单击“完成”。

    矩阵将添加到设计图面中。 矩阵显示三列和三行。 第一行中单元格的内容为 Subcategory、[StoreID]和 Total。 第二行中单元格的内容包含表示子类别的表达式、每个商店销售的项目数量以及所有商店的每个子类别的总数量。 最后一行中的单元格显示每个商店的总计。

  9. 单击矩阵,将鼠标悬停在第一列的边缘上,抓住控点并展开列宽。

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

报表在报表服务器上运行,并显示发生报表处理的标题和时间。

在此方案中,列标题显示存储标识符,但不显示存储名称。 稍后,你将添加一个表达式,以在包含存储标识符/存储名称对的数据集中查找存储名称。

3.添加查询参数以创建报表参数

向查询添加查询参数时,报表生成器会自动创建具有名称、提示和数据类型的默认属性的单值报表参数。

添加查询参数

  1. 切换到“设计”视图。

  2. 在“报表数据”窗格中,展开 “数据集 ”文件夹,右键单击 “数据集1”,然后单击“ 查询”。

  3. 将以下 Transact-SQL WHERE 子句添加为查询中的最后一行:

    WHERE StoreID = (@StoreID)  
    

    WHERE 句将检索到的数据限制为查询参数 @StoreID指定的存储标识符。

  4. 在查询设计器工具栏上,单击“ 运行 ”()。 此时将打开“ 定义查询参数 ”对话框,并提示输入查询参数 @StoreID的值。

  5. 参数值中,键入 200

  6. 单击 “确定”

    结果集显示了标识符为 200的商店销售的附件、摄像机和数码 SLR 相机数量。

  7. 单击 “确定”

  8. 在“报表数据”窗格中,展开 “参数” 文件夹。

请注意,现在有一个名为 @StoreID的报表参数。 默认情况下,参数具有数据类型 Text。 由于存储标识符是整数,因此在下一过程中将数据类型更改为 Integer。

4. 更改报表参数的默认数据类型和其他属性

创建报表参数后,可以调整属性的默认值。

更改报表参数的默认数据类型

  1. “参数 ”节点下的“报表数据”窗格中,右键单击 @StoreID,然后单击“ 参数属性”。

  2. 在“提示”中,键入 应用商店标识符? 运行报表时,此文本将显示在报表查看器工具栏上。

  3. 数据类型中,从下拉列表中选择 “整数”。

  4. 接受对话框中剩余的默认值。

  5. 单击 “确定”

  6. 预览报表。 报表查看器显示 @StoreID提示。

  7. 在报表查看器工具栏上,在应用商店 ID 旁边键入 200,然后单击“ 查看报表”。

4a. 添加数据集以提供可用值和显示名称

若要确保用户只能键入参数的有效值,可以创建可供选择的值下拉列表。 这些值可以来自数据集或指定的列表。 必须从包含不包含对参数引用的查询的数据集提供可用值。

为参数的有效值创建数据集

  1. 切换到“设计”视图。

  2. 在“报表数据”窗格中,右键单击 “数据集” 文件夹,然后单击“ 添加数据集”。

  3. “名称”中,输入 “存储”

  4. 选择“使用在我的报表中嵌入的数据集”选项。

  5. 数据源的下拉列表中,选择在第一个过程中创建的数据源。

  6. “查询类型”中,验证是否选择了 “文本 ”。

  7. 查询中,粘贴以下文本:

    SELECT 200 AS StoreID, 'Contoso Catalog Store' as StoreName  
    UNION SELECT 199 AS StoreID, 'Contoso North America Online Store' as StoreName  
    UNION SELECT 307 AS StoreID, 'Contoso Asia Online Store' as StoreName  
    UNION SELECT 306 AS StoreID, 'Contoso Europe Online Store' as StoreName  
    
  8. 单击 “确定”

    “报表数据”窗格在“存储数据集”节点下显示 “StoreID ”和“StoreName”字段。

4b. 指定可用值以创建值下拉列表

创建数据集以提供可用值后,必须更改报表属性以指定哪个数据集以及用于填充报表视图器工具栏上有效值的下拉列表的字段。

为数据集中的参数提供可用值

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

  2. 单击 “可用值”,然后单击“ 从查询获取值”。

  3. “数据集”中,从下拉列表中,单击“ 存储”。

  4. “值”字段中,从下拉列表中,单击“StoreID”。

  5. “标签”字段中,从下拉列表中,单击“StoreName”。 标签字段指定值的显示名称。

  6. 单击 常规

  7. 在“提示”中,键入 商店名称?

    用户现在将从存储名称列表而不是存储标识符中进行选择。 请注意,参数数据类型仍为 Integer ,因为参数基于存储标识符,而不是存储名称。

  8. 单击 “确定”

  9. 预览报表。

    在报表查看器工具栏中,参数文本框现在是显示<“选择值>”的下拉列表。

  10. 从下拉列表中选择“Contoso 目录存储”,然后单击“ 查看报表”。

报表显示了标识符为 200的商店销售的附件、摄像机和数码 SLR 相机数量。

4c. 指定默认值,以便报表自动运行

可以为每个参数指定默认值,以便报表自动运行。

指定数据集的默认值

  1. 切换到“设计”视图。

  2. 在“报表数据”窗格中,右键单击 @StoreID,然后单击“ 参数属性”。

  3. 单击 “默认值”,然后单击“ 从查询获取值”。

  4. “数据集”中,从下拉列表中,单击“ 存储”。

  5. “值”字段中,从下拉列表中,单击“StoreID”。

  6. 单击 “确定”

  7. 预览报表。

对于 @StoreID,报表查看器显示值“Contoso 北美在线商店”。 这是数据集 存储的结果集中的第一个值。 该报告显示商店标识符 199 的数码相机销售数量。

指定自定义默认值

  1. 切换到“设计”视图。

  2. 在“报表数据”窗格中,右键单击 @StoreID,然后单击“ 参数属性”。

  3. 单击 “默认值”,然后单击“ 指定值”,然后单击“ 添加”。 添加了新的值行。

  4. “值”中,键入 200

  5. 单击 “确定”

  6. 预览报表。

对于 @StoreID,报表查看器显示值“Contoso 商品目录商店”。 这是存储标识符 200 的显示名称。 报表显示了标识符为 200的商店销售的附件、摄像机和数码 SLR 相机数量。

4d. 从具有名称/值对的数据集中查找值

数据集可能包含标识符和相应的名称字段。 如果只有标识符,可以在创建的数据集中查找包含名称/值对的相应名称。

从数据集中查找值

  1. 切换到“设计”视图。

  2. 在设计图面上,在矩阵中的第一行列标题中,右键单击 [StoreID] 并单击“ 表达式”。

  3. 在表达式窗格中,删除除开头 equals 以外的所有文本(=)。

  4. “类别”中,展开 “常用函数”,然后单击“ 杂项”。 “项”窗格显示一组函数。

  5. 在项目中,双击 查找。 表达式窗格显示 =Lookup(。 “示例”窗格显示查阅语法的示例。

  6. 键入以下表达式: =Lookup(Fields!StoreID.Value,Fields!StoreID.Value,Fields!StoreName.Value,"Stores")

    Lookup 函数获取 StoreID 的值,在“Stores”数据集中查找它,并返回 StoreName 值。

  7. 单击 “确定”

    存储列标题包含复杂表达式的显示文本: <<Expr>>

  8. 预览报表。

每个页面顶部的文本框显示存储名称而不是存储标识符。

5. 在报表中显示所选参数值

当用户对报表有疑问时,它有助于了解他们选择的参数值。 可以在报表中保留用户为每个参数的选定的值。 一种方法是在页面页脚的文本框中显示参数。

  1. 切换到“设计”视图。

  2. 右键单击页面页脚,指向 “插入”,然后单击 “文本框”。 拖动带时间戳的文本框旁边的文本框。 抓住文本框的侧控点并展开宽度。

  3. 在“报表数据”窗格中,将参数 @StoreID 拖动到文本框。 文本框显示 [@StoreID]

  4. 若要显示参数标签,请单击文本框中,直到插入光标出现在现有表达式之后,键入一个空格,然后将该参数的另一个副本从“报表数据”窗格拖动到文本框。 文本框显示 [@StoreID] [@StoreID]

  5. 右键单击第一个表达式,然后单击“ 表达式”。 此时将打开 “表达式 ”对话框。 将文本 Value 替换为 Label

  6. 单击 “确定”

    文本显示: [@StoreID.Label] [@StoreID]

  7. 预览报表。

6. 在筛选器中使用报表参数

筛选器有助于控制在从外部数据源检索数据后,应该在报告中使用哪些数据。 若要让用户帮助控制他们要查看的数据,可以在矩阵的筛选器中包含报表参数。

在矩阵筛选器中指定参数

  1. 切换到“设计”视图。

  2. 右键单击矩阵上的行或列标题句柄,然后单击 Tablix 属性

  3. 单击 “筛选器”,然后单击“ 添加”。 此时将显示一个新的筛选器行。

  4. 表达式中,从下拉列表中选择数据集字段 StoreID。 数据类型显示 Integer。 当表达式值为数据集字段时,将自动设置数据类型。

  5. “运算符” 中,确认是否已选择equals(=)。

  6. “值”中,键入 [@StoreID][@StoreID] 是表示 =Parameters!StoreID.Value的简单表达式语法。

  7. 单击 “确定”

  8. 预览报表。

    矩阵仅显示“Contoso 目录商店”的数据。

  9. 在报表查看器工具栏上,对于 应用商店名称?,选择 Contoso Asia Online Store,然后单击“ 查看报表”。

矩阵将显示与所选商店对应的数据。

7. 更改报表参数以接受多个值

若要将参数从单值更改为多值,必须更改查询以及包含对参数的引用的所有表达式,包括筛选器。 多值参数是值数组。 在数据集查询中,查询语法必须测试是否在一组值中包含一个值。 在报表表达式中,表达式语法必须访问值数组而不是单个值。

将参数从单值更改为多值

  1. 切换到“设计”视图。

  2. 在“报表数据”窗格中,右键单击 @StoreID,然后单击“ 参数属性”。

  3. 选择 “允许多个值”。

  4. 单击 “确定”

  5. 在“报表数据”窗格中,展开 “数据集 ”文件夹,右键单击 “数据集1”,然后单击“ 查询”。

  6. 在查询的最后一行中将 (=) 更改为 equalsIN Transact-SQL WHERE 子句:

    WHERE StoreID IN (@StoreID)  
    

    IN 运算符测试一个值是否包含在一组值中。

  7. 单击 “确定”

  8. 右键单击矩阵上的行或列标题句柄,然后单击 Tablix 属性

  9. 单击“ 筛选器”。

  10. “运算符”中,选择 “In”。

  11. 单击 “确定”

  12. 在显示页面页脚中的参数的文本框中,删除所有文本。

  13. 右键单击文本框,然后单击“ 表达式”。 键入以下表达式: =Join(Parameters!StoreID.Label, ", ")

    此表达式连接用户选择的所有存储名称。

  14. 单击 “确定”

  15. 在刚创建的表达式前面单击文本框中,然后键入以下内容:“已选择参数值”:

  16. 预览报表。

  17. 单击商店名称旁边的下拉列表。

    每个有效值都显示在复选框旁边。

  18. 单击“ 全选”,然后单击“ 查看报表”。

    该报表显示所有商店的所有子类别销售的数量。

  19. 在下拉列表中,单击“ 全选 ”以清除列表,单击“Contoso Catalog Store”和“Contoso Asia Online Store”,然后单击“ 查看报表”。

8. 为条件可见性添加布尔参数

添加布尔参数

  1. 在设计图面上,在“报表数据”窗格中,右键单击“ 参数”,然后单击“ 添加参数”。

  2. “名称”中,键入 ShowSelections。

  3. “提示”中,键入“显示选择”?

  4. 数据类型中,从下拉列表中,单击 布尔值

  5. 单击 “默认值”。

  6. 单击“ 指定值”,然后单击“ 添加”。

  7. “值”中,键入 False

  8. 单击 “确定”

基于布尔参数设置可见性

  1. 在设计图面上,右键单击显示参数值的页脚中的文本框,然后单击 “文本框属性”。

  2. 单击“可见性”。

  3. 选择“ 基于表达式显示或隐藏”选项,然后单击表达式按钮 Fx

  4. 键入以下表达式: =Not Parameters!ShowSelections.Value

    文本框“可见性”选项由属性“已隐藏”控制。 应用Not运算符,以便在选择参数时,Hidden 属性为 false,文本框将被显示。

  5. 单击 “确定”

  6. 单击 “确定”

  7. 预览报表。

    显示参数选项的文本框不会显示。

  8. 在报表查看器工具栏中,单击“ 显示选择”旁边的选项 True

  9. 预览报表。

页面页脚中的文本框显示所选的所有应用商店名称。

9. 添加报表标题

添加报表标题

  1. 在设计图面上,单击 单击以添加标题

  2. 键入参数化产品销售数据,然后单击文本框外部。

10. 保存报表

在报表服务器上保存报表

  1. “报表生成器 ”按钮中,单击“ 另存为”。

  2. 单击“ 最近使用的网站和服务器”。

  3. 选择或键入有权保存报表的报表服务器的名称。

    此时会显示“连接到报表服务器”消息。 当连接完成时,您将看到报表服务器管理员指定为报表默认位置的报表文件夹的内容。

  4. Name 中,将默认名称替换为参数化销售报表。

  5. 单击“ 保存”。

报表即已保存至报表服务器。 连接到的报表服务器显示在窗口底部的状态栏中。

后续步骤

最后,本演练介绍如何向报表添加参数。 若要了解有关参数的详细信息,请参阅报表参数(报表生成器和报表设计器)。

另请参阅

教程(报表生成器)
SQL Server 2014 中的报表生成器