配色: 字号:
报表系统开发中常用的7种函数
2017-07-17 | 阅:  转:  |  分享 
  
葡萄城报表系统开发中常用的7种函数

葡萄城报表系统的表达式可以使用的函数是微软VisualBasic语言和SQLServer报表服务

(SQLServerReportingService,缩写为SSRS)所支持的函数集的子集。因此关于这些常用函数

的详细用法,可以参考微软MSDN网站的同名函数的说明。

在MSDN网页上搜索相关的函数名,即可找到函数语法和用法的详细说明。

以下简单介绍报表表达式中常用函数的含义和用途。

1.日期时间函数

日期时间函数用于计算两个日期时间值之间的间隔,或者在一个日期时间值的基础上加上

某个时间间隔,得到另一个日期时间值。

DataAdd:返回一个Date值,其中包含添加指定时间间隔的日期和时间值。如

DataAdd(“d”,-1,”2017-1-1”)返回值为“2016-12-31”。

详见:https://msdn.microsoft.com/zh-cn/library/cc437578(v=vs.71).aspx

DateDiff:返回一个Long值,该值指定两个Date值之间的时间间隔数。如

DateDiff("y","2016-12-31","2017-1-1")返回值为1,表示两个日期值之间的年份差值为1。

DatePart:返回一个Integer值,其中包含给定Date值的指定部分(年,月,日,时,分,

秒,毫秒,星期几等)。如DatePart("m","2017-11-2")返回月份11。

DateSerial:返回表示指定年月日的Date值,其时间信息被设置为午夜(00:00:00)。如

DateSerial(2017,11,2)返回“2017-11-200:00:00”。

DateString:返回当前日期按当前区域设定中的日期格式显示的字符串,如“2000-12-31”。

DateValue:返回一个Date值,该值包含用字符串表示的日期信息,其时间信息设置为午

夜(00:00:00)。例如:DateValue(“2012-12-31”)。

Day:返回日期值的“日”,例如:Day(DateValue(“2013-4-5”))返回数值5。

Hour:返回时间值的小时部分。

Minute:返回时间值的分钟部分。

Month:返回日期值的月份部分。

MonthName:返回月份数的月份名称,例如:MonthName(3)返回“三月”。

Now:返回当前的日期时间值。

Second:返回日期时间值的秒。例如:=Second(DateAdd("s",123,DateValue("2013-1-2"))这

个表达式的结果为3,原因是DateAdd函数返回的日期时间值是:2013-1-200:02:03,其中的秒

就是3。

TimeOfDay:获取当前时间,无参数,返回值不带日期部分,显示为字符串形式为

“0001/1/19:55:36”。

Timer:定时器函数,其内容为从0时到现在的时间,但单位是秒,如36472.149871。

TimeSerial:返回一个Date值,该值表示指定的小时、分钟和秒,其日期信息设置基点为

元年1月1日,如TimeSerial(23,45,58)。

TimeString:返回当前时间的字符串形式,如10:17:43。

TimeValue:返回一个日期型数据的时间值。如TimeValue(Now)返回“0001/1/110:19:00”。

Today:返回当前日期。

Weekday:返回代表一星期中某天的整数。如Weekday(Today)返回7,表示星期六,如果

返回1表示星期日。

WeekdayName:返回某个整数(1-7)代表的星期几的名称,如当前日期是一个星期六时,

WeekdayName(Weekday(Today))返回“星期六”。

Year:返回一个日期值中的年度数值,如Year(Today)返回2017。

2.数学函数

数学函数用于数值计算,葡萄城报表中的数学函数与微软的VisualBasic语言的同名函数完

全兼容,因此有关函数的含义和用法可参看微软MSDN文档:

https://msdn.microsoft.com/zh-cn/library/thc0a116.aspx

下面介绍一些常用数学函数的用法。

Abs:返回一个数值的绝对值,如Abs(Fields!销售额.Value)。

Ceiling:返回不小于浮点参数值的最大整数。

Fix:返回将浮点参数值直接舍弃小数部分的整数部分。

Floor:返回不大于浮点参数值的最大整数。

Round:返回浮点参数值四舍五入的最邻近整数。

3.判断函数

判断函数用于对字段值或其他参数进行判断,往往用在IIF等流程函数中。

IsArray:参数是否数组。

IsDate:参数是否日期。

IsDbNull:参数是否为数据库NULL值。例如:IsDbNull(Fields!月份.Value)。

IsError:判断一个表达式是否运算错误。

IsNothing:判断一个参数是否是一个空引用指针对象。

IsNumeric:参数值是否为数值型,如IsNumeric(Fields!销售额.Value)。

4.流程函数

流程函数用于控制表达式的计算过程。

(1)Choose函数

以第一个参数为索引,返回后续参数中的一个。例如Choose(1,”a”,”b”)返回字符串”a”。

(2)IIF函数

最常用的流程函数,根据第一个参数的结果逻辑值(真/假),返回第二个或第三个参数的

值。

语法形式:IIf(expr,truepart,falsepart)

参数描述:

expr:必要参数。用来判断真伪的表达式。

truepart:必要参数。如果expr为True,则返回这部分的值或表达式。

falsepart:必要参数。如果expr为False,则返回这部分的值或表达式。

IIF往往配合判断函数使用,例如:=IIF(IsDbNull(Fields!搭赠.Value),0,Fields!搭赠.Value)可实

现字段值为NULL时显示0的效果。

(3)Partition函数

返回一个字符串,表示一个指定数值,出现在一个系列值中的哪一个区段。

语法形式:Partition(number,start,stop,interval)

参数描述:

number:必要参数。整数,在所有范围中判断这个整数是否出现。

start:必要参数。整数,数值范围的开始值,这个数值不能小于0。

stop:必要参数。整数,数值范围的结束值,这个数值不能等于或小于start。

interval:非必要参数。整数,数值范围的步长值。

比如Partition(230,1,1000,100)返回字符串”201:300”。其含义是:从1开始至1000为止,

每隔100为一个区间,230落在201-300这个区间内。

(4)Switch函数

计算一组表达式列表的值,然后返回与表达式列表中最先为真的表达式所相关的数值或表

达式。

语法形式:Switch(expr-1,value-1[,expr-2,value-2_[,expr-n,value-n]])

参数描述:

expr:必要参数。要加以计算的表达式。

value:必要参数。如果相关的expr表达式结果为真,则返回此部分的数值或表达式。

例如:

Switch(Fields!月份.Value<4,1,Fields!月份.Value<7,2,Fields!月份.Value<10,3,1=1,4)

可用于根据月份字段值,返回季度序号。

5.合计函数

合计函数也称聚合函数,是指对一系列值进行计算。典型的系列值是数据集多条记录的同

一字段,因此聚合函数的典型参数值就是数据集字段。

常用的合计函数如下:

Avg:返回指定表达式的所有非空值的平均值。如:=Avg(Fields!销售额.Value)。

Count:返回指定表达式的值的计数。

CountDistinct:返回指定表达式的所有不同值的计数。

CountRows:返回指定范围内的行的计数。

First:返回指定表达式的第一个值。通常是数据集第一条记录的指定字段值。

Last:返回指定表达式的最后一个值。

Max:返回指定表达式的所有非空值中的最大值。

Min:返回指定表达式的所有非空值中的最小值。

StDev:返回指定表达式的所有非空值的标准偏差。

StDevP:返回指定表达式的所有非空值的总体标准偏差。

Sum:返回指定表达式的值的总和。

Var:返回指定表达式的所有非空值的方差。

VarP:返回指定表达式的所有非空值的总体方差。



每个合计函数都可以使用Scope参数,该参数定义执行合计函数的范围。有效的范围值是

分组、数据集或数据区域的名称。如:=Avg(Fields!销售额.Value,“DataSet1”)。

只有直接或间接包含表达式的分组或数据区域才能作为范围。如果表达式位于数据区域内,

则对于所有聚合函数,Scope都是可选参数。如果省略Scope参数,则聚合的范围就是报表项

所属的最里面的数据区域或分组。如果将范围指定为Nothing,则表示将范围设置为报表项所

属的最外面的数据区域。

如果表达式位于数据区域外,Scope参数将引用数据表或业务对象。如果报表包含多个数

据集,则必须使用Scope参数。如果报表只包含一个数据集,并且省略了Scope参数,则范围

将设置为该数据集。如果报表项位于数据区域外,则不能为其指定Nothing关键字。

在页眉或页脚中不能使用Scope参数。

6.转换函数

转换函数用于转换数据的类型。比如将一个包含数值型内容的字符串转换成数值。

ToBoolean:将一个数值或字符串变成布尔值(真/假)。所有非0数值,无论正负,都会转

换成真。例如:ToBoolean(1),ToBoolean(-2),ToBoolean(“true”)都返回真;ToBoolean(0),

ToBoolean(“false”)返回假。

例如:ToInt32(“123”)将字符串“123”转换为整数123。

ToByte:将参数转换为一个0-255的字节数值。如ToByte(“255”)返回255。

ToChar:将一个数值转换成对应ASCII值的字符,例如ToChar(65)返回A。

ToDateTime:将一个字符串(如”2017-12-3123:59:59”)转换成一个日期时间型数据。

ToDecimal:将一个字符串或数值转换成带小数位的数值。

ToDouble:将一个字符串或数值转换成双精度的数值。

ToInt16:将一个字符串或数值转换成2字节的整数值。

ToInt32:将一个字符串或数值转换成4字节的整数值。

ToInt64:将一个字符串或数值转换成8字节的整数值。

ToSinlge:将一个字符串或数值转换成单精度浮点值。

ToString:将任意类型数据转换为一个字符串。对象型参数的转换结果为“Object”。

ToUInt16:将一个字符串或数值转换成2字节的无正负号整数值。

ToUInt32:将一个字符串或数值转换成4字节的无正负号整数值。

ToUInt64:将一个字符串或数值转换成8字节的无正负号整数值。

7.其他函数

除了前文所述各类通用函数,葡萄城报表还支持微软RDL标准规范中的其他函数,以及一

些特殊用途的函数。有关RDL标准规范函数,参见微软MSDN:

https://msdn.microsoft.com/zh-cn/library/ms252112(v=vs.80)

函数说明语法与示例

GetFields返回字段列表集合,仅限数

据区域内使用。此函数可令

复杂条件的表达式更易于编

写。

=GetFields()

InScope判断当前值是否在某个作用

域内。

=InScope()

=InScope(“Order”)

Level返回当前值在层次结构中的

级别。

=Level()

Lookup返回外键关联的另一数据集

的指定字段值。

=Lookup(,

,

,

)

Previous返回指定作用域中的前一个

值,例如上一行记录的某一

字段的值。

=Previous()

=Previous(Fields!余额.Value)

RowNumber返回当前行号=RowNumber()



其中,应用较多的是Lookup和RowNumber函数。

(1)Lookup函数

Lookup函数的典型用途是将多个数据集合并展示在同一个表格元素中。

函数语法如下:

=Lookup(,,,)

其中:

SourceExpression:主数据集的一个字段值,通常是数据库外键字段值。

DestinationExpression:关联数据集的一个字段值,通常是数据库外键字段所参照的表的主

键字段值。该字段的值应等于主数据集的SourceExpression字段值。

ResultExpression:关联数据集的另一个字段值,通常是数据库外键字段所参照的表的数据

字段值。该字段值将显示在表格中。

例如:

主数据集dsProduct:字段列表为:产品代码、产品名称、类别ID。

关联数据集dsType:类别ID、类别名称。

表达式:=Lookup(Fields!类别ID.Value,Fields!类别ID.Value,Fields!类别名称.Value,"dsType")

设计状态如下图:



报表效果如下图:



(2)RowNumber函数

RowNumber函数返回当前行号,典型用途是实现行号自动展示和表格交替背景色。

在表格内的单元格设置为=RowNumber(),如下图:



选中表格数据整行(注意不是单个单元格),设置BackgroundColor属性,选择<表达式…>,

如下图:



输入表达式:=IIF(RowNumber()mod2=0,"Silver","White")。

该表达式的含义为:如果行号能被2整除,则背景色为银色(Silver,视觉效果为浅灰色),

否则为白色。预览报表效果,如下图:







献花(0)
+1
(本文系zenmshuo首藏)