报表生成器中的分页报表参数

适用于: SQL Server 2016 (13.x) Reporting Services 及更高版本 SharePoint

适用于: SQL Server 2016 (13.x) Reporting Services 及更高版本

本文章介绍分页报表参数的常规用法、可设置的属性等内容。 通过报表参数,您可以控制报表数据、将相关报表连接在一起以及更改报表显示。 可以在报表生成器和报表设计器中创建的分页报表中使用报表参数。 在 SQL Server 移动报表发布服务器中创建的移动报表内,还可以使用报表参数。 有关详细信息,请参阅分页报表的报表参数概念(报表生成器)

注意

SQL Server Reporting Services 2019 之后的所有 SQL Server Reporting Services 版本已弃用 SQL Server 移动报表发布服务器。 该功能从 SQL Server Reporting Services 2022 和 Power BI 报表服务器开始已停止使用。

有关向报表添加参数的详细信息,请参阅教程:向报表添加参数(报表生成器)

参数的常见用法

参数的常见用法包括:

  • 使用可通过可自定义的接口进行调整的筛选器来控制数据。 有关详细信息,请参阅控制分页和移动报表数据
  • 将主报表与每个报表解决特定问题的钻取报表连接。 有关详细信息,请参阅连接相关报表
  • 通过调整渲染来改变报表的呈现方式。 有关详细信息,请参阅更改报表显示

控制分页和移动报表数据

报表生成器和报表设计器提供了根据你拥有的数据类型筛选数据的选项:

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

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

  • 在 SQL Server 移动报表中筛选共享数据集的数据。 有关详细信息,请参阅 使用 SQL Server 移动报表发布服务器创建移动报表

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

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

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

更改报表显示

报表生成器提供了可用于更改演示文稿的工具:

  • 通过 URL 请求向报表服务器发送命令,以自定义报表的呈现。 有关详细信息,请参阅 URL 访问 (SSRS)在 URL 内传递报表参数

  • 你可以为用户提供指定值的选项,以便他们可以自定义报表的外观。 例如,提供一个布尔参数以指示是否展开或折叠表中所有的嵌套行组。

  • 可让用户可选择通过在表达式中包含参数来自定义报表的数据和外观。 有关详细信息,请参阅分页报表中的参数集合引用(报表生成器)

查看包含参数的报表

查看具有参数的报表时,参数窗格将显示每个参数,以便你可以通过交互方式指定值。 下图显示了具有参数 @ReportMonth、@ReportYear、@EmployeeID、@ShowAll、@ExpandTableRows、@CategoryQuota 和 @SalesDate 的报表的“参数”窗格。

显示“参数”窗格的屏幕截图,其中突出显示不同的参数和接口工具。

  1. 参数窗格:“参数”窗格显示各个参数的提示和默认值。 你可以自定义参数布局。 有关详细信息,请参阅自定义分页报表中的参数窗格(报表生成器)

  2. @SalesDate 参数:@SalesDate 参数是日期/时间数据类型。 文本框旁显示“选择日期”提示信息。 若要修改日期,请在文本框中键入新日期或使用日历控件。

  3. @ShowAll 参数:@ShowAll 参数是布尔数据类型。 使用单选按钮指定 TrueFalse

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

  5. @CategoryQuota 参数:@CategoryQuota 参数是 Float 数据类型,因此它采用数字值。 @CategoryQuota 设置为允许多个值。

  6. 查看报表:输入或更改参数值后,选择“查看报表”以运行报表。 如果所有参数都具有默认值,则报表会在第一次查看时自动运行。

创建参数

可以通过几种方式创建报表参数:

注意

并非所有的数据源都支持参数。

具有参数的数据集查询或存储过程

添加一个包含变量的数据集查询或包含输入参数的数据集存储过程。 为每个变量或输入参数创建一个数据集参数,并为每个数据集参数创建一个报表参数。

显示报表生成器的屏幕截图,其中突出显示“报表数据”窗格、“参数”窗格和“数据集属性”对话框。

来自报表生成器的此图像显示:

  1. “报表数据”窗格中的报表参数。

  2. 具有参数的数据集。

  3. “参数”窗格。

  4. “数据集属性”对话框中列出的参数。

可嵌入或共享数据集。 在向报表中添加共享数据集时,不能在报表中覆盖标记为内部参数的数据集参数。 可以覆盖未被标记为内部参数的数据集参数。

有关详细信息,请参阅数据集查询

手动创建参数

从“报表数据”窗格手动创建参数。 您可以配置报表参数,以便用户可以通过交互方式输入值以帮助自定义报表的内容或外观。 还可以配置报表参数以使用户无法更改预配置的值。

注意

因为参数在服务器上是单独管理的,重新发布含有新参数设置的主报表不会覆盖报表上现有的数据设置。

具有参数的报表部件

注意

SQL Server Reporting Services 2019 之后的所有 SQL Server Reporting Services 版本,以及 Power BI Report Server September 2022 之后的所有 Power BI Report Server 版本已弃用报表部件。

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

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

注意

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

参数值

以下是用于在报表中选择参数值的选项:

  • 从下拉列表中选择一个单一参数值。

  • 从下拉列表中选择多个参数值。

  • 从下拉列表中为参数选择一个值,该值决定可在下拉列表中为其他参数选择的值。 这些值是级联参数。 级联参数使你能够持续筛选数以千计的值,最终将值的数量限定在易于管理的范围内。

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

  • 运行报表时不必先选择参数值,因为已存在默认值的参数。

报表参数属性

可以使用“报表属性”对话框来更改报表参数属性。 下表总结了可以为各个参数设置的属性:

属性 说明
Name 键入区分大小写的参数名称。 名称必须以字母开头,可以包含字母、数字或下划线 (_)。 名称不能包含空格。 对于自动生成的参数,其名称会与数据集查询中的参数相匹配。 默认情况下,手动创建的参数与 ReportParameter1 相类似。
Prompt 在报表查看器工具栏上的参数旁边显示的文本。
数据类型 报表参数必须为以下数据类型之一:

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

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

Integer。 用户在文本框中输入值。

Float。 用户在文本框中输入值。

Text。 用户在文本框中输入值。

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

有关报表数据类型的详细信息,请参阅 RDL 数据类型
允许空值 如果参数的值可为空字符串或为空白,请选择此选项。

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

如果为参数指定有效值,并希望将 Null 作为有效值之一,则必须将 null 作为指定值之一。 选择此选项不会自动将 null 包含为可用值。
允许多个值 提供可用值以创建下拉列表,供用户从中选择。 使用此属性可确保只在数据集查询中提交有效值的好方法。

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

如果用于提供值的数据快速更改,则用户看到的列表可能不是最新列表。
可见 选择此选项可在报表运行时在其顶部显示报表参数。 此选项允许用户在运行时选择参数值。
Hidden 选择此选项可隐藏已发布报表中的报表参数。 报表参数值仍可在报表 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)

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

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

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

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

如果重新发布报表定义,则会保留已发布报表的参数属性。 如果报表定义重新发布为同一报表,并且参数名和数据类型不变,则属性设置将保留不变。 如果添加或删除报表定义中的参数,可能需要更改已发布的报表中的参数属性。 或者,可能需要更改属性,以更改现有参数的数据类型或名称。

并非在所有情况下都可以修改所有参数。 如果报表参数从数据集查询中获得默认值,则不能为已发布的报表修改该值。 也不能从报表服务器修改该值。 运行时使用的值在查询运行时确定。 如果使用基于表达式的参数,则会在评估表达式时确定它。

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

订阅的参数

可以为按需报表或为快照定义订阅,并指定在订阅处理期间使用的参数值。

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

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

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

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

注意

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

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

参数和数据保护

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

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

重要

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

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

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