在 Reporting Services 中使用表达式
新建日期: 2005 年 12 月 5 日
在 Reporting Services 中,表达式用于动态地、灵活地控制报表的内容和外观。有些表达式是自动创建的。例如,当创建新报表并将字段从数据集拖动到报表项时,文本框的值将自动设置为按名称引用数据集字段的表达式。在报表处理过程中,每个表达式都计算出在报表呈现时可替换该表达式的一个值。同时,在整个报表定义过程中,表达式还被用来指定或计算报表项属性、文本框属性、参数、查询、书签、文档结构图、筛选器以及分组和排序定义的值。
可以在文本框、属性窗口中输入文本或通过对话框创建报表项的表达式。表达式是以 Microsoft Visual Basic 编写的。表达式以等号 (=) 开头,其中包括对常量、运算符、函数以及包含字段和参数的内置报表全局集合的引用。也可以创建对报表处理以外的 .NET Framework 类、自定义代码以及程序集的引用。有关创建表达式的详细信息,请参阅在 Reporting Services 中创建表达式。
本主题概述了报表定义中可使用表达式的位置。本主题中的示例以创建基本报表教程中所创建的 AdventureWorks 数据集为基础。若要从这些示例开始学习,请参阅Reporting Services 中的表达式示例。
使用字段表达式
可以使用表达式引用数据集中的字段,并在文本框中显示它的值。若要将检索的数据与报表项进行关联,字段表达式必须使用 Fields 全局集合、字段名称和 Value 属性。
- 如果将字段从数据集窗口拖动到报表项,则字段表达式将自动添加到文本框中。
示例:
=Fields!LastName.Value
结果:
Reiter
Reiter
Saraiva
- 可以将多个字段或常量中的数据进行组合。
示例:
=Fields!FirstName.Value & " " & Fields!LastName.Value
结果:
Tsvi Reiter
Tsvi Reiter
Jose Saraiva
有关可在表达式中使用的所有引用类型的列表,请参阅在 Reporting Services 中创建表达式。
使用 Reporting Services 内置函数
您可使用表达式引用大量来自表达式的内置报表函数。这些函数既包括 Sum、Min、Max 和 Count 之类的用于计算行分组值的标准聚合函数,也包括 RowNumber 和 RunningValue 之类的在详细信息行中使用以提供每行的值的函数。
- 使用聚合函数 Count 计算名为 SalesOrder 的数据集的 LastName 字段中的姓氏数目。尽管可将表达式放在表的详细信息行中,但还是会看到在 3906 行的每一行中都输入了相同的值。聚合函数旨在用于汇总详细信息行,通常在数据区域或数据区域分组的表头行或表尾行的文本框中使用。
示例:
="Number of Names: " & Count(Fields!LastName.Value)
结果:
Number of Names: 3906
- 使用聚合函数 Sum 汇总 TotalDue 字段。将其放在表的表尾行中。请注意,此值未设置格式。
示例:
="Total Sold: " & Sum(Fields!TotalDue.Value)
结果:
Total Sold: 108266245.7018
- 使用 Format 函数和 Microsoft .NET Framework 格式设置字符串 C 设置数值的格式。
示例:
="Total Sold: " & Format(Sum(Fields!TotalDue.Value),"C")
结果:
Total Sold: $108,266,245.70
- 使用 RowNumber 函数计算行数。
示例:
=RowNumber(Nothing)
结果:
1
2
3
- 使用 RunningValue 聚合指定范围内的运行总计。
示例:
=Format(RunningValue(Fields!TotalDue.Value,Sum,Nothing),"C")
结果:
$27,231.55
$28,947.73
有关可从表达式中引用的报表内置函数的完整列表,请参阅在表达式中使用报表函数 (Reporting Services)。
作用域
因为可能已经定义了多个组,所以可指定聚合函数将使用的作用域。作用域是可传递给聚合函数以指示如何计算聚合的名称。例如,对于定义了多个组的表,可能需要从内部组表头行引用外部组。Nothing 作用域将通知函数使用最外面的作用域。对于没有分组的简单表数据区域,只有一个作用域。
若要标识对于报表项分组有效的作用域,请打开**“属性”对话框,单击“分组”**选项卡,查看可用于标识作用域的组标签列表。
使用 .NET Framework 和系统命名空间
可使用表达式引用 Microsoft.VisualBasic 运行时库的内置命名空间、.NET Framework 命名空间 System.Convert 和 System.Math。若要引用其他 .NET Framework CLR(公共语言运行时)命名空间,必须使用完全限定的命名空间,例如 System.Text.StringBuilder。对于外部程序集的引用,则需要通过报表属性来标识程序集,并确保可在报表服务器中使用此程序集。有关详细信息,请参阅如何向报表添加程序集引用(报表设计器)和Referencing Assemblies in an RDL File。
使用自定义代码和类引用
可使用表达式引用自己的自定义实例和类实例。为此,可通过报表属性将代码直接添加到报表中,或生成自定义程序集,然后从表达式内部引用此程序集。有关详细信息,请参阅在表达式中使用自定义代码引用 (Reporting Services)。
使用条件格式
可以使用表达式来控制报表项的外观。例如,可以为用于以不同颜色(具体取决于数据)显示数据的文本框的 Color 属性编写表达式。下面的示例中,如果 TotalDue 字段中的值小于 10000,则将以红色显示此值。如果条件不满足,则文本显示为黑色。
=Iif(Fields!TotalDue.Value < 10000,"Red","Black")
若要为报表项输入格式设置表达式,请打开“属性”窗口,针对要设置格式的属性,在值字段中键入表达式。有关条件格式的详细信息,请参阅添加条件格式。
使用查询表达式
可使用表达式定义包含在数据集内的查询。您可以使用此功能来设计报表,报表中的查询可以根据用户的输入、其他数据集中的数据或其他变量进行更改。有关查询的详细信息,请参阅定义报表数据集。
使用筛选、分组和排序表达式
可使用表达式定义筛选器,从而限制报表中显示的数据量和数据类型。筛选器应用于从数据源中检索的数据。您可以针对数据集、数据区域和数据区域分组定义筛选器。有关筛选的详细信息,请参阅如何添加筛选器(报表设计器)和筛选报表中的数据。
可使用表达式为数据区域定义组。您经常使用表达式计算分组数据的聚合。可通过在数据区域上创建组头来定义组。有关分组数据的详细信息,请参阅对报表中的数据进行分组和如何向表中添加组(报表设计器)。
可使用表达式定义数据区域的排序。可对数据集、数据区域上的详细信息行和分组进行排序。有关数据排序的详细信息,请参阅在报表是对数据进行排序和如何对表中的数据进行排序(报表设计器)。
使用内置报表集合
可使用表达式引用内置报表集合类。除了前面介绍的 Fields 集合,还可创建引用下列集合中各项的表达式:Globals、User、Parameters、ReportItems、DataSets 和 DataSources。当在表达式中使用时,这些集合可访问在报表处理过程中动态确定的报表属性和数据。有关详细信息,请参阅在表达式中使用全局集合 (Reporting Services)。
使用区域设置
您可以使用表达式通过 User.Language 值来引用客户机上的区域设置,从而确定如何向用户显示报表。例如,可创建基于区域值而使用不同查询表达式的报表。查询可以根据返回的语言发生相应更改,从不同的列中检索本地化信息。您还可以根据此变量在报表或报表项的语言设置中使用表达式。
注意: |
---|
在更改报表的语言设置时,必须注意由此引发的显示问题。例如,更改报表的区域设置可以更改报表的日期格式,但也可以更改货币格式。除非对货币进行适当的转换,否则上述更改可能导致在报表中显示错误的货币符号。要避免这种情况,可对要更改的各个报表项设置语言信息,或将包含货币数据的项设置为特定语言。 |