在报表中筛选报表数据 (Report Builder 2.0)
筛选器可帮助您控制在报表中显示和处理的数据。可以为数据集、数据区域或组的任意组合指定筛选器。
如有可能,请先对数据源筛选数据,再在报表中检索这些数据,方法是将修改查询,在查询中包含用于限制要检索的数据的查询参数。有关详细信息,请参阅在源中筛选报表数据 (Report Builder 2.0)。
无法在数据源中筛选数据时,请为报表项指定筛选器。例如,当数据源不支持查询参数、您必须运行存储过程且无法修改查询或者参数化报表快照显示不同用户的自定义数据时,请使用报表筛选器。
选择设置筛选器的位置
筛选器的设置位置应根据您希望在报表中获得的效果来确定。在运行时,报表处理器按以下顺序应用筛选器:先对数据集,再对数据区域,最后对组,在每个组层次结构中按自上而下的顺序。在表、矩阵或列表中,对行组、列组和相邻组分别应用各自的筛选器。在图表中,对类别组和序列组分别应用各自的筛选器。报表处理器应用筛选器时,会按每个报表项**“属性”对话框的“筛选器”**页上定义的顺序应用所有筛选器公式,这等效于使用布尔 AND 操作组合所有筛选器公式。
下面的列表比较对不同报表项设置筛选器的效果:
对数据集:如果希望以相同方式筛选绑定到单个数据集的一个或多个数据区域,则可对数据集设置筛选器。例如,对同时绑定到显示销售数据的表和显示同一数据的图表的数据集设置筛选器。
对数据区域:如果希望绑定到单个数据集的一个或多个数据区域提供该数据集的不同视图,则可对数据区域设置筛选器。例如,对一个表数据区域设置筛选器以显示销售额排在前十名的商店,对另一个表数据区域设置筛选器以显示同一报表中销售额排在末十名的商店。
对 Tablix 数据区域中的行组或列组:如果希望组表达式包含或排除某些值以控制表、矩阵或列表中出现的组值,则可对组设置筛选器。
对 Tablix 数据区域中的详细信息组:如果一个数据区域中有多个详细信息组并且您希望每个详细信息组显示数据集中不同的一组数据,则可对详细信息组设置筛选器。
对图表数据区域中的序列组或类别组:如果希望组表达式包含或排除某些值以控制图表中出现的值,则可对序列组或类别组设置筛选器。
创建筛选器公式
在运行时,报表处理器会将值转换为指定数据类型,然后使用指定运算符来比较表达式和值。下面列出筛选器公式的每个部分:
表达式:定义对其进行筛选的内容。通常为数据集字段。
数据类型:指定在运行时报表处理器计算筛选器公式时所用的数据类型。您所选择的数据类型必须是报表定义架构支持的数据类型之一。
运算符:定义如何比较筛选器公式的两个部分。
值:定义要在比较中使用的表达式。
以下部分介绍筛选器公式的每个部分。有关筛选器公式的示例,请参阅筛选器公式示例 (Report Builder 2.0)。
表达式
当运行时报表处理器计算筛选器公式时,表达式和值的数据类型必须相同。为**“表达式”所选的字段的数据类型由从数据源检索数据时所用的数据处理扩展插件或数据访问接口确定。为“值”**输入的表达式的数据类型由 Reporting Services 默认值确定。所选数据类型由报表定义支持的数据类型确定。来自数据库的值可能由数据访问接口转换为 CLR 类型。有关详细信息,请参阅了解报表数据集 (Report Builder 2.0)。
数据类型
为使报表处理器能比较两个值,值的数据类型必须相同。下表列出了 CLR 数据类型和报表定义数据类型之间的映射。从数据源中检索的数据可能转换为与作为报表数据时不同的数据类型。有关详细信息,请参阅了解报表数据集 (Report Builder 2.0)。
报表定义架构数据类型 |
CLR 类型 |
---|---|
Boolean |
Boolean |
DateTime |
DateTime,DateTimeOffset |
Integer |
Int16, Int32, UInt16, Byte, SByte |
Float |
Single, Double, Decimal |
Text |
String, Char, GUID, Timespan |
必须指定数据类型时,您可以在表达式的 Value 部分指定您自己的转换。
运算符
下表列出了可在筛选器公式中使用的运算符,以及报表处理器用于计算筛选器公式的内容。
运算符 |
操作 |
---|---|
Equal, Like, NotEqual, GreaterThan, GreaterThanOrEqual, LessThan, LessThanOrEqual |
将表达式与一个值进行比较。 |
TopN, BottomN |
将表达式与一个 Integer 值进行比较。 |
TopPercent, BottomPercent |
将表达式与一个 Integer 或 Float 值进行比较。 |
Between |
测试表达式是否在两个值之间(含这两个值)。 |
In |
测试表达式是否包含在一组值中。 |
值
Value 表达式指定筛选器公式的最后一部分。报表处理器会将计算后的表达式转换为指定的数据类型,然后计算整个筛选器公式以确定表达式中指定的数据是否通过了筛选器的筛选。
若要转换为非标准 CLR 数据类型的数据类型,必须修改表达式以显式转换为该数据类型。您可使用**“表达式”对话框的“常见函数”下的“转换”**中列出的转换函数。例如,对于 ListPrice 字段,该字段表示 SQL Server 数据源中以 money 数据类型存储的数据,数据处理扩展插件将以 System..::..Decimal 数据类型返回该字段值。若要将筛选器设置为仅使用报表货币中大于 $50000.00 的值,则可使用表达式 =CDec(50000.00) 将该值转换为 Decimal 类型。
此值还可以包括参数引用,以允许用户以交互方式选择作为筛选依据的值。有关详细信息,请参阅筛选器公式示例 (Report Builder 2.0)。