在表达式中使用全局集合 (Reporting Services)

更新日期: 2006 年 4 月 14 日

Reporting Services 提供了下列可以从表达式中引用的全局集合:DataSourcesDataSetsFieldsGlobalsParametersReportItemsUser。若要从表达式中引用集合,可以将标准 Visual Basic 语法用于集合中的项。下面的列表提供了此语法的示例:

  • Collection!ObjectName.PropertyCollection!ObjectName("Property")
    =Fields!Sales.Value
    =Fields!Sales("Value")
  • Collection("ObjectName").Property
    =Fields("Sales").Value
  • Collection("Member")
    =User("Language")
  • Collection.Member
    =User.Language

全局集合摘要

下表说明了可以从表达式中引用集合时的每一个全局集合和注释。在本节的后面主题中将单独讨论每一个全局集合。

全局集合 示例 说明

Fields

=Fields!Sales.Value

表示可用于报表的数据集的字段集合。将数据从数据源检索到数据集中之后可用。

ReportItems

=ReportItems("Textbox1").Value

表示用于报表项的文本框(如表数据区域、页眉或页脚中包含的文本框)集合。在报表处理过程中可用。

Globals

=Globals.ReportName

表示对报表有用的全集变量,如报表名称或页码。始终可用。

Parameters

=Parameters("ReportMonth").Value

- 或 -

=Parameters!ReportYear.Value

表示报表参数的集合,每一个参数都可以为单值或多值。直到处理初始化完成之后才可用。创建查询参数时,它们将自动添加到报表参数集合中。

User

=User.UserID

- 或 -

User.Language

表示与运行报表的用户有关的数据的集合,如语言设置或用户 ID。始终可用。User!UserID 经常用于在报表中筛选结果。

DataSources

=DataSources("AdventureWorks").Type

表示从报表的主体中引用的数据源集合。不包括仅在页眉或页脚中使用的数据源。无法在本地预览中使用。

DataSets

=DataSets("TopEmployees").CommandText

表示从报表定义的主体中引用的数据集的集合。不包括仅在页眉或页脚中使用的数据源。无法在本地预览中使用。

GlobalsUsers 集合的成员将返回变量。如果要在表达式中使用要求特定数据类型的全局变量,则必须先转换该变量。例如,若要将执行时间变量转换为数据格式,请使用 CDate(Globals!ExecutionTime)。有关详细信息,请参阅Reporting Services 中的表达式示例

字段

报表中的每个数据集都包含一个 Fields 集合。这是您在“数据集”窗口中展开数据集节点时看到的字段集合。该 Fields 集合通常用于显示报表的文本框中的数据,但也可以用于其他报表项、属性和函数中。字段名称在一个集合内必须唯一,不过同一字段名称可以在多个集合中存在。

某些数据处理扩展插件会自动确定为数据集定义的查询中的字段集合。单击工具栏上的**“刷新字段”按钮时,更改将被保存到报表定义中,并且“数据集”窗口会被更新,以显示这些更改。若要编辑字段定义,请在报表设计器的“数据”视图中选择数据集,以打开“数据集”对话框,然后单击“字段”选项卡。若要添加计算字段,请右键单击“数据集”窗口中的数据集,以打开“添加新字段”对话框,并键入名称。然后单击“计算字段”**并输入表达式。

处理报表期间,由于每个报表项是轮流进行处理的,因此与当前报表项关联的 Fields 集合绑定至基础源数据。处理报表时,为特定字段返回的数据可以是单个值,也可以是与数据集中的每一行对应的值。获得单个值还是多个值由包含字段引用的报表项类型确定。数据区域(表、矩阵、列表或图表)中的引用为数据集中的每一行都返回一个值。不是数据区域一部分的引用返回单个值。

使用聚合报表函数处理数据集中的字段集合时,可以包括用于指定数据集的 scope 参数。若要验证报表项与数据集的关联,请选择报表项并查看其属性。有关报表函数和作用域参数的详细信息,请参阅在表达式中使用报表函数 (Reporting Services)

默认情况下,Fields 集合中的项有两个属性:ValueIsMissing。将某一字段从**“数据集”**窗口拖至报表布局的报表项上时,默认情况下,报表项的内容将设置为该字段的 Value 属性。对于数据区域,数据集中的每一行的值都被设置为 =Fields!FieldName.Value。不属于数据区域的报表项的内容被设置为单个值,如 =First(Fields!FieldName.Value)

IsMissing 属性指示为数据集定义的字段是否包含于从数据源检索的字段中。可以使用 Visual Basic 在字段表达式中对此字段进行测试。缺失字段的 Value 属性为空(在 Visual Basic 中为 Nothing)。下面的示例(置于要用于显示字段数据的报表项文本框中时)说明如何测试缺失的字段:

=IIF(Fields!FieldName.IsMissing, "Field was not returned by query", Fields!FieldName.Value))

由于 Visual Basic 函数 IIF 先计算语句的所有元素,然后返回结果,因此对缺失字段的引用可能会导致处理错误。下面的示例说明如何创建引用可能缺失字段的 Visual Basic 函数调用:

=IIF(Sum(Fields!FieldName.Value) IS NOTHING, 0, Sum(Fields!FieldName.Value))

使用表达式编辑器帮助生成引用字段的表达式时,可以选择第一个窗格中的 Fields 集合,并查看最后一个窗格中的可用字段列表。下图显示了名为 Employees 的数据集的字段 FirstName

具有 Intellisense 功能的“编辑表达式”对话框

注意 IntelliSense 窗口中可用的属性列表。此列表包括默认属性 ValueIsMissing。其余的属性是其他数据处理扩展插件支持的预定义扩展字段属性。

扩展字段属性

扩展字段属性是由数据处理扩展插件在字段中定义的附加属性。扩展字段属性的子集是预定义的。预定义属性是常用的字段属性。Key 字段和 UniqueName 字段是典型示例。这些预定义属性出现在 IntelliSense 列表中,而且可以使用集合语法 Fields!FieldName.Property 进行引用。数据处理扩展插件可以选择通过优化包括此语法的查询来充分利用预定义属性。

您还可以引用受特定数据处理扩展插件支持的其他扩展字段属性。这些属性不会出现在“表达式”窗口中,但是可以通过浏览数据源(通过已注册的数据处理扩展插件及其关联的查询设计器)来加以确定。任何扩展字段属性均可使用集合语法 Fields!FieldName("Property") 进行引用。

如果数据访问接口不支持扩展字段属性,或在执行查询时找不到该字段,则属性的类型为 StringObject 时,属性值为 null(在 Visual Basic 中为 Nothing);属性的类型为 Integer 时,属性值为零 (0)。

如果数据扩展插件提供了自定义字段属性,则无论字段是否支持此属性,对于数据集中的所有字段,这些属性都将在表达式编辑器的下拉列表中可见。如果向此字段不支持的属性添加引用,则引用取值为 null(在 Visual Basic 中为 Nothing)。有关支持扩展字段属性的访问接口的示例,请参阅为 Analysis Services 多维数据和数据挖掘预测数据定义报表数据集为 SAP NetWeaver BI 系统中的多维数据定义报表数据集

Globals

Globals 集合包含报表的全局变量。下表对 Globals 集合的成员进行了说明。

成员 类型 说明

ExecutionTime

DateTime

报表开始运行的日期和时间。

PageNumber

Integer

当前页码。该变量只能用在表头和表尾中。

ReportFolder

String

包含报表的文件夹的完整路径。它不包括报表服务器 URL。

ReportName

String

报表存储在报表服务器数据库中的名称。

ReportServerUrl

String

正在运行该报表的报表服务器的 URL。

TotalPages

Integer

报表中的总页数。该变量只能用在表头和表尾中。

全局变量的示例如下:

  • 此表达式位于报表表尾的文本框中,提供了报表的页码和总页数:
    =Globals.PageNumber & " of " & Globals.TotalPages
  • 此表达式提供了报表的名称以及运行时间。其时间格式为短日期形式的 Microsoft .NET Framework 格式设置字符串:
    =Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")

Parameters

Parameters 集合包含报表中的报表参数对象。参数可以传递给查询,也可以用在筛选器中,或用在根据该参数改变报表外观和内容的其他函数中。定义查询参数时,它们将自动添加到报表参数集合中。下表说明了 Parameter 中定义的属性:CountIsMultiValueValueLabel

属性 说明

Count

指示集合中参数的数量的整数。

IsMultiValue

将此参数标识为具有一组值的布尔值。

Value

参数值。对于多值参数,Value 返回一组对象。

Label

用于此参数的用户友好标签。如果未指定标签,则 Label 属性的值和 Value 属性的值相同。如果有多个 Label 与同一个 Value 关联,则使用第一个匹配的 Label。对于多值参数,Label 返回一组对象。

参数既可以通过属性语法访问,也可以通过集合语法访问。以下表达式显示了如何访问 Parameters 集合的每一个成员,以及当放置在报表项的文本框中时如何显示参数 ProductSubCategory 的内容。

="IsMultiValue: " & Parameters!ProductSubCategory.IsMultiValue.ToString() 
& " Count:" & Parameters!ProductSubCategory.Count & " Values: " 
& Join(Parameters!ProductSubCategory.Value,", ") & " Labels: " 
& Join(Parameters!ProductSubCategory.Label,", ")

有关详细信息,请参阅在 Reporting Services 中使用参数

ReportItems

ReportItems 集合包含报表内的文本框。ReportItems 集合内的项只有一个属性:ValueReportItems 项的值可以用于显示或计算报表中其他字段的数据。若要访问当前文本框的值,可以使用 Visual Basic 内置全局 Me.Value 或仅使用 Value。但是,在报表函数(如 First)和聚合函数中应使用完全限定语法。

例如:

  • 以下表达式位于文本框中,显示名为 Textbox1 的 ReportItem 文本框的值:
    =ReportItems("Textbox1").Value
  • 以下表达式放置在 ReportItem 文本框 Color 属性中,在值为 > 0 时以黑色显示文本,否则将以红色显示文本:
    =iif(Me.Value > 0,"Black","Red")
  • 以下表达式放置在页眉或页脚内的文本框中,显示呈现的报表每一页中名为 LastName 的文本框的第一个值:
    =First(ReportItems("LastName").Value)

User

User 集合包含运行报表的用户的有关数据。您可以使用此集合筛选报表中显示的数据,例如仅显示当前用户的数据或显示 UserID(如在报表标题中)。以下表达式放置在文本框中,将静态文本与变量用户数据组合起来:

=Globals!ReportName & " for " & User!UserID

下表对 User 集合的成员进行了说明。

成员 类型 说明

Language

String

运行报表的用户的语言。例如,en-US

UserID

String

运行报表的用户的 ID。如果您使用的是 Windows 身份验证,则此值为当前用户的域帐户。此值由 Reporting Services 安全扩展插件确定,该插件可以使用 Windows 身份验证,也可以使用自定义身份验证。

在某些情况下,包含 User!UserID 变量的报表将无法显示专用于查看报表的当前用户的报表数据。为了防止出现此问题,必须满足下列条件:

  • 报表必须是报表执行快照或报表历史快照。
  • 报表必须通过 SOAP 方法或通过报表 URL 地址以编程的方式进行访问。

当出现此问题时,报表快照中的用户配置文件信息将以下列两项之一为基础:

  • 创建报表快照的用户的标识。
  • 快照由报表服务器作为预定操作创建后报表服务器运行所用的帐户。
ms157274.note(zh-cn,SQL.90).gif重要提示:
如果无法基于用户配置文件信息更新报表快照,则会导致数据不正确,如果快照中包含敏感数据或机密数据,它则会造成安全隐患。

仅当通过 SOAP 调用或通过报表快照的 URL 地址打开报表快照时,用户配置文件才会出现问题。对于按需运行的报表以及所有通过报表管理器打开的报表快照,User!UserID 可以完全正常运行。有关如何使用 Web 服务方法和 URL 访问调用报表快照的详细信息,请参阅Using a URL to Access Report Server ItemsIdentifying Execution State

DataSources

DataSources 集合表示在已发布的报表定义中引用的数据源。在预览模式中获取的这些属性的值可能会不同于部署和查看已发布的报表时获取的值。

下表对 DataSources 集合中的变量进行了说明。

变量 类型 说明

DataSourceReference

String

报表服务器上数据源的完整路径。例如,/DataSources/AdventureWorks.

Type

String

数据源数据访问接口的类型。例如,SQL

数据集

DataSets 集合表示在报表定义中引用的数据集。此全局集合很少直接在报表中使用,但可用于报表设计器,以便访问用于从数据源中为每个数据集检索数据的查询命令。

下表对 DataSets 集合的成员进行了说明。

成员 类型 说明

CommandText

String

对于数据库数据源,为用于从数据源中检索数据的查询。如果查询是一个表达式,则为计算的表达式。

RewrittenCommandText

String

数据访问接口的扩展 CommandText 值。它通常用于报表,其中查询参数映射到报表参数。将命令文本参数引用扩展到为映射的报表参数选中的常量值时,此数据访问接口将设置此属性。

请参阅

任务

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

概念

了解报表布局和呈现方式
报表设计基础知识

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 4 月 14 日

更改的内容:
  • 已扩展字段内容。

2005 年 12 月 5 日

新增内容:
  • 添加了 Datasets 集合和 DataSources 集合。
更改的内容:
  • 修改了全局语法示例。