使用参数控制报表数据

报表参数通常筛选从数据源检索到的报表数据。筛选数据源中的数据可以提高处理和查看报表的性能。不能在数据源中筛选数据时,可以使用参数在检索报表数据之后筛选这些数据。您也可以基于报表参数对报表中的数据进行排序和分组。

在数据源处筛选数据

若要筛选数据源中的数据,请在数据集查询中使用查询参数。对于每个查询参数,Reporting Services 都会创建相应的报表参数。用户选择报表参数的值时,该值将传递给查询。在数据源上运行查询时,只能检索报表中用户指定的值。属性(如用户提示和默认值)将应用于报表参数。

查询参数

定义查询参数时会自动创建报表参数。在报表生成器中,当对筛选子句设置提示时,将自动创建报表参数。

定义数据集时,需要指定特定类型的数据源,例如,MicrosoftSQL Server。报表设计器会打开一个用于处理数据源类型的查询设计器。定义每个数据集的查询时,查询设计器将标识查询命令文本中的变量并为每个变量创建查询参数。不是每个数据源和数据访问接口组合都支持使用变量的查询。有关数据源所需查询语法的详细信息,请参阅将查询参数与特定数据源配合使用 (Reporting Services)

对于 SQL Server 数据源,查询通常在 Transact-SQL 语句的 WHERE 子句中包含变量,以限制运行查询时返回的数据范围。同样,Analysis Services 数据源查询通常也包含 FILTER 子句中使用的 MDX 变量。查询还可以包括作为输入传递给存储过程或用户定义函数的变量。

每次修改数据集查询时,查询将得到重新处理。如果通过删除变量或重命名变量来更改查询,查询参数将反映相应的更改。

可以在**“数据集属性”对话框的“参数”**页上创建其他数据集参数。查询发生更改时不会更改创建的参数。

系统将把每个查询参数的默认值设为一个表达式,此表达式的计算结果为相应的报表参数。若要更改默认值,请使用**“数据集属性”对话框的“参数”**页。例如,对于 SQL Server 数据源,如果查询参数为 @MyParameter,则报表参数为 MyParameter,@MyParameter 的值将被设置为表达式 [@MyParameter]。有关详细信息,请参阅“数据集属性”对话框 ->“参数”。您可以手动编辑查询参数并设置其默认值。有关详细信息,请参阅如何将查询参数与报表参数相关联

自动创建的报表参数使用下列默认值:

  • 单个值

  • 数据类型 Text

  • 设置为参数名称的提示

  • 无默认值

  • 无可用值

您可能需要基于查询参数表示的数据类型更改这些属性。有关详细信息,请参阅创建报表参数和设置报表参数属性

备注

当删除或更改查询参数的名称后,并不会自动删除或更改相应的报表参数。如果删除了某个查询参数,并且不再需要相应的报表参数,则必须手动删除该报表参数。如果更改查询参数的名称,则在保存该查询后会创建与更改后名称对应的新报表参数。可以重命名报表参数以与新的查询参数名称相匹配,并且更新数据集参数属性将查询参数链接到报表参数。

依赖参数或级联参数

创建使用多个查询参数的查询时,可以创建一组级联参数。级联参数提供了从大量参数值中筛选出便于管理的值数的方法。例如,假设查询包含参数 @Category、@Subcategory@Product,其中子类别列表依赖于 @Category,产品列表依赖于 @Subcategory。用户选择报表参数 Category 的值时,Subcategory 的值将限制为所选类别的有效值。用户选择 Subcategory 的值后,Product 的选项已由类别和子类别的选项进行了筛选。使用这种技术,可以将参数的有效选项降低到合理的数量。

若要设计级联参数,则必须在报表中包含以下各项:

  • 具有多个相关查询参数的主数据集查询。

  • 报表参数的排序列表,每个报表参数都绑定到一个查询参数。通常,这些报表参数是主查询自动创建的。每个依赖参数都必须遵循它所依赖的参数。可以在“报表数据”窗格中通过向上和向下移动集合中的参数,更改参数的顺序。有关详细信息,请参阅如何更改报表参数的顺序 (Reporting Services)

  • 为每个报表参数提供可用值的单个数据集。对每个查询参数使用相同的区分大小写的拼写非常重要,这样才能正确地链接查询参数和报表参数。每个报表参数的每组可用值查询必须只提供在主查询上下文中有意义的值。

在示例中,报表参数 Product 依赖于 Subcategory,后者又依赖于 Category。必须先出现 Category,后跟 Subcategory,然后是 Product。提供 Category 可用值的数据集查询必须显示对主查询有效的所有类别。选择类别后提供 Subcategory 可用值的查询应提供给定 Category 的有效值,以及主查询中存在的所有约束。

有关详细信息,请参阅如何向报表添加级联参数 (Reporting Services)

运行查询后筛选报表数据

还可以创建报表参数,并在筛选表达式中用于筛选报表数据集、数据区域或 Tablix 组中的数据。有关详细信息,请参阅筛选报表中的数据如何添加筛选器 (Reporting Services)

在制作报表时,报表参数是报表定义的一部分,但在报表发布之后,可对报表参数进行单独管理。在发布报表定义之后,可以使用报表管理器修改参数属性。有关详细信息,请参阅设置已发布报表的属性

使用迅速更改的有效参数值

如果指定了迅速更改的可用值,这些值可能在报表运行之前失效。这样,到用户提交该值并运行报表时,用户从列表中选择的值不再有效。为了避免此类问题,编写的返回数据集的查询需满足下列条件:在典型用户选择值和运行报表所需的时间内,有效值列表应保持不变。

此外,还应避免迅速改变无查询值。例如,如果以当前日期作为可用值,在编写的表达式中就应该用 DateTime.Today 属性,而不是 DateTime.Now 属性。这样一来,该值的时间部分就不会迅速改变。还可以使用报表变量或组变量计算一次值,并在处理报表过程中保持不变。有关详细信息,请参阅在表达式中使用报表变量和组变量集合引用 (Reporting Services)

请参阅

任务

如何将查询参数与报表参数相关联

参考

“数据集属性”对话框 ->“参数”

概念

教程:向报表添加参数

创建报表数据集

其他资源

教程 (Reporting Services)

创建报表数据源