葡萄城报表系统开发中常用的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,视觉效果为浅灰色),
否则为白色。预览报表效果,如下图:
|
|