报表参数(报表生成器和 SSRS)

通过报表参数,您可以控制报表数据、将相关报表连接在一起以及更改报表显示。 若要设计能够有效使用参数的报表,您必须了解参数和数据集查询是如何相关的,如何在表达式中包含参数,以及如何在报表服务器或 SharePoint 站点上不通过报表定义单独管理参数。 发布报表后,可以独立于报表定义单独管理参数。 通过创建链接报表,您甚至可以为同一个报表创建多个参数集。

查看报表时,报表查看器工具栏将显示每个参数,以便用户可以通过交互方式指定值。 下图显示了具有参数 @StartDate、@EndDate、@Subcategory@ShowAllRows 的报表的参数区域。

rs_ParameterStory

  1. “参数”窗格 报表查看器工具栏显示各个参数的提示和默认值。 系统将自动设置工具栏上的参数布局。 显示顺序由参数在“报表数据”窗格中的显示顺序决定。

  2. @StartDate 和 @EndDate 参数 参数 @StartDate 的数据类型为 DateTime。 文本框旁边会显示“开始日期”提示。 若要修改日期,请在文本框中键入新日期或使用日历控件。

    参数 @EndDate 显示在 @StartDate 之后。

  3. @Subcategory 参数 参数 @Subcategory 的数据类型为 Text。 由于 @Subcategory 具有可用值列表,因此将在下拉列表中显示有效值。 您必须从此列表中选择值。 由于 @Subcategory 具有多个值,因此将显示**“全选”**选项,通过该选项,您可以清除或选择列表中的所有值。

  4. @ShowAllRows 参数 参数 @ShowAllRows 的数据类型为 Boolean。 使用单选按钮指定 True 或 False。

  5. “显示或隐藏参数区域”控点 在报表查看器工具栏上,单击此箭头可显示或隐藏参数窗格。

  6. “参数”按钮 在报表生成器预览的功能区上,单击**“参数”**按钮可显示或隐藏参数窗格。

  7. “查看报表”按钮 输入参数值后,单击报表查看器工具栏上的**“查看报表”**可运行该报表。 如果所有参数都具有默认值,则报表会在第一次查看时自动运行。

有关立即使用参数的详细信息,请参阅教程:向报表添加参数(报表生成器)报表示例(报表生成器和 SSRS)

注意注意

在 SQL Server Data Tools 中,您可以在报表生成器和报表设计器中创建和修改报表定义 (.rdl)。每个创作环境提供了不同的方式来创建、打开和保存报表和相关项。有关详细信息,请参阅 Web 上 microsoft.com 中的“在报表设计器和报表生成器中设计报表 (SSRS)”。

本文内容

参数的常规用法

参数类型

创建参数

报表参数

数据集参数

级联参数

显示报表中的参数值

设置钻取报表的参数

设置子报表的参数

管理已发布报表的参数

设置报表 URL 的参数

设置订阅参数

设置快照参数

参数和数据保护

操作指南主题

本节内容

相关主题

参数的常规用法

下面是一些最常用的参数使用方法:

  • 通过编写包含查询变量的数据集查询,在数据源筛选报表数据。

  • 筛选共享数据集的数据。 当您向报表添加共享数据集时,您无法更改查询。 在报表中,您可以添加一个数据集筛选器,在其中包含对您创建的报表参数的引用。

  • 允许用户指定值以对报表中的数据进行自定义。 例如,为销售数据的开始日期和结束日期提供两个参数。

  • 允许用户指定值以帮助自定义报表的外观。 例如,提供一个布尔参数以指示是否展开或折叠表中所有的嵌套行组。

  • 创建可选值的下拉列表,以便用户只能选择有效值。

  • 为每个参数创建默认值,以便报表可在第一次查看时自动运行。

  • 创建级联值,以便根据在上一参数中所做的选择,生成一个参数的有效值的下拉列表。 这样,您就可以从数千个值中依次筛选参数值,最终将值的数量限定在可管理的范围内。

  • 使用参数可将主报表关联到钻取报表、子报表和链接报表。 设计一组报表时,您可以将各个报表设计为回答某些特定的问题。 每个报表都可以为相关信息提供不同的视图或不同的详细程度。 若要提供一组相关报表,请为目标报表上的相关数据创建参数。

  • 为多个用户自定义参数集。 基于报表服务器上的销售报表创建两个链接报表。 一个链接报表使用销售人员的预定义参数值,而第二个链接报表使用销售经理的预定义参数值。 两个报表使用相同的报表定义。

如果您计划为发布的报表创建报表快照、历史记录或订阅,则必须了解报表参数如何影响报表的设计需求。

用于“返回首页”链接的箭头图标返回页首

创建参数

您可以通过以下方式创建报表参数:

  • 创建或添加嵌入或共享的数据集,其中具有包含查询变量的查询。 有关详细信息,请参阅了解报表数据集和查询

  • 从“报表数据”窗格中手动创建参数。 有关详细信息,请参阅添加、更改或删除报表参数(报表生成器和 SSRS)

  • 添加一个报表部件,其中包含对参数的引用或对包含变量的共享数据集的引用。

    注意注意

    对于具有相关数据集以及参数的数据区域,参数可以发布为单独的报表部件。 尽管参数作为报表部件列出,但您不能直接向报表添加报表部件参数。 而是应添加报表部件,此时,将从报表部件包含或引用的数据集查询中自动生成任何所需的报表参数。 有关报表部件的详细信息,请参阅报表部件(报表生成器和 SSRS)报表设计器中的报表部件 (SSRS)

参数类型

报表包含两种类型的参数:数据集参数和报表参数。

  • 数据集参数 自动为数据集查询命令中的每个查询变量创建嵌入数据集或共享数据集的数据集参数。 某些查询设计器提供有相关区域,用以基于字段名称和选项添加应用的筛选器,以便基于字段名称添加数据集参数。

    数据集参数在定义数据集查询之后配置。 可以单独为每个数据集参数指定默认值。 在向报表中添加共享数据集时,不能在报表中覆盖标记为内部参数的数据集参数。 可以覆盖未被标记为内部参数的数据集参数。 还可以创建附加参数。 有关详细信息,请参阅本主题中的数据集参数。

  • 报表参数 自动为每个数据集参数创建报表参数。 也可以手动创建报表参数。 您可以配置报表参数,以便用户可以通过交互方式输入值以帮助自定义报表的内容或外观。 也可以对报表参数进行配置,以便用户无法更改预配置值。 在报表服务器上,报表参数和已发布报表是分开管理的。 有关详细信息,请参阅本主题中的报表参数。

    还可以将报表参数作为报表部件单独保存。 报表部件存储于报表服务器上,并且可供他人用于其报表中。 不能通过报表服务器对参数的报表部件进行管理。 可以在报表部件库中搜索参数,并在添加参数后,在报表中配置这些参数。 有关详细信息,请参阅报表部件(报表生成器和 SSRS)

用于“返回首页”链接的箭头图标返回页首

报表参数

参数的最常见用法是更改由数据集查询检索的报表数据。 在这种情况下,用户运行该报表时系统提示输入一个或多个值,该数据集查询仅检索请求的数据。 数据集查询包含查询参数,并且报表处理器自动创建间接链接到查询参数报表参数。

注意注意

因为在服务器上对参数实行单独管理,所以重新发布带有新的参数设置的主报表不会覆盖报表上的现有参数设置。

报表参数的创建方式如下:

  • 在定义包含查询变量的数据集查询时自动创建。 对于每个查询变量,都会创建具有相同名称的相应的数据集查询参数和报表参数。 查询参数可以是对查询变量的引用,或是对存储过程的输入参数的引用。

  • 当您添加对包含查询参数的共享数据集的引用时自动创建。

  • 手动方式:当您在“报表数据”窗格中创建报表参数时。 参数是可以在报表的表达式中包含的内置集合之一。 因为使用表达式在整个报表定义中定义值,所以您可以使用参数来控制报表外观或将值传递到相关的子报表或也使用参数的报表。

默认情况下,自动创建的参数使用自动生成的名称、提示和数据类型。 在“报表数据”窗格中,您可以通过“报表属性”对话框来更改报表参数。 下表总结了可以为各个参数设置的属性:

属性

说明

名称

键入区分大小写的参数名称。 名称必须以字母开始,并且要包含字母、数字、下划线 (_),但不能包含空格。 对于自动生成的参数,该名称要与数据集查询中的查询参数匹配。 默认情况下,手动创建的参数与 ReportParameter1 相类似。

提示

在报表查看器工具栏上的参数旁边显示的文本。

数据类型

报表参数必须为以下数据类型之一:

  • Boolean。 用户通过单选按钮选择 True 或 False。

  • DateTime。 用户从日历控件中选择日期。

  • Integer。 用户在文本框中键入值。

  • Float。 用户在文本框中键入值。

  • Text。 用户在文本框中键入值。

为参数定义可用值时,用户可从下拉列表中选择值,即使数据类型为 DateTime 也是如此。

有关报表数据类型的详细信息,请参阅 RDL 数据类型

允许空值

如果参数的值可为空字符串或为空白,请选择此选项。

如果为参数指定有效值,并希望将空白值作为有效值之一,则必须在指定的值中包含空白值。 选择此选项并不会自动在可用值中包含空白值。

允许 Null 值

如果参数的值可为 Null,请选择此选项。

如果为参数指定有效值,并希望将 Null 作为有效值之一,则必须在指定的值中包含 Null。 选择此选项并不会自动在可用值中包含 Null。

允许多个值

提供可用值以创建下拉列表,供用户从中选择。 这是确保只在数据集查询中提交有效值的好方法。

如果参数值可为下拉列表中显示的多个值,请选择此选项。 不允许为 Null 值。 选择此选项后,将向参数下拉列表中的可用值列表添加复选框。 列表的顶部包括“全选”复选框。 用户可以选中所需的值。

如果用于提供值的数据快速更改,则用户看到的列表可能不是最新列表。

可见

选择此选项可在报表运行时在其顶部显示报表参数。 此选项允许用户在运行时选择参数值。

隐藏

选择此选项可隐藏已发布报表中的报表参数。 报表参数值仍可在报表 URL、订阅定义或报表服务器中进行设置。

内部

选择此选项可以隐藏报表参数。 在已发布报表中,只能在报表定义中查看报表参数。

可用值

如果已为参数指定可用值,则有效值将始终作为下拉列表显示。 例如,如果为 DateTime 参数提供了可用值,则在参数窗格中将显示日期下拉列表而不是显示日历控件。

为了确保值列表在报表与子报表中是一致的,可以在数据源中设置一个选项,使用单个事务处理与数据源关联的数据集中的所有查询。

安全说明安全说明

在任何包含数据类型为 Text 的参数的报表中,请务必使用可用值列表(也称为有效值列表),并确保任何运行该报表的用户仅具有查看该报表中数据所必需的权限。 有关详细信息,请参阅安全性(报表生成器)

默认值

设置来自查询或静态列表的默认值。

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

高级

设置报表定义属性 UsedInQuery,该值指示此参数是直接还是间接影响报表中的数据。

自动确定何时刷新

当您希望报表处理器来确定该值的设置时选择此选项。 如果报表处理器发现数据集查询具有对此参数的直接或间接引用,或者报表具有子报表,则该值为 True。

始终刷新

当报表参数直接或间接用于数据集查询或查询参数表达式时,选择此选项。 此选项将 UsedInQuery 设置为 True。

从不刷新

当报表参数未直接或间接用于数据集查询或查询参数表达式时,选择此选项。 此选项将 UsedInQuery 设置为 False。

注意事项注意

应慎重使用“从不刷新”。 在报表服务器上,UsedInQuery 用于帮助控制报表数据和所呈现报表的缓存选项,以及控制快照报表的参数选项。 如果您未正确设置“从不刷新”,可能导致对不正确的报表数据或报表进行缓存,或者导致快照报表具有不一致的数据。 有关详细信息,请参阅报表定义语言 (SSRS)

用于“返回首页”链接的箭头图标返回页首

数据集参数

在查询设计器中生成查询时会定义查询参数。 一些数据扩展插件提供了可选择要作为参数包含的字段的方法。 其他数据扩展插件可标识查询命令中的查询变量。 系统会自动为每个查询变量创建一个查询参数。

并非所有数据源都支持查询参数。 如果不能在数据源筛选数据,则可以使用报表参数供用户在检索报表的数据之后筛选数据。 当所有的查询参数都有相应的报表参数时,可以单独定义报表参数。 报表参数还可用于在检索数据后更改报表的外观或组织。

若要筛选数据集查询中的数据,可以通过指定结果集中要包含或排除的值,来包含一个限制检索到的数据的限制子句。

使用与数据源关联的查询设计器有助于生成参数化查询。

  • 对于 Transact-SQL 查询,不同的数据源支持不同的参数语法。 支持范围包括在查询中按位置或名称标识的参数。 有关详细信息,请参阅向报表添加数据(报表生成器和 SSRS) 中针对特定外部数据源类型的相关主题。 在关系查询设计器中,必须为筛选器选择参数选项,才能创建参数化查询。 有关详细信息,请参阅关系查询设计器用户界面(报表生成器)

  • 对于基于多维数据源(例如 Microsoft SQL Server Analysis Services、SAP NetWeaver BI 或 Hyperion Essbase)的查询,可以指定是否创建基于查询设计器中您指定的筛选器的参数。 有关详细信息,请参阅查询设计器(报表生成器) 中与数据扩展插件对应的查询设计器主题。

用于“返回首页”链接的箭头图标返回页首

级联参数

可以创建级联参数,其中用户按特定顺序为每个参数选择值,并且每个选择都会成功限制下一个参数的值。 级联参数能够将潜在的数以千计的选项减少到一个易于管理的选项数。 例如,用户选择了一个产品类别,再在该类别的可用产品列表中进行选择,然后选择大小和颜色。

有关详细信息,请参阅向报表添加级联参数(报表生成器和 SSRS)

用于“返回首页”链接的箭头图标返回页首

显示报表中的参数

报表参数是可以在表达式中引用的内置集合之一。 根据报表参数是接受单个值还是多个值,表达式语法不尽相同。 有关详细信息,请参阅常用筛选器(报表生成器和 SSRS)Parameters 集合引用(报表生成器和 SSRS)

设置钻取报表的参数

钻取操作是在报表项任意文本框的属性页,或在图表或仪表部分上进行设置的。 这些报表参数可能是隐藏的,可以使用主报表中的值为连接报表选择正确的数据,否则这些参数可能会在运行时被用户看到。 为钻取操作设置目标报表名称的方式取决于与报表服务器是否存在活动连接。 有关详细信息,请参阅指定外部项的路径(报表生成器和 SSRS)

也可以对任何支持 URL 寻址的报表使用 URL 访问,并将报表参数值作为 URL 语法的一部分。 有关详细信息,请参阅 URL 访问 (SSRS)

设置子报表的参数

若要设置子报表的参数,请使用**“子报表属性”对话框的“参数”**页。 设置子报表名称的方式取决于您与报表服务器之间是否有活动连接。 有关详细信息,请参阅指定外部项的路径(报表生成器和 SSRS)

注意注意

如果在 Tablix 数据区域中使用子报表,将为每一行处理子报表及其参数。 如果存在多行,可考虑采用钻取报表是否更为合适。

有关详细信息,请参阅添加子报表和参数(报表生成器和 SSRS)

管理报表服务器或 SharePoint 站点的参数

当您设计报表时,报表参数保存在报表定义中。 当您发布报表时,报表参数与报表定义分开保存和管理。

对于已发布报表,可以使用:

  • **报表参数属性。**直接在报表服务器上独立于报表定义更改报表参数值。

  • 缓存报表:若要为报表创建缓存计划,每个参数都必须具有默认值。 有关详细信息,请参阅 缓存报表 (SSRS)

  • 缓存共享数据集:若要为共享数据集创建缓存计划,每个参数都必须具有默认值。 有关详细信息,请参阅 缓存报表 (SSRS)

  • 链接报表:可以使用预设参数值为不同用户创建链接报表以筛选数据。 有关详细信息,请参阅创建链接报表

  • 报表订阅:可以指定参数值以通过订阅筛选数据和传递报表。 有关详细信息,请参阅订阅和传递 (Reporting Services)

  • URL 访问:可以在指向报表的 URL 中指定参数值。 还可以使用 URL 访问运行报表并指定参数值。 有关详细信息,请参阅设置报表 URL 的参数。

如果重新发布报表定义,通常会保留已发布报表的参数属性。 如果报表定义重新发布为同一报表,并且参数名和数据类型不变,则属性设置将保留不变。 如果添加或删除了报表定义中的参数,或是更改了现有参数的数据类型或名称,则您最好更改已发布报表中的参数属性。

并非在所有情况下都可以修改所有参数。 如果报表参数从查询中获取默认值,则无法为已发布报表修改该值。 指定为“基于查询”的默认参数值是在报表定义中定义的,不能在报表服务器上进行修改。 基于查询的参数值不是常量值。 运行时使用的值将在运行查询时确定,如果是基于表达式的参数,则在对表达式求值时确定。

报表执行选项可以影响参数的处理方式。 作为快照运行的报表不能使用来自查询的参数,除非该查询包含这些参数的默认值。

用于“返回首页”链接的箭头图标返回页首

设置报表 URL 的参数

运行参数化报表的另一种方法是使用 URL。 您可以指定一个或多个采用编码的名称-值对格式的参数,各参数间用“and”(&) 符号分隔。

  • **Null 参数。**Null 参数使用特殊语法;您必须为 Null 值指定 isnull。 如果为某参数指定了 Null 值,则会忽略为同一参数指定的所有其他值。 下例说明了多个值为 Null 或常量的参数:

    http://exampleWebServerName/reportserver?/foldercontainingreports/orders&division=mailorder&region=west&sales:isnull=true

  • 具有多个值的参数。 通过重复参数名称指定多个值。 例如:

    http://exampleWebServerName/reportserver? %2ffoldercontainingreports%2forders&region=east&region=west

  • Boolean。 使用 0 表示 False,使用 1 表示 True。

  • Float。 包含服务器区域设置的小数分隔符。

  • DateTime。 采用 YYYY-MM-DDTHH:MM:SS 格式,该格式基于国际标准化组织 (ISO) 8601 标准。

设置报表参数值只是使用 URL 访问语法查看报表的方式之一。 另一个示例是,指定 URL 参数从特定页码开始查看报表。 下面的示例在第 30 页打开 AdventureWorks2012 示例产品目录 2008 报表:

http://exampleWebServerName/reportserver? %2fAdventureWorks2012+Sample+Reports%2fProduct+Catalog+2008&rs:Command=Render&rc:Section=30

有关详细信息,请参阅URL 访问参数引用

用于“返回首页”链接的箭头图标返回页首

设置订阅参数

您可以定义按需订阅或快照订阅,可以指定在订阅处理过程中所用的参数值。

  • 按需报表。 您可以为按需报表的每个参数指定不同于发布值的参数值。 例如,假设有一个 Call Service 报表使用 Time Period 参数返回当前日、周或月的客户服务请求。 如果报表的默认参数值设置为**“今天”,则订阅可以使用不同的参数值(例如,“周”“月”**)以生成包含每周或每月数字的报表。

  • 快照。 快照订阅必须使用为快照定义的参数值。 您的订阅不能覆盖为快照定义的参数值。 例如,假设您要订阅作为报表快照运行的西部地区销售报表,并且该快照指定 Western 作为区域参数值。 在这种情况下,如果创建对此报表的订阅,则必须在订阅中使用参数值 Western。 若要提供忽略参数的可见说明,则应将订阅页上的参数字段设置为只读字段。

注意注意

数据驱动订阅可以使用从订阅服务器数据源中获取的参数值。 有关详细信息,请参阅使用外部数据源提供订阅方数据(数据驱动订阅)

如果在定义订阅之后更改了报表快照中的参数值,则报表服务器将停用该订阅。 停用订阅表示该报表已经修改。 若要激活该订阅,请先打开订阅,然后保存即可。

有关详细信息,请参阅订阅和传递 (Reporting Services)

用于“返回首页”链接的箭头图标返回页首

设置快照参数

报表执行选项可以影响参数的处理方式。 作为报表快照运行的参数化报表使用为报表快照定义的参数值。 参数值在报表的参数属性页中定义。 作为快照运行的报表不能使用来自查询的参数,除非该查询包含这些参数的默认值。

如果更改报表快照中的参数值,则会停用快照订阅。 若要激活该订阅,请先打开订阅,然后保存即可。

有关详细信息,请参阅性能、快照、缓存 (Reporting Services)

用于“返回首页”链接的箭头图标返回页首

参数和数据保护

在分发包含保密信息或敏感信息的参数化报表时要谨慎。 用户可能会很容易地将报表参数替换为其他值,从而导致您不希望发生的信息泄露。

另一种将参数用于雇员或个人数据的安全方法是:基于包含 Users 集合中的 UserID 字段的表达式选择数据。 Users 集合提供了获取报表运行用户的标识的方法,并使用该标识检索用户特定的数据。

安全说明安全说明

在任何包括 String 类型参数的报表中,请务必使用可用值列表(也称为有效值列表),并确保任何运行该报表的用户仅具有查看该报表中数据所必需的权限。 定义 String 类型的参数时,系统将向用户显示一个可以使用任何值的文本框。 可用值列表限制可以输入的值。 如果报表参数与查询参数关联,但您没有使用可用值列表,则报表用户可能会在文本框中键入 SQL 语法,从而导致报表和服务器容易受到 SQL 注入攻击。 如果用户有足够的权限执行新的 SQL 语句,则可能在服务器上产生意外结果。

如果报表参数与查询参数无关联,并且参数值包含在报表中,则报表用户可能会在参数值中键入表达式语法或 URL,并将报表呈现为 Excel 或 HTML 格式。 如果其他用户查看报表并单击呈现的参数内容,则用户可能会无意中执行恶意脚本或链接。

若要降低无意中运行恶意脚本的风险,请仅从可信来源打开呈现的报表。 有关保护报表的详细信息,请参阅保护报表和资源

用于“返回首页”链接的箭头图标返回页首

操作指南主题

本节列出的过程分步向您介绍如何使用参数和筛选器。

用于“返回首页”链接的箭头图标返回页首

相关章节

在报表中使用表达式(报表生成器和 SSRS)

表达式(报表生成器和 SSRS)

对数据进行筛选、分组和排序(报表生成器和 SSRS)

安全性(报表生成器)

用于“返回首页”链接的箭头图标返回页首

请参阅

概念

交互式排序、文档结构图和链接(报表生成器和 SSRS)

钻取、深化、子报表和嵌套数据区域(报表生成器和 SSRS)

其他资源

配置 SSRS 报表参数