在表达式中使用数据集字段集合引用 (Report Builder 2.0)

报表中的每个数据集都包含一个 Fields 集合。Fields 集合由数据集查询指定的字段集以及您创建的任何其他计算字段组成。创建数据集后,字段集合将显示在**“报表数据”**窗格中。

表达式中的简单字段引用在设计图面上显示为简单表达式。例如,将字段 Sales 从“报表数据”窗格拖到设计图面上的表单元时,Reporting Services 将显示 [Sales]。这表示对文本框 Value 属性设置的是基础表达式 =Fields!Sales.Value。运行报表时,报表处理器会计算此表达式,并在表单元的文本框中显示数据源中的实际数据。有关详细信息,请参阅了解简单表达式和复杂表达式 (Report Builder 2.0)使用报表数据集中的字段 (Report Builder 2.0)

显示数据集的字段集合

若要显示字段集合的各个值,可将每个字段拖到表详细信息行,并运行报表。表详细信息行或列表数据区域中的引用将显示数据集中每一行的值。

若要显示字段的汇总值,可将每个数值字段都拖到矩阵的数据区域中。总计行的默认聚合函数为 Sum,例如,=Sum(Fields!Sales.Value)。可以更改默认函数以便计算不同的总计。有关详细信息,请参阅在表达式中使用内置报表函数和聚合函数 (Report Builder 2.0)

若要在设计图面(而非数据区域的一部分)的文本框中直接显示字段集合的汇总值,必须将数据集名称指定为聚合函数的作用域。例如,对于名为 SalesData 的数据集,以下表达式指定了字段 Sales 所有值的总计:=Sum(Fields!Sales,"SalesData")。

使用**“表达式”对话框定义简单字段引用时,可以在“类别”窗格中选择 Fields 集合,并查看“字段”**窗格中的可用字段列表。每个字段都具有多个属性,包括 ValueIsMissing。其余属性是数据集可能可用的预定义扩展字段属性,具体取决于数据源类型。

检测数据集字段的 Null 值

若要检测为 Null(在 Visual Basic 中为 Nothing)的字段值,可使用函数 IsNothing。当以下表达式放置在表详细信息行的文本框中时,将测试字段 MiddleName。如果值为 Null,则显示文本“No Middle Name”,如果值不为 Null,则使用该字段值本身:

=IIF(IsNothing(Fields!MiddleName.Value),"No Middle Name",Fields!MiddleName.Value)

在运行时检测动态字段的缺失字段

默认情况下,Fields 集合中的项有两个属性:ValueIsMissingIsMissing 属性指示设计时为数据集定义的字段是否包含在运行时检索到的字段中。例如,查询可能调用一个结果集随输入参数变化的存储过程,或者查询可能为 SELECT * FROM <table>,其中表定义会发生变化。

注意注意

IsMissing 可针对任何类型的数据源检测在设计时和运行时数据集架构中的更改。IsMissing 不能用于检测多维数据集中的空成员,并且与 EMPTY 和 NON EMPTY MDX 查询语言概念无关。

您可以使用自定义代码测试 IsMissing 属性以确定某个字段是否存在于结果集中。不能使用包含 Visual Basic 函数调用(如 IIF 或 SWITCH)的表达式测试字段是否存在,因为 Visual Basic 会计算函数调用中的所有参数,这将导致计算对缺失字段的引用时出错。

控制缺失字段动态列的可见性的示例

若要设置一个表达式,用于控制显示数据集中某个字段的列可见性,必须首先定义一个自定义代码函数,该函数根据该字段是否缺失返回一个布尔值。例如,如果该字段缺失,则以下自定义代码函数将返回 True,如果该字段存在,则返回 False。

Public Function IsFieldMissing(field as Field) as Boolean
 If (field.IsMissing) Then
 Return True
  Else 
  Return False
 End If
End Function

若要将此函数用于控制列的可见性,请将列的 Hidden 属性设置为以下表达式:

=Code.IsFieldMissing(Fields!FieldName)

当字段不存在时将隐藏该列。

控制缺失字段的文本框值的示例

若要使用您编写的文本来代替缺失字段的值,必须编写自定义代码,以便在字段缺失时返回可用于代替字段值的文本。例如,如果该字段存在,则以下自定义代码函数将返回该字段的值,如果该字段不存在,则返回指定为第二个参数的消息:

Public Function IsFieldMissingThenString(field as Field, strMessage as String) as String
 If (field.IsMissing) Then
  Return strMessage
 Else 
  Return field.Value
  End If
End Function

若要在文本框中使用此函数,请将以下表达式添加到 Value 属性:

=Code.IsFieldMissingThenString(Fields!FieldName,"Missing")

文本框显示字段值或您指定的文本。

使用扩展字段属性

扩展字段属性是由数据处理扩展插件为字段定义的其他属性,这些属性由数据集的数据源类型确定。扩展字段属性可以是预定义的,也可以特定于某个数据源类型。

预定义属性是常用的字段属性,例如,KeyUniqueName。Reporting Services 会将数据源中可用的属性映射到这些预定义字段。预定义属性显示在**“表达式”**对话框的 IntelliSense 列表中。当您使用字段集合语法键入字段的名称时,将显示可用属性的下拉列表。对预定义属性使用简单的字段引用语法,例如,=Fields!Sales.Value。

特定于某种数据源类型的属性不会显示在**“表达式”**对话框中,但可在使用与数据源关联的查询设计器浏览该数据源时确定。可使用集合语法 =Fields!FieldName("Property") 引用任何扩展字段属性。有关扩展字段属性的示例,请参阅为 Analysis Services 数据库使用扩展字段属性 (Report Builder 2.0)。有关支持扩展字段属性的访问接口,请参阅从 SQL Server Analysis Services 创建报表数据集 (Report Builder 2.0)从 SAP NetWeaver BI 数据源创建报表数据集 (Report Builder 2.0)从 Hyperion Essbase 数据源创建报表数据集 (Report Builder 2.0)

如果指定了该字段不支持的属性,则表达式的计算结果为 null(在 Visual Basic 中为 Nothing)。如果数据访问接口不支持扩展字段属性,或在执行查询时找不到该字段,则对于 String 和 Object 类型的属性,属性值为 null(在 Visual Basic 中为 Nothing);对于 Integer 类型的属性,属性值为零 (0)。数据处理扩展插件可以通过优化包括此语法的查询来充分利用预定义属性。