RDLC报表-ReportViewer 报表的常用表达式
有些表达式在报表中很常用。其中包括更改报表中的数据外观的表达式、计算总数的表达式和更改报表项属性的表达式。本主题介绍了报表中可用于常见任务的一些表达式。
报表中的许多表达式都包含函数。您可以编写使用 Microsoft.VisualBasic、System.Convert 和 System.Math
命名空间中的函数的表达式,或将引用添加到其他程序集或自定义代码中。还可以使用 Microsoft .NET Framework 中的类。有关详细信息,请参阅
.NET Framework SDK 类库文档。
函数
报表中的大部分函数为 Microsoft Visual Basic
函数或者内置报表函数。可以使用这些函数来设置数据格式、应用逻辑和访问报表元数据。
Visual Basic 函数
可以使用 Visual Basic 函数来操作文本框中所显示的数据,或者操作参数、属性或报表其他区域中所用的数据。本节举例说明了其中一些函数。有关
Visual Basic 函数的详细信息,请参阅 Visual Basic 文档。
日期函数
可以使用 Visual Basic 函数在报表中提供日期信息。
-
以下表达式包含 Today 函数,用于提供当前日期。此表达式可用在文本框中以在报表上显示日期,或用在参数中以根据当前日期筛选数据:
=Today()
-
如果要根据单个参数来提供日期范围,则可使用 DateAdd 函数。以下表达式提供了 StartDate 参数中的日期之后六个月的日期:
=DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
-
以下表达式包含了 Year
函数,用于显示特定日期所属的年份。可以使用此表达式将日期组合在一起,或者将年份作为一组日期的标签显示。此表达式为给定顺序的一组日期提供年份:
=Year(Fields!OrderDate.Value)
-
Month 函数和其他函数也可用于处理日期。有关详细信息,请参阅 Visual Basic 文档。
字符串函数
可以使用 Visual Basic 函数操作报表中的字符串。
-
可以使用 Format 函数来设置字符串中的日期和数字的格式。 The following expression displays values of
the StartDate and EndDate parameters in long date format:
=Format(Parameters!StartDate.Value, "D") & " through " &
Format(Parameters!EndDate.Value, "D")
如果文本框只包含日期或数字,则应当使用文本框的 Format 属性(而不是文本框中的 Format 函数)来应用格式。
-
Right、 Len 和 InStr 函数用于返回子字符串,例如,修整 DOMAIN\username 以只返回用户名。 The following
expression returns a portion of a string to the right of a backslash (\)
character from a parameter named User:
=Right(Parameters!User.Value, Len(Parameters!User.Value) -
InStr(Parameters!User.Value, "\"))
The following expression results in the same value as the previous one,
using members of the .NET Framework String class instead of Visual Basic
functions:
=Parameters!User.Value.Substring(Parameters!User.Value.IndexOf("\")+1,
Parameters!User.Value.Length-Parameters!User.Value.IndexOf("\")-1)
决策函数
可以使用 Visual Basic 函数来计算输入值并根据结果返回另一个值。
-
Iif 函数根据表达式的计算结果是否为 True 返回两个值中的一个。以下表达式使用了 Iif 函数,如果 LineTotal 的值超过
100,则返回布尔值 True,否则返回 False:
=Iif(Fields!LineTotal.Value > 100, True, False)
以下表达式使用了多个 Iif 函数(也称为“嵌套 Iif 函数”),根据 PctComplete 的值返回三个值中的一个。
=Iif(Fields!PctComplete.Value >= .8, "Green",
Iif(Fields!PctComplete.Value >= .5, "Amber", "Red"))
-
以下表达式也是根据 PctComplete 的值返回三个值中的一个,不过使用的是 Switch 函数,该函数返回的是多个表达式中计算结果为 True
的第一个表达式的值:
=Switch(Fields!PctComplete.Value >= .8, "Green",
Fields!PctComplete.Value >= .5, "Amber", Fields!PctComplete.Value <
.5, "Red")
报表函数
Reporting Services 提供了可用于操作报表中的数据的其他报表函数。本节举例说明了其中两个函数。有关报表函数和示例的详细信息,请参阅 ReportViewer
报表的内置函数。
-
Sum 函数可计算某一分组或数据区域中多个值的和。此函数可用于表格组的页眉或页脚中。以下表达式显示了订单分组或数据区域中数据的和:
=Sum(Fields!LineTotal.Value, "Order")
-
如果将包含 RowNumber
函数的表达式用于数据区域中的文本框中,则该表达式将显示表达式所在文本框的每个实例的行号。此函数可用于给表格中的各行加编号。还可以将其用于更复杂的情况,例如,根据行号提供分页符。有关详细信息,请参阅本主题中后面的“分页符”。
以下表达式显示了从最外面数据区域的第一行到最后一行的行号。Nothing
关键字表示函数将从最外面数据区域的第一行开始计数。若要从子数据区域开始计数,可使用数据区域的名称。
=RowNumber(Nothing)
报表数据的外观
可以使用表达式来控制数据在报表上的显示形式。例如,可以在一个文本框中显示两个字段的值、显示报表的有关信息或影响报表中分页符的插入方式。
页眉和页脚
在设计报表时,可能需要在报表的页脚显示报表名称和页码。为此,可使用以下表达式:
-
以下表达式提供了报表的名称以及它的运行时间。可以将该表达式放入报表页脚或表体的文本框中。 The time is formatted with the
.NET Framework formatting string for short date:
=Globals.ReportName & ", dated " &
Format(Globals.ExecutionTime, "d")
-
以下表达式位于报表页脚的文本框中,提供了报表的页码和全部页。
=Globals.PageNumber & " of " & Globals.TotalPages
也可以在报表页眉或页脚中引用表体中的报表项。以下示例说明了如何在页眉中显示页面中的第一个值和最后一个值,类似于目录列表的形式。该示例假定存在一个包含名为
LastName 的文本框的数据区域。
-
以下表达式位于页眉左侧的文本框中,提供了页面上 LastName 文本框的第一个值:
=First(ReportItems!LastName.Value)
-
The following expression, placed in a textbox on the right side of the page
header, provides the last value of the LastName text box on the page:
=Last(ReportItems!LastName.Value)
可以对页眉或页脚中所引用的报表项应用聚合函数。(不过,不能对表体中所引用的报表项应用聚合函数。)以下示例说明了如何显示页总页数。该示例假定存在一个包含名为
Cost 的文本框的数据区域。
-
以下表达式位于页眉或页脚中,提供了页面上的 Cost 文本框中的值的和:
=Sum(ReportItems!Cost.Value)
注意
页眉或页脚中的每个表达式只能引用一个报表项。
分页符
在某些报表中,可能需要在指定行数之后、组或报表项上放置分页符。为此,在数据区域中创建组(通常是紧挨着详细信息区域的组),在组中添加分页符,然后根据指定行数在组中添加组表达式。
-
如果将以下表达式放置在组表达式中,则它将给每 25 行指定一个编号。如果为组定义了分页符,将导致每隔 25 行插入一个分页符。
=Int((RowNumber(Nothing)-1)/25)
属性
表达式不仅用于显示文本框中的数据。还可以用于更改将属性应用于报表项的方式。可以更改报表项的样式信息,或更改其可见性。
格式
可以使用表达式改变报表中报表项的外观。
-
如果在文本框的 Color 属性中使用以下表达式,则它可根据 Profit 字段的值更改文本的颜色:
=Iif(Fields!Profit.Value < 0, "Red", "Black")
-
如果在数据区域中的报表项的 BackgroundColor 属性中使用以下表达式,则它可更改淡绿色与白色之间的每一行的背景颜色:
=Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")
可见性
可以使用报表项的可见性属性来显示和隐藏报表中的项。在诸如表的数据区域中,最初可以根据表达式中的值隐藏详细信息行。
-
The following expression, when used for initial visibility of detail rows
in a group, shows the detail rows for all sales exceeding 90 percent in the
PctQuota field:
=Iif(Fields!PctQuota.Value>.9, False, True)
报表参数
可以在参数中使用表达式来更改参数的默认值。例如,可以使用参数,以根据用于运行报表的用户 ID 筛选特定用户的数据。
-
如果将以下表达式用作参数的默认值,则它可收集运行报表的用户的用户 ID:
=User!UserID
自定义代码
可以在报表中使用自定义代码。自定义代码既可以嵌入报表中,也可以存储在报表所使用的自定义程序集中。有关自定义代码的详细信息,请参阅向
ReportViewer 报表中添加自定义代码。
-
以下示例调用了 ToUSD 嵌入代码方法,该方法将 StandardCost 字段值转换为美元值:
=Code.ToUSD(Fields!StandardCost.Value)
另请参见
报表中的大部分函数为 Microsoft Visual Basic
函数或者内置报表函数。可以使用这些函数来设置数据格式、应用逻辑和访问报表元数据。
Visual Basic 函数
可以使用 Visual Basic 函数来操作文本框中所显示的数据,或者操作参数、属性或报表其他区域中所用的数据。本节举例说明了其中一些函数。有关
Visual Basic 函数的详细信息,请参阅 Visual Basic 文档。
日期函数
可以使用 Visual Basic 函数在报表中提供日期信息。
-
以下表达式包含 Today 函数,用于提供当前日期。此表达式可用在文本框中以在报表上显示日期,或用在参数中以根据当前日期筛选数据:
=Today()
-
如果要根据单个参数来提供日期范围,则可使用 DateAdd 函数。以下表达式提供了 StartDate 参数中的日期之后六个月的日期:
=DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
-
以下表达式包含了 Year
函数,用于显示特定日期所属的年份。可以使用此表达式将日期组合在一起,或者将年份作为一组日期的标签显示。此表达式为给定顺序的一组日期提供年份:=Year(Fields!OrderDate.Value)
-
Month 函数和其他函数也可用于处理日期。有关详细信息,请参阅 Visual Basic 文档。
字符串函数
可以使用 Visual Basic 函数操作报表中的字符串。
-
可以使用 Format 函数来设置字符串中的日期和数字的格式。 The following expression displays values of
the StartDate and EndDate parameters in long date format:=Format(Parameters!StartDate.Value, "D") & " through " & Format(Parameters!EndDate.Value, "D")
如果文本框只包含日期或数字,则应当使用文本框的 Format 属性(而不是文本框中的 Format 函数)来应用格式。
-
Right、 Len 和 InStr 函数用于返回子字符串,例如,修整 DOMAIN\username 以只返回用户名。 The following
expression returns a portion of a string to the right of a backslash (\)
character from a parameter named User:=Right(Parameters!User.Value, Len(Parameters!User.Value) - InStr(Parameters!User.Value, "\"))
The following expression results in the same value as the previous one,
using members of the .NET Framework String class instead of Visual Basic
functions:=Parameters!User.Value.Substring(Parameters!User.Value.IndexOf("\")+1, Parameters!User.Value.Length-Parameters!User.Value.IndexOf("\")-1)
决策函数
可以使用 Visual Basic 函数来计算输入值并根据结果返回另一个值。
-
Iif 函数根据表达式的计算结果是否为 True 返回两个值中的一个。以下表达式使用了 Iif 函数,如果 LineTotal 的值超过
100,则返回布尔值 True,否则返回 False:=Iif(Fields!LineTotal.Value > 100, True, False)
以下表达式使用了多个 Iif 函数(也称为“嵌套 Iif 函数”),根据 PctComplete 的值返回三个值中的一个。
=Iif(Fields!PctComplete.Value >= .8, "Green", Iif(Fields!PctComplete.Value >= .5, "Amber", "Red"))
-
以下表达式也是根据 PctComplete 的值返回三个值中的一个,不过使用的是 Switch 函数,该函数返回的是多个表达式中计算结果为 True
的第一个表达式的值:=Switch(Fields!PctComplete.Value >= .8, "Green", Fields!PctComplete.Value >= .5, "Amber", Fields!PctComplete.Value < .5, "Red")
报表函数
Reporting Services 提供了可用于操作报表中的数据的其他报表函数。本节举例说明了其中两个函数。有关报表函数和示例的详细信息,请参阅 ReportViewer
报表的内置函数。
-
Sum 函数可计算某一分组或数据区域中多个值的和。此函数可用于表格组的页眉或页脚中。以下表达式显示了订单分组或数据区域中数据的和:
=Sum(Fields!LineTotal.Value, "Order")
-
如果将包含 RowNumber
函数的表达式用于数据区域中的文本框中,则该表达式将显示表达式所在文本框的每个实例的行号。此函数可用于给表格中的各行加编号。还可以将其用于更复杂的情况,例如,根据行号提供分页符。有关详细信息,请参阅本主题中后面的“分页符”。以下表达式显示了从最外面数据区域的第一行到最后一行的行号。Nothing
关键字表示函数将从最外面数据区域的第一行开始计数。若要从子数据区域开始计数,可使用数据区域的名称。=RowNumber(Nothing)
可以使用表达式来控制数据在报表上的显示形式。例如,可以在一个文本框中显示两个字段的值、显示报表的有关信息或影响报表中分页符的插入方式。
页眉和页脚
在设计报表时,可能需要在报表的页脚显示报表名称和页码。为此,可使用以下表达式:
-
以下表达式提供了报表的名称以及它的运行时间。可以将该表达式放入报表页脚或表体的文本框中。 The time is formatted with the
.NET Framework formatting string for short date:=Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")
-
以下表达式位于报表页脚的文本框中,提供了报表的页码和全部页。
=Globals.PageNumber & " of " & Globals.TotalPages
也可以在报表页眉或页脚中引用表体中的报表项。以下示例说明了如何在页眉中显示页面中的第一个值和最后一个值,类似于目录列表的形式。该示例假定存在一个包含名为
LastName 的文本框的数据区域。
-
以下表达式位于页眉左侧的文本框中,提供了页面上 LastName 文本框的第一个值:
=First(ReportItems!LastName.Value)
-
The following expression, placed in a textbox on the right side of the page
header, provides the last value of the LastName text box on the page:=Last(ReportItems!LastName.Value)
可以对页眉或页脚中所引用的报表项应用聚合函数。(不过,不能对表体中所引用的报表项应用聚合函数。)以下示例说明了如何显示页总页数。该示例假定存在一个包含名为
Cost 的文本框的数据区域。
-
以下表达式位于页眉或页脚中,提供了页面上的 Cost 文本框中的值的和:
=Sum(ReportItems!Cost.Value)
注意 页眉或页脚中的每个表达式只能引用一个报表项。
分页符
在某些报表中,可能需要在指定行数之后、组或报表项上放置分页符。为此,在数据区域中创建组(通常是紧挨着详细信息区域的组),在组中添加分页符,然后根据指定行数在组中添加组表达式。
-
如果将以下表达式放置在组表达式中,则它将给每 25 行指定一个编号。如果为组定义了分页符,将导致每隔 25 行插入一个分页符。
=Int((RowNumber(Nothing)-1)/25)
属性
表达式不仅用于显示文本框中的数据。还可以用于更改将属性应用于报表项的方式。可以更改报表项的样式信息,或更改其可见性。
格式
可以使用表达式改变报表中报表项的外观。
-
如果在文本框的 Color 属性中使用以下表达式,则它可根据 Profit 字段的值更改文本的颜色:
=Iif(Fields!Profit.Value < 0, "Red", "Black")
-
如果在数据区域中的报表项的 BackgroundColor 属性中使用以下表达式,则它可更改淡绿色与白色之间的每一行的背景颜色:
=Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")
可见性
可以使用报表项的可见性属性来显示和隐藏报表中的项。在诸如表的数据区域中,最初可以根据表达式中的值隐藏详细信息行。
-
The following expression, when used for initial visibility of detail rows
in a group, shows the detail rows for all sales exceeding 90 percent in the
PctQuota field:
=Iif(Fields!PctQuota.Value>.9, False, True)
报表参数
可以在参数中使用表达式来更改参数的默认值。例如,可以使用参数,以根据用于运行报表的用户 ID 筛选特定用户的数据。
-
如果将以下表达式用作参数的默认值,则它可收集运行报表的用户的用户 ID:
=User!UserID
自定义代码
可以在报表中使用自定义代码。自定义代码既可以嵌入报表中,也可以存储在报表所使用的自定义程序集中。有关自定义代码的详细信息,请参阅向
ReportViewer 报表中添加自定义代码。
-
以下示例调用了 ToUSD 嵌入代码方法,该方法将 StandardCost 字段值转换为美元值:
=Code.ToUSD(Fields!StandardCost.Value)
另请参见
表达式不仅用于显示文本框中的数据。还可以用于更改将属性应用于报表项的方式。可以更改报表项的样式信息,或更改其可见性。
格式
可以使用表达式改变报表中报表项的外观。
-
如果在文本框的 Color 属性中使用以下表达式,则它可根据 Profit 字段的值更改文本的颜色:
=Iif(Fields!Profit.Value < 0, "Red", "Black")
-
如果在数据区域中的报表项的 BackgroundColor 属性中使用以下表达式,则它可更改淡绿色与白色之间的每一行的背景颜色:
=Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")
可见性
可以使用报表项的可见性属性来显示和隐藏报表中的项。在诸如表的数据区域中,最初可以根据表达式中的值隐藏详细信息行。
-
The following expression, when used for initial visibility of detail rows
in a group, shows the detail rows for all sales exceeding 90 percent in the
PctQuota field:=Iif(Fields!PctQuota.Value>.9, False, True)
可以在参数中使用表达式来更改参数的默认值。例如,可以使用参数,以根据用于运行报表的用户 ID 筛选特定用户的数据。
-
如果将以下表达式用作参数的默认值,则它可收集运行报表的用户的用户 ID:
=User!UserID
自定义代码
可以在报表中使用自定义代码。自定义代码既可以嵌入报表中,也可以存储在报表所使用的自定义程序集中。有关自定义代码的详细信息,请参阅向
ReportViewer 报表中添加自定义代码。
-
以下示例调用了 ToUSD 嵌入代码方法,该方法将 StandardCost 字段值转换为美元值:
=Code.ToUSD(Fields!StandardCost.Value)
另请参见
可以在报表中使用自定义代码。自定义代码既可以嵌入报表中,也可以存储在报表所使用的自定义程序集中。有关自定义代码的详细信息,请参阅向
ReportViewer 报表中添加自定义代码。
-
以下示例调用了 ToUSD 嵌入代码方法,该方法将 StandardCost 字段值转换为美元值:
=Code.ToUSD(Fields!StandardCost.Value)