在表达式中使用内置报表函数和聚合函数 (Reporting Services)

Reporting Services 提供了用于表达式的内置函数,以便计算数据集、数据区域和组中的聚合数据和检索其他数据值,例如报表页的第一个或最后一个值。数值字段的默认聚合函数是 SUM。在**“表达式”对话框的“常见函数”中,选择类别“聚合”**可以选择其他函数。

当报表数据和报表布局在运行时组合在一起时,报表处理器会为表达式中的每个函数引用确定默认作用域。默认作用域可以是数据集、数据区域、Tablix 组(父级、子级、相邻或递归)、Tablix 行组和列组的交集或者图表组(序列、类别、值)。对于多数函数,您都可以在函数调用中指定与默认作用域不同的作用域。若要确定函数的有效作用域,请参阅各个函数参考主题。例如,请参阅计算总计和其他聚合 (Reporting Services)

下表列出了 Reporting Services 所支持的内置函数的类别:

  • 计算聚合

  • 计算运行值

  • 检索行计数

  • 从另一个数据集中查找值

  • 检索依赖排序的值

  • 检索服务器聚合

  • 检索递归级别

  • 测试作用域

了解作用域

在 Reporting Services 中,依据上下文,术语“作用域”可以指示不同的概念。下面的列表对不同的概念进行了说明:

  • 报表处理中报表项的作用域。当报表数据和报表布局在运行时组合在一起时,系统会处理所有报表项。处理 Tablix 行组和列组时,会从外部将 Tablix 数据区域处理成具有更多限制的数据集。从这个意义上讲,组包含在数据区域中。子组及其同级包含在其父组中。例如,组的切换项必须为处于同一组作用域或任何包含组作用域内的文本框。有关详细信息,请参阅本主题稍后部分中的了解包含作用域。

  • 聚合函数的作用域。报表处理器会在命名作用域或默认作用域内计算每一个聚合表达式,如下面的列表所述。

    • 命名作用域可以是数据集、数据区域或组的名称。

    • 默认作用域取决于报表处理器所计算的报表项属性。例如,对于具有行组和列组的数据区域中的 Tablix 单元格,默认的作用域是该单元格所属的最内部行组和列组。对于不具有组的表中的单元格,默认的作用域是详细信息组。在设计图面上,Tablix 数据区域提供了有助于确定单元格的可用作用域的可视元素。组图条显示在 Tablix 数据区域的上方和侧面,以显示哪些行或列属于该组。选中一个单元格后,组指示器会显示该单元格所属的活动的最内部组。有关详细信息,请参阅使用 Tablix 数据区域

      设计图面上的文本框没有默认作用域。您必须指定要使用的数据集的名称,例如 =First(Fields!Sales.Value,"Dataset1")。

      调用内置函数并指定命名作用域时,请检查函数引用以确定哪些作用域是有效的。例如,对于 Sum,您可以指定默认作用域或一个包含作用域。

了解包含作用域

下列作用域列出了从最外部(较高)到最内部(较低)的包含顺序,并且说明了它们所表示的数据:

  • 报表数据集:指定链接到数据区域或报表正文中的报表项的报表数据集。用于聚合的数据来自应用了数据集筛选表达式后的报表数据集。

  • 数据区域:指定应用数据区域筛选器和排序表达式后的数据区域中的数据。为数据区域计算聚合时,不使用组筛选器。

  • 行组和列组:指定对父组和子组应用组表达式和组筛选器后的数据。为了标识作用域包容内容,每个父组都应包含其子组。

  • 嵌套数据区域:指定已添加到单元格上下文中并应用了嵌套数据区域筛选器和排序表达式的嵌套数据区域中的数据。

  • 嵌套数据区域的行组和列组:指定应用嵌套数据区域的组表达式和组筛选器后的数据。

当内置函数指示您必须指定当前作用域或一个包含作用域时,不能指定在包容顺序上级别比当前作用域低或与它同级的作用域。例如,在有子组的行组的一行中,不能将该子组的名称指定为作用域,也不能将同级行组指定为作用域。您必须使用默认的作用域或指定在包容顺序上级别更高的作用域。

备注

不能在一个表达式中跨行组和列组聚合值。不支持将作用域是行组的聚合和作用域是列组的另一聚合编写在同一表达式中。

筛选表达式

数据集和数据区域筛选表达式不能包含聚合函数。为数据区域计算聚合时,会忽略组筛选器。

计算聚合

下列内置函数为默认作用域或命名作用域中的一组非 Null 数值数据计算汇总值。用于聚合计算的所有数据都必须属于同一数据类型。若要将具有多个数值数据类型的数据转换为同一数据类型,请使用类似 CInt、CDbl 或 CDec 的转换函数。有关详细信息,请参阅 Type Conversion Functions(类型转换函数)。

若要使用这些函数计算递归层次结构组的汇总值,则必须指定 Recursive 参数。

函数

说明

Avg

返回在给定作用域中计算的,由表达式指定的所有非 Null 数值的平均值。

Count

返回在给定作用域上下文中计算的,由表达式指定的非 Null 值的计数。

CountDistinct

返回在给定作用域上下文中计算的,由表达式指定的所有非重复的非 Null 值计数。

Max

返回在给定作用域上下文中由表达式指定的所有非 Null 数值的最大值。可以使用此函数指定图表轴最大值以控制刻度。

Min

返回在给定作用域上下文中由表达式指定的所有非 Null 数值的最小值。可以使用此函数指定图表轴最小值以控制刻度。

StDev

返回在给定作用域中计算的,由表达式指定的所有非 Null 数值的标准偏差。

StDevP

返回在给定作用域上下文中计算的,由表达式指定的所有非 Null 数值的总体标准偏差。

Sum

返回在给定作用域中计算的、由表达式指定的所有非 Null 数值的和。

Union

返回在给定作用域中计算的、由表达式指定的 SqlGeometry 类型或 SqlGeography 类型的所有非 Null 的空间数据值的联合。

Var

返回在给定作用域中计算的,由表达式指定的所有非 Null 数值的方差。

VarP

返回在给定作用域上下文中计算的,由表达式指定的所有非 Null 数值的总体方差。

计算运行值

以下内置函数计算一组数据的运行值。RowNumber 类似于 RunningValue,它将返回计数的运行值,该计数针对包含作用域中的每一行进行递增。这些函数的作用域参数必须指定包含作用域,用于控制计数开始的时间。

函数

说明

RowNumber

返回指定作用域内行数的运行计数。RowNumber 函数从 1 开始重新计数,而不是从 0 开始。

RunningValue

返回在给定作用域中计算的,由表达式指定的所有非 Null 数值的运行聚合。

检索行计数

下列内置函数计算给定作用域内的行数。使用此函数可以对所有行进行计数,包括含有 Null 值的行。

函数

说明

CountRows

返回指定作用域内的行数,包括含有 Null 值的行。

从另一个数据集中查找值

下面的查找函数从指定数据集中检索值。

函数

说明

Lookup

从指定表达式的数据集中返回一个值。

LookupSet

从数据集中返回指定表达式的一组值。

Multilookup 函数

从包含名称/值对的数据集中返回一组名称的第一个匹配值的集合。

检索依赖排序的值

下列内置函数返回给定作用域内第一个、最后一个或以前的值。这些函数依赖数据值的排序顺序。例如,可以使用这些函数查找页上的第一个和最后一个值来创建字典样式页眉。使用 Previous 可以将指定作用域内某一行中的值与该行以前的值进行比较,例如,使用它可以查出表中的年度同比百分比值。

函数

说明

First

返回指定表达式的给定作用域中的第一个值。

Last

返回指定表达式的给定作用域中的最后一个值。

Previous

返回指定作用域内某项的前一个实例的值或该实例的指定聚合值。

检索服务器聚合

下列内置函数从数据访问接口中检索自定义聚合。例如,使用 Analysis Services 数据源类型可以检索在用于组头的数据源服务器上计算的聚合。

函数

说明

Aggregate

按照数据访问接口的定义返回指定表达式的自定义聚合。

测试作用域

下列内置函数测试报表项的当前上下文,以确定该报表项是否是特定作用域的成员。

函数

说明

InScope

指示项的当前实例是否在指定的作用域内。

检索递归级别

下列内置函数检索处理递归层次结构时的当前级别。此函数的结果与文本框中的 Padding 属性配合使用可以控制递归组可视层次结构的缩进级别。有关详细信息,请参阅创建递归层次结构组 (Reporting Services)

函数

说明

Level

返回在递归层次结构中的当前深度级别。

请参阅

概念

使用报表表达式

使用表达式 (Reporting Services)

计算总计和其他聚合 (Reporting Services)