使用参数控制报表数据 (Report Builder 2.0)
可以用两种方式使用报表参数:在数据源处筛选数据或者在报表中筛选数据。在数据源处筛选数据可以提高处理和查看报表的性能。如果无法在数据源处筛选数据,则可以使用参数在报表中筛选报表数据。您也可以使用参数在报表中对数据进行排序和组织。
有关筛选数据的概述,请参阅筛选报表中的数据 (Report Builder 2.0)。
通过本主题,您可以了解有关使用参数筛选数据的情况。
在数据源处筛选数据
若要在数据源处筛选数据,请在数据集查询中使用查询参数。在某些查询设计器中,您可以向“筛选器”窗格中添加字段,并为您要用作报表参数的每个字段选择一个参数选项。在其他查询设计器中,可以向查询命令添加查询参数。保存查询后,便会分析命令文本。对于每个查询参数,都会创建对应的报表参数。使用“报表数据”窗格中的“参数”节点可查看报表参数的列表。
当报表运行时,用户将为每个报表参数选择值,然后这些值将传递给查询。对数据源运行查询时,仅为报表检索由用户指定的值。您还可以在报表工具栏上指定作为报表参数标签的提示。
查询参数
定义查询参数时会自动创建报表参数。
定义数据集时,需要指定特定类型的数据源,例如,MicrosoftSQL Server。为每个数据集定义查询时,关联的查询设计器将标识查询命令文本中的变量并为每个变量创建一个查询参数。不是每个数据源和数据访问接口组合都支持使用变量的查询。 有关数据源所需查询语法的详细信息,请参阅将查询参数与特定数据源配合使用 (Report Builder 2.0)。
对于 SQL Server 数据源,查询通常在 Transact-SQL 语句的 WHERE 子句中包含变量,以限制运行查询时返回的数据范围。关系查询设计器会自动为您生成查询,并提供用来为您设置的每个筛选器创建查询变量的选项。有关详细信息,请参阅关系查询设计器用户界面 (Report Builder 2.0)。
同样,Analysis Services 数据源查询通常也包含 FILTER 子句中使用的 MDX 变量。查询还可以包括作为输入传递给存储过程或用户定义函数的变量。
每次修改数据集查询时,查询将得到重新处理。如果通过删除变量或重命名变量来更改查询,查询参数将反映相应的更改。
可以在**“数据集属性”对话框的“参数”**页上创建其他数据集参数。查询发生更改时不会更改创建的参数。
系统将把每个查询参数的默认值设为一个表达式,此表达式的计算结果为相应的报表参数。若要更改默认值,请使用**“数据集属性”对话框的“参数”**页。例如,对于 SQL Server 数据源,如果查询参数为 @MyParameter,则报表参数为 MyParameter,@MyParameter 的值将被设置为表达式 [@MyParameter]。有关详细信息,请参阅“数据集属性”对话框 ->“参数”(Report Builder 2.0)。 您可以手动编辑查询参数并设置其默认值。有关详细信息,请参阅如何使查询参数与报表参数关联 (Report Builder 2.0)。
自动创建的报表参数使用下列默认值:
单个值
数据类型 Text
设置为参数名称的提示
无默认值
无可用值
您可能需要基于查询参数表示的数据类型更改这些属性。有关详细信息,请参阅创建报表参数和设置报表参数属性 (Report Builder 2.0)。
注意 |
---|
当删除或更改查询参数的名称后,并不会自动删除或更改相应的报表参数。如果删除了某个查询参数,并且不再需要相应的报表参数,则必须手动删除该报表参数。如果更改查询参数的名称,则在保存该查询后会创建与更改后名称对应的新报表参数。可以重命名报表参数以与新的查询参数名称相匹配,并更新数据集参数属性以将查询参数链接到报表参数。 |
在 Report Builder 1.0 中,当对筛选子句设置提示时,将自动创建报表参数。
依赖参数或级联参数
创建使用多个查询参数的查询时,可以创建一组级联参数。级联参数提供了从大量参数值中筛选出便于管理的值数的方法。例如,假设查询包含参数 @Category、@Subcategory 和 @Product,其中子类别列表依赖于 @Category,产品列表依赖于 @Subcategory。用户选择报表参数 Category 的值时,Subcategory 的值将限制为所选类别的有效值。用户选择 Subcategory 的值后,Product 的选项已由类别和子类别的选项进行了筛选。使用这种技术,可以将参数的有效选项降低到合理的数量。
若要设计级联参数,则必须在报表中包含以下各项:
具有多个相关查询参数的主数据集查询。
报表参数的排序列表,每个报表参数都绑定到一个查询参数。通常,这些报表参数是主查询自动创建的。每个依赖参数都必须遵循它所依赖的参数。可以在“报表数据”窗格中通过向上和向下移动集合中的参数,更改参数的顺序。有关详细信息,请参阅如何更改报表参数的顺序 (Report Builder 2.0)。
为每个报表参数提供可用值的单个数据集。对每个查询参数使用相同的区分大小写的拼写非常重要,这样才能正确地链接查询参数和报表参数。每个报表参数的每组可用值查询必须只提供在主查询上下文中有意义的值。
在示例中,报表参数 Product 依赖于 Subcategory,后者又依赖于 Category。必须先出现 Category,后跟 Subcategory,然后是 Product。提供 Category 可用值的数据集查询必须显示对主查询有效的所有类别。选择类别后提供 Subcategory 可用值的查询应提供给定 Category 的有效值,以及主查询中存在的所有约束。
有关详细信息,请参阅如何向报表添加级联参数 (Report Builder 2.0)。
运行查询后筛选报表数据
还可以创建报表参数,并在筛选表达式中用于筛选报表数据集、数据区域或 Tablix 组中的数据。有关详细信息,请参阅筛选报表中的数据 (Report Builder 2.0) 和如何添加筛选器 (Report Builder 2.0)。
在制作报表时,报表参数是报表定义的一部分,但在报表发布之后,可对报表参数进行单独管理。在发布报表定义之后,可以使用报表管理器修改参数属性。有关详细信息,请参阅 SQL Server 联机丛书中 Reporting Services 文档中的“设置已发布报表的属性”。
使用迅速更改的有效参数值
如果指定了迅速更改的可用值,这些值可能在报表运行之前失效。这样,到用户提交该值并运行报表时,用户从列表中选择的值不再有效。为了避免此类问题,编写的返回数据集的查询需满足下列条件:在典型用户选择值和运行报表所需的时间内,有效值列表应保持不变。
此外,还应避免迅速改变无查询值。例如,如果以当前日期作为可用值,在编写的表达式中就应该用 DateTime.Today 属性,而不是 DateTime.Now 属性。这样一来,该值的时间部分就不会迅速改变。还可以使用报表变量或组变量计算一次值,并在处理报表过程中保持不变。有关详细信息,请参阅在表达式中使用报表和组变量集合引用 (Report Builder 2.0)。