在 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 内置函数

您可使用表达式引用大量来自表达式的内置报表函数。这些函数既包括 SumMinMaxCount 之类的用于计算行分组值的标准聚合函数,也包括 RowNumberRunningValue 之类的在详细信息行中使用以提供每行的值的函数。

  • 使用聚合函数 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.ConvertSystem.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 集合,还可创建引用下列集合中各项的表达式:GlobalsUserParametersReportItemsDataSetsDataSources。当在表达式中使用时,这些集合可访问在报表处理过程中动态确定的报表属性和数据。有关详细信息,请参阅在表达式中使用全局集合 (Reporting Services)

使用区域设置

您可以使用表达式通过 User.Language 值来引用客户机上的区域设置,从而确定如何向用户显示报表。例如,可创建基于区域值而使用不同查询表达式的报表。查询可以根据返回的语言发生相应更改,从不同的列中检索本地化信息。您还可以根据此变量在报表或报表项的语言设置中使用表达式。

ms345242.note(zh-cn,SQL.90).gif注意:
在更改报表的语言设置时,必须注意由此引发的显示问题。例如,更改报表的区域设置可以更改报表的日期格式,但也可以更改货币格式。除非对货币进行适当的转换,否则上述更改可能导致在报表中显示错误的货币符号。要避免这种情况,可对要更改的各个报表项设置语言信息,或将包含货币数据的项设置为特定语言。

请参阅

任务

如何添加表达式(报表设计器)

参考

Reporting Services 中的表达式示例

概念

报表布局帮助主题

其他资源

编辑表达式(报表设计器)

帮助和信息

获取 SQL Server 2005 帮助