集算报表与润乾报表的函数语法对比
FineReport V7.0与润乾报表 V4.5的对比

FineReport与润乾报表的产品对比润乾报表和FineReport报表软件均为纯JAVA的企业级Web报表设计工具,两者都是国内优秀的报表解决方案供应商。
下面笔者从多个角度来综合对比润乾和FineReport报表,进而客观的评价两者的优劣。
为了写作方便,本文用FR表示FineReport,用RQ表示润乾报表。
第一章实用性报表软件从本质上来讲,属于网页制作工具的一种,最终目的是从原始数据中抽取预定义的信息,经过报表服务器的分析运算后,将结果展示到浏览器中。
报表软件的出现,使得用代码才能实现的报表,只需要通过报表软件的可视化设计,简单操作即可实现。
报表软件是社会科技发展和专业化分工的必然产物,它大大缩短了信息管理系统的开发周期,丰富了系统数据展示的方式,提高了信息管理系统的质量,降低了系统维护的难度,从而为企业赢得更多的利润和口碑。
正是因为“缩短项目开发周期”和“降低系统维护难度”这一专业化的分工定位,“产品易用”、“产品好用”和“学习成本低”,也就是“产品实用”对报表软件显得格外重要,这也渐渐成为衡量一款报表软件领先与否的关键因素。
一、设计器UI设计器UI(设计器的用户体验),是用户在使用产品中建立起来的主观感受,注重实际应用效率和舒适的报表设计体验。
1、设计器界面FR:采用类excel的设计模式,有着无限行无限列的报表设计区域。
设计器充分尊重用户的软件操作习惯,采用“左-中-右”的界面布局,左边是数据操作类面板,中间是报表设计区,右边是外部属性和内容设计面板。
设计器将参数设计面板和报表设计面板相统一,用户可以在全局上设计报表,提高报表的美观程度,还一定程度上加快报表的设计速度。
对最常用到的“新建、保存、后退、前进、报表预览”的功能按钮进行了放大,方便用户快速识别和点击。
设计器界面去掉了一些炫目的色彩,更多使用稳重低调的商务灰,这样的色彩设置可以集中用户的注意力,更加专注于当前的这一张报表的设计。
润乾报表常用函数

润乾报表常用函数1.to函数说明:生成一组连续的整数数据语法: to(startE xp,endExp{,stepEx p})参数说明:startE xp 整数数据开始的表达式endExp整数数据结束的表达式stepEx p 整数数据步长的表达式函数示例:to(1,5)=list(1,2,3,4,5)to(1,5,2)=list(1,3,5)to(-5,-10,-2)=list(-5,-7,-9)to(-10,-8)=list(-10,-9,-8)2.select函数说明:从数据集的当前行集中选取符合条件的记录语法:datase tName.select( <select_exp>{, desc_e xp{, filter_exp{,sort_e xp{,rootGr oupEx p}}}} )datase tName.select( <select_exp>, , <filter_exp> )//适用于不需排序或数据集中已排好序参数说明:select_exp:要选择的字段列名/列号,,也可以是表达式。
列号用#n 表示,例如#0代表第0列,#1代表第1列,依此类推desc_e xp: 指定数据排序的顺序,true表示降序排列,false表示升序排列。
filter_exp:数据过滤表达式,如果全部选出,则此参数省略,仅用“,”占位。
sort_e xp: 数据排序表达式。
当此项为空时先检查de sc_ex p是否为空,如果为空,则不排序,否则使用se lect_exp排序。
rootGr oupEx p 是否root数据集表达式返回值:一组数据的集合,数据类型由s elect_exp的运算结果决定函数示例:例1:ds1.select( name ) 从数据源ds1中选取n ame字段列的所有值, 不排序例2:ds1.select( #2, true ) 从数据源ds1中选取第二个字段列的所有值并降序排列例3:ds1.select( name,false,sex=='1') 从数据源ds1中选取性别为男性的name字段列的值并升序排列例4:ds1.select( name, true, sex=='1', id ) 从数据源ds1中选取性别为男性的name字段列的值并按id字段降序排列3.Int函数说明:将字符串或数字转换成整数语法: int( string ) int( number )参数说明:string需要转换的字符串表达式number数字,如果带有小数位,转换后小数位被截掉返回值:32位整数示例:例1:int( "100" ) 返回:100例2:int( 100.1 ) 返回:100例3:int(100.9999) 返回:1004.map函数说明显示值对照表函数,从对照表中找出当前单元格对应值的显示值,没有则返回n ull语法: map(valueL istEx p, displa yList Exp)参数说明:valueL istEx p 真实值列表,可以是可扩展单元格或结果为集合列表的表达式displa yList Exp 显示值列表,可以是可扩展单元格或结果为集合列表的表达式真实值列表和显示值列表一一对应返回值:字符型,和当前格真实值对应的显示值示例:例1:map(to(1,3),list("男","女","不定"))例2:map(arg1,arg2) 其中arg1为1,2,3组成的参数组,arg2为"男","女","不定"组成的字符串组例3:map(list(1,2,3),list("男","女","不定"))5.Select1函数说明:从数据集中按顺序检索到符合过滤条件的第一条记录,返回其sel ectEx p值语法: datase tName.select1(select Exp{,filter Exp{,rootGr oupEx p}})参数说明: select Exp 要选择的字段列名/列号,,也可以是表达式。
润乾报表常用函数

润乾常用函数数值计算函数说明:abs(numberExp)计算参数的绝对值语法:abs(numberExp)参数说明:numberExp 待计算绝对值的数据返回值:数值型示例:例1:abs(-3245.54) 返回:3245.54例2:abs(-987) 返回:987函数说明:cos(numberExp)计算参数的余弦值,其中参数以弧度为单位相关的函数有sin() 计算参数的正弦值tan() 计算参数的正切值语法:cos(numberExp)参数说明:numberExp 待计算余弦值的弧度数返回值:double型示例:例1:cos(pi()) 返回:-1例2:cos(pi(2)) 返回:1函数说明:eval( StringExp )动态解析并计算表达式语法:eval( StringExp )eval( StringExp, SubRptExp )eval( StringExp, DataSetExp )参数说明:StringExp 待计算的表达式串SubRptExp 嵌入式子报表对象,一般是含有子报表的单元格DataSetExp 数据集对象,一般是ds函数返回值:表达式的结果值,数据类型由表达式决定示例:例1:eval( "1+5" ) 返回6例2:eval("B2+10", A1) 其中A1为嵌入式子报表,表示计算A1子报表中的B2+10 例3:eval("salary+100", ds("ds1")) 表示计算数据集ds1中salary加100函数说明:exp(nExp)计算e的n次幂语法:exp(nExp)参数说明:nExp 指定次幂数返回值:数值型示例:例1:exp(4.3) 返回:73.69979369959579函数说明:fact(nExp)计算参数的阶乘语法:fact(nExp)参数说明:nExp 待计算阶乘的数据返回值:长整数(64位)示例:例1:fact(10) 返回:3628800函数说明:fill(s, n)获得n个s拼成的字符串相关函数:space() 产生一个空串语法:fill(s, n)参数说明:s 用于拼成新串的源串n 新串中包含源串的个数返回值:字符型示例:例1:fill("1 ",10) 返回:"1 1 1 1 1 1 1 1 1 1 "例2:fill("a b",10) 返回:"a ba ba ba ba ba ba ba ba ba b"函数说明:fl oat(string)将单精度浮点数、双精度浮点数、字符串转换为32位的单精度浮点型语法:float(string)float(number)参数说明:string 需要转换的单精度浮点数、双精度浮点数表达式number 数字返回值:32位的单精度浮点数示例:例1:float("1234567") 返回:1234567.0例2:float(1234567.0) 返回:1234567.0例3:float(1234567) 表达式提示错误,因为1234567不是浮点数函数说明:fl oor(numberExp, {nExp})对数据在指定位置上进行截取,剩余部分只要有值全舍去相关的函数有:ceil:对数据在指定位置上进行截取,剩余部分只要有值就进位round:对数据在指定位置上进行截取,剩余部分四舍五入语法:floor(numberExp, {nExp})参数说明:numberExp 需要进行截取的数据nExp 整数,用于指定需要进行截取的位置,>0:从小数点往右位移nExp个位数,<0:从小数点往左移nExp个位数=0:表示当前小数点的位置返回值:数值型示例:例1:=floor(3451231.234,0) 返回:3451231.0例2:=floor(3451231.234,-1) 返回:3451230.0例3:=floor(3451231.234,-2) 返回:3451200.0例4:=floor(3451231.234,1) 返回:3451231.2例5:=floor(3451231.234,2) 返回:3451231.23涵数说明:log(numberExp)计算参数的自然对数相关函数:log10() 计算以10为底的对数语法:log(numberExp参数说明:numberExp 需要计算自然对数的数据返回值:数值型示例:例1:log(54) 返回:3.9889840465642745 函数说明:log10(numberExp)计算以10为底的对数相关函数:log() 计算自然对数语法:log10(numberExp)参数说明:numberExp 需要计算以10为底的对数的数据返回值:数值型示例:例1:log10(54) 返回:1.7323937598229684 函数说明:pi(numberExp)计算圆周率及其倍数语法:pi(numberExp)参数说明:numberExp 倍数,此参数省略,则返回圆周率返回值:圆周率及其倍数示例:例1:pi() 返回:3.141592653589793例2:pi(2) 返回:6.283185307179586函数说明:pow(xExp, nExp)计算x的n次幂语法:pow(xExp, nExp)参数说明:xExp 底数nExp 次幂示例:例1:pow(2,4) 返回:16.0函数说明:round(numberExp, {nExp})对数据在指定位置上进行截取,剩余部分四舍五入相关的函数有:ceil:对数据在指定位置上进行截取,剩余部分只要有值就进位floor:对数据在指定位置上进行截取,剩余部分只要有值全舍去语法:round(numberExp, {nExp})参数说明:numberExp 需要进行截取的数据nExp 整数,用于指定需要进行截取的位置,>0:从小数点往右位移nExp个位数,<0:从小数点往左移nExp个位数=0:表示当前小数点的位置返回值:数值型示例:例1:=round(3451251.274,0) 返回:3451251.0例2:=round(3451251.274,-1) 返回:3451250.0例3:=round(3451251.274,-2) 返回:3451300.0例4:=round(3451251.274,1) 返回:3451251.3例5:=round(3451251.274,2) 返回:3451251.27函数说明:sin(number)计算参数的正弦值,其中参数以弧度为单位相关的函数有cos() 计算参数的余弦值tan() 计算参数的正切值语法:sin(number)参数说明:number 需要计算正弦值的弧度数示例:例1:sin(pi()) 返回:1.2246467991473532E-16例2:sin(pi(2)) 返回:-2.4492935982947064E-16 例3:sin(pi()/2) 返回:1.0函数说明:sqrt(number)计算平方根语法:sqrt(number)参数说明:number 需要计算平方根的数据返回值:数值型示例:例1:sqrt(100) 返回:10.0例2:sqrt(99) 返回:9.9498743710662函数说明:tan(number)计算参数的正切值,其中参数以弧度为单位相关的函数有sin() 计算参数的正弦值cos() 计算参数的余弦值语法:tan(number)参数说明:需要计算正切值的弧度数返回值:double型示例:例1:tan(pi()/2) 返回:1.633123935319537E16例2:tan(pi(2)) 返回:-2.4492935982947064E-16函数说明:sum(expression)对可扩展单元格或集合表达式进行求和语法:sum(expression)sum(cellExp,exp)参数说明:expression 需要被求和的单元格或表达式,一般为可扩展单元格或集合表达式 cellExp 单元格或单元格集合,以cellExp里的单元格为当前格计算表达式exp exp 表达式返回值:实数或者字符型,由被汇总的单元格数据类型决定示例:例1:sum(A1:A10) 求出单元格A1至A10的合计值,被统计单元格可以是数值型也可以是字符型例2:sum(arg1) 其中arg1是参数组,求出arg1中所有元素的合计值例3:sum(B1{}) 表示求得当前主格扩展区域内所有扩展后的B1单元格的合计值例4:sum(B1[`0]{}) 表示求得根坐标下所有扩展后的B1单元格的合计值例5:sum(A1[`0]{},B1+C1) 计算分别与每个A1相对应的B1、C1的和的合计值日期函数说明:age(dateExp{,typeExp})计算从参数定义的时间到当前间隔的整年数语法:age(dateExp{,typeExp})age(stringExp,formatExp{,typeExp})参数说明:dateExp 日期型表达式,运算的结果是日期型(Date)stringExp 表达式,其结果必须为日期或中国日期时间格式的字符串formatExp 格式化表达式比如"yyyyMMdd","yyyy-MM-dd"等typeExp 计算精确的最小单位1为日,2为月,3为年,缺省为日返回值:整数示例:假设今天为2007.1.1例1:age(datetime2("19800227","yyyyMMdd")) 结果为26例3:age("19800227","yyyyMMdd",3) 结果为27函数说明:date(stringExp)将字符串转换成日期型数据语法:date(stringExp)参数说明:stringExp 字符串表达式,其结果必须返回合法日期格式的字符串要求格式为yyyy-MM-dd,不含时间,如果含了时间,时间部分不转换返回值:日期时间型,但是时间部分都为00:00:00示例:例1:date("1982-08-09") 返回日期:1982-08-09 00:00:00例2:date("1982-08-09 10:20:30") 返回日期:1982-08-09 00:00:00函数说明:dateTime(string)将字符串或长整数转换成日期时间语法:dateTime(string)dateTime(long)参数说明:string 格式为yyyy-MM-dd HH:mm:ss的字符串long 以微秒计的长整数返回值:日期时间示例:例1:dateTime("2006-01-01 10:20:30") 返回:2006-01-01 10:20:30例2:dateTime("2006-01-01 10:20:30:111") 返回:2006-01-01 10:20:30例3:dateTime(12345) 返回:1970-01-01 08:00:12函数说明:datetime2(string, format)将各种格式的日期字符串转换成日期时间型数据,转换时可以指定字符串的当前格式语法:datetime2(string, format)参数说明:string 各种格式的日期字符串format 用于说明参数1的格式串返回值:日期时间型数据示例:例1:datetime2("12/28/1972","MM/dd/yyyy") 返回:1972-12-28 00:00:00 例2:datetime2("12/28/1972 10:23:43","MM/dd/yyyy hh:mm:ss") 返回:1972-12-28 10:23:43例3:datetime2("19800227","yyyyMMdd") 返回:1980-02-27 00:00:00 例4:datetime2("1982年12月30日","yyyy年MM月dd日") 返回:1982-12-30 00:00:00函数说明:day(dateExp)从日期型数据中获得该日在本月中是几号语法:day(dateExp)参数说明:dateExp 表达式,其结果必须为日期或中国日期时间格式的字符串返回值:整数示例:例1:day(datetime2("19800227","yyyyMMdd")) 返回:27例2:day(dateTime(12345)) 返回:1例3:day(dateTime("2006-01-15 10:20:30")) 返回:15函数说明:dayName(dateExp)从日期型数据中获得该日的星期名称语法:dayName(dateExp)参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss,yyyy-MM-dd,HH:mm:ss返回值:字符型示例:例1:dayName(datetime2("19800227","yyyyMMdd")) 返回:星期三例2:dayName(dateTime(12345)) 返回:星期四例3:dayName(dateTime("2006-01-15 10:20:30")) 返回:星期日例4:dayName("12:14:34") 返回:星期四例5:dayName("1972-11-08") 返回:星期三例6:dayName("1972-11-08 10:20:30") 返回:星期三函数说明:dayNo(dateExp)从日期型数据中,获得该日位于一个星期中的第几天,星期天返回1,星期一返回2,依此类推语法:dayNo(dateExp)参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss,yyyy-MM-dd,HH:mm:ss返回值:整数示例:例1:dayNo(dateTime2("19800227","yyyyMMdd")) 返回:4例2:dayNo(dateTime("2006-01-15 10:20:30")) 返回:1例3:dayNo("1972-11-08 10:20:30") 返回:4函数说明:daysAfter(dateExp1, dateExp2)计算两个日期型数据相差几天语法:daysAfter(dateExp1, dateExp2参数说明:dateExp1 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss,yyyy-MM-dd,HH:mm:ss dateExp2 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss,yyyy-MM-dd,HH:mm:ss 返回值:整数示例:例1:daysAfter(dateTime("1983-12-15 10:20:30"),datetime2("1982年12月30日","yyyy年MM月dd日"))返回:-350例2:daysAfter("1983-12-15 10:20:30","1982-12-30") 返回:-350函数说明:daysInMonth(dateExp)获得指定日期所在月的天数语法:daysInMonth(dateExp)参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss,yyyy-MM-dd,HH:mm:ss 返回值:整数示例:例1:daysInMonth(datetime2("19800227","yyyyMMdd")) 返回:29例2:daysInMonth("1972-11-08 10:20:30") 返回:30例3:daysInMonth(dateTime("2006-01-15 10:20:30")) 返回:31函数说明:daysInYear(dateExp)获得指定日期所在年或者指定年份的天数语法:daysInYear(dateExp)daysInYear(year)参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss,yyyy-MM-dd,HH:mm:ssyear 返回整数的表达式返回值:整数示例:例1:daysInYear(datetime2("19800227","yyyyMMdd")) 返回:366 例2:daysInYear(dateTime("2006-01-15 10:20:30")) 返回:365例3:daysInYear("1972-11-08 10:20:30") 返回:366例4:daysInYear(2006) 返回:365函数说明:hour(datetimeExp)从日期时间型数据中,获得当前时间位于一天中的第几个时辰语法:hour(datetimeExp)参数说明:datetimeExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss,yyyy-MM-dd,HH:mm:ss 返回值:整数示例:例1:hour("1983-12-15") 返回:0例2:hour("1983-12-15 10:30:25") 返回:10例3:hour(dateTime("2006-01-15 13:20:30")) 返回:13函数说明:lastday(dateExp)获得指定日期的上一天语法:lastday(dateExp)参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss,yyyy-MM-dd,HH:mm:ss返回值:日期时间型示例:例1:lastday("1972-11-08 10:20:30") 返回:1972-11-07 10:20:30例2:lastday(datetime2("19800227","yyyyMMdd")) 返回:1980-02-26 00:00:00 例3:lastday(dateTime("2006-01-15 10:20:30")) 返回:2006-01-14 10:20:30函数说明:lastmonth( dateExp )取得指定日期在上月的同日,若无同一日,则返回上月月末语法:lastmonth( dateExp )参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss,yyyy-MM-dd,HH:mm:ss返回值:日期时间型示例:例1:lastmonth(datetime2("19800227","yyyyMMdd")) 返回:1980-01-27 00:00:00 例2:lastmonth("1972-11-08 10:20:30") 返回:1972-10-08 10:20:30例3:lastmonth(dateTime("2006-01-15 10:20:30")) 返回:2005-12-15 10:20:30函数说明:lastyear( dateExp )取得指定日期在去年的同月同日,若无同月同日,则返回去年同月最后一天语法:lastyear( dateExp )参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss,yyyy-MM-dd,HH:mm:ss返回值:日期时间型示例:例1:lastyear(datetime2("19800227","yyyyMMdd")) 返回:1979-02-27 00:00:00 例2:lastyear("1972-11-08 10:20:30") 返回:1971-11-08 10:20:30例3:lastyear(dateTime("2006-01-15 10:20:30")) 返回:2005-01-15 10:20:30函数说明:minute(datetimeExp)从日期时间型数据中,获得分钟的信息语法:minute(datetimeExp)参数说明:datetimeExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd 或HH:mm:ss 返回值:整数示例:例1:minute(datetime2("19800227","yyyyMMdd")) 返回:0例2:minute("1972-11-08 10:20:30") 返回:20例3:minute(dateTime("2006-01-15 13:20:30")) 返回:20函数说明:month(dateExp)取得指定日期所在的月份语法:month(dateExp)参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd 或HH:mm:ss 返回值:整数示例:例1:month(datetime2("19800227","yyyyMMdd")) 返回:2例2:month("1972-11-08 10:20:30") 返回:11例3:month(dateTime("2006-01-15 13:20:30")) 返回:1函数说明:monthbegin( dateExp )取得指定日期所在月的月首语法:monthbegin( dateExp )参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd 或HH:mm:ss 返回值:日期时间型示例:例1:monthbegin(datetime2("19800227","yyyyMMdd")) 返回:1980-02-0100:00:00例2:monthbegin("1972-11-08 10:20:30") 返回:1972-11-01 10:20:30例3:monthbegin(dateTime("2006-01-15 13:20:30")) 返回:2006-01-01 13:20:30 函数说明:monthend( dateExp )取得指定日期所在月的月末语法:monthend( dateExp )参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd 或HH:mm:ss 返回值:日期时间型示例:例1:monthend(datetime2("19800227","yyyyMMdd")) 返回:1980-02-29 00:00:00 例2:monthend("1972-11-08 10:20:30") 返回:1972-11-30 10:20:30例3:monthend(dateTime("2006-01-15 13:20:30")) 返回:2006-01-31 13:20:30 函数说明:now()获得系统此刻的日期时间语法:now()返回值:日期时间函数说明:quaterbegin( dateExp )取得指定日期所在季度的首日语法:quaterbegin( dateExp )参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd 或HH:mm:ss\ 返回值:日期时间\示例:例1:quaterbegin(datetime2("19800227","yyyyMMdd")) 返回:1980-01-0100:00:00\例2:quaterbegin("1972-11-08 10:20:30") 返回:1972-10-01 10:20:30\例3:quaterbegin(dateTime("2006-01-15 13:20:30")) 返回:2006-01-01 13:20:30\ 函数说明:quaterend( dateExp )取得指定日期所在季度的末日语法:quaterend( dateExp )参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd 或HH:mm:ss 返回值:日期时间示例:例1:quaterend(datetime2("19800227","yyyyMMdd")) 返回:1980-03-31 00:00:00 例2:quaterend("1972-11-08 10:20:30") 返回:1972-12-31 10:20:30例3:quaterend(dateTime("2006-01-15 13:20:30")) 返回:2006-03-31 13:20:30 函数说明:relDate(dateExp, nExp)从给定的日期型数据中,算出相差n天后的新的日期数据语法:relDate(dateExp, nExp)参数说明:dateExp 给定的起始日期表达式,其结果必须为日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd 或HH:mm:ss nExp 整数表达式,需要求得nExp天后的新日期返回值:日期时间示例:例1:relDate(datetime2("19800227","yyyyMMdd"),5) 返回:1980-03-03 00:00:00 例2:relDate("1972-11-08 10:20:30",-10) 返回:1972-10-29 10:20:30例3:relDate(dateTime("2006-01-15 13:20:30"),15) 返回:2006-01-30 13:20:30函数说明:relTime(datetimeExp, nExp)从给定的日期时间型数据中,算出相差n秒后的新的日期时间数据语法:relTime(datetimeExp, nExp)参数说明:datetimeExp 给定的起始日期表达式,其结果必须为日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd 或HH:mm:ss nExp 整数表达式,需要求得nExp秒后的新日期时间返回值:日期时间示例:例1:relTime(datetime2("19800227","yyyyMMdd"),5) 返回:1980-02-27 00:00:05 例2:relTime("1972-11-08 10:20:30",-10) 返回:1972-11-08 10:20:20例3:relTime(dateTime("2006-01-15 13:20:30"),15) 返回:2006-01-15 13:20:45 函数说明:second(datetimeExp)从日期时间型数据中,获得秒信息语法:second(datetimeExp)参数说明:datetimeExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd 或HH:mm:ss 返回值:整数示例:例1:second(datetime2("19800227","yyyyMMdd")) 返回:0例2:second("1972-11-08 10:20:30") 返回:30例3:second(dateTime("2006-01-15 13:20:45")) 返回:45函数说明:secondsAfter(datetimeExp1,datetimeExp2)计算两个日期时间型数据相差几秒语法:secondsAfter(datetimeExp1,datetimeExp2)参数说明:datetimeExp1 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd 或HH:mm:ss datetimeExp2 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd 或HH:mm:ss 返回值:整数示例:例1:secondsAfter(datetime2("19800227","yyyyMMdd"),dateTime("1980-02-27 00:00:45")) 返回:45例2:secondsAfter("1972-11-08 10:20:30","1972-11-08 10:30:50") 返回:620函数说明:time(stringExp)将字符串转换成时间型数据语法:time(stringExp)参数说明:stringExp HH:mm:ss格式的字符串返回值:时间型数据示例:函数说明:weekbegin(dateExp)获得指定日期所在星期的星期天,这里认定星期天为一周的开始语法:weekbegin(dateExp)参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd 或HH:mm:ss 返回值:日期时间型示例:例1:weekbegin(datetime2("19800227","yyyyMMdd")) 返回:1980-02-24 00:00:00 例2:weekbegin("1972-11-08 10:20:30") 返回:1972-11-05 10:20:30例3:weekbegin(dateTime("2006-01-15 13:20:45")) 返回:2006-01-15 13:20:45 函数说明:weekend(dateExp)获得指定日期所在星期的星期六,这里认定星期六为一周的结束语法:weekend(dateExp)参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd 或HH:mm:ss 返回值:日期时间型示例:例1:weekend(datetime2("19800227","yyyyMMdd")) 返回:1980-03-01 00:00:00 例2:weekend("1972-11-08 10:20:30") 返回:1972-11-11 10:20:30例3:weekend(dateTime("2006-01-15 13:20:45")) 返回:2006-01-21 13:20:45 函数说明:year(dateExp)从日期型数据中获得年信息语法:year(dateExp)参数说明:dateExp 日期或标准日期格式的字符串,如:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd 或HH:mm:ss 返回值:整数示例:例1:year(datetime2("19800227","yyyyMMdd")) 返回:1980例2:year("1972-11-08 10:20:30") 返回:1972例3:year(dateTime("2006-01-15 13:20:45")) 返回:2006字符串函数说明:asc( string{, nPos} )取字符串指定位置的字符的unicode值,如果是ascii字符则返回ascii码(一般来说,英文字符及其扩展字符都是ascii字符,中文、日文、韩文等亚洲字符都是unicode字符,ascii字符为8位,unicode字符为16位(其中有3位用于标志字符类型))相关函数:char() 根据给定的unicode编码或者ascii码取得其对应的字符语法:asc( string{, nPos} )参数说明:string 给定的字符串nPos 整数表达式,缺省为0返回值:整数示例:例1:=asc("def") 返回:100 (ascii)例2:=asc("def",1) 返回:101 (ascii)例3:=asc("中国") 返回:20013 (unicode)例4:=asc("中国",1) 返回:22269 (unicode)函数说明:d eicmal(stringExp)将字符串或数字型数值转换成大浮点数语法:deicmal(stringExp)decimal(numberExp)参数说明:stringExp 给定数字串,可含小数点numberExp 数值,只能少于等于64位,超过64位就要用字符串返回值:大浮点数BigDecimal示例:例1:decimal("123456789012345678901234567890") 返回:123456789012345678901234567890例2:decimal(1234567890123456) 返回:1234567890123456(BigDecimal 类型)函数说明:left(string, n)获得源字符串左边的子串相关函数:mid() 获得源字符串中间的子串right() 获得源字符串右边的子串语法:left(string, n)参数说明:string 获得子串的源串n 获得子串的长度返回值:字符型示例:例1:left("abcdefg",3) 返回:"abc"函数说明:len(s)计算字符串的长度语法:len(s)参数说明:s 待计算长度的字符串返回值:整数示例:例1:len("adfg") 返回:4例2:len(" abd ") 返回:7函数说明:long( string )将字符串或数字转换成64位长整数语法:long( string )long( number )参数说明:string 需要转换的字符串表达式number 数字,如果带有小数,则小数部分被截掉返回值:64位长整数示例:例1:long("1234567") 返回:1234567例2:long(1234567.789) 返回:1234567函数说明:lower(s)将字符串转成小写相关函数:upper() 把字符串转成大写word_cap() 将字符串每一个单词的首字母大写语法:lower(s)参数说明:s 待转成小写的字符串返回值:字符型示例:例1:lower("ABCdef") 返回:"abcdef"例2:lower("defABC") 返回:"defabc"函数说明:ltrim(s)去掉字符串左边的空格相关函数:rrim() 去掉字符串右边的空格trim() 去掉字符串左右的空串语法:ltrim(s)参数说明:s 准备去掉左边空格的源串返回值:字符串型示例:例1:ltrim(" abc def ") 返回:"abc def "例2:ltrim("def abc ") 返回:"def abc "函数说明:maxwidth()求当前列中所有非合并格的显示串的最大字符长度(注意:ASCII码大于255的字符长度为2)语法说明:maxwidth()返回值:整数示例:一般用于列首格中,动态控制列宽例1:在列首格的单元格宽属性中写入8*maxwidth(),表示动态调整当前列宽为单元格显示值最大字符长度*8个像素函数说明:mid(s, start{, end})返回字符串的子串相关函数:left() 获得源字符串左边的子串right() 获得源字符串右边的子串语法:mid(s, start{, end})参数说明:s 待获得子串的源串start 获得子串的起始位置end 获得子串的结束位置,缺省为源串的长度返回值:字符串型示例:例1:mid("abcde",0) 返回:abcde例2:mid("abcde",1,2) 返回:b例3:mid("abcde",3) 返回:de函数说明:pos(s1, s2{, begin})查找母串中子串的位置语法:pos(s1, s2{, begin})参数说明:s1 待查找子串的母串s2 被查找的子串begin 查找的起始位置,缺省为0 返回值:整数示例:例1:pos("abcdef","def") 返回:3例2:pos("abcdefdef","def",5) 返回:6函数说明:right(s, n)获得字符串右边的子串相关函数:left() 获得源字符串左边的子串mid() 获得源字符串中间的子串语法:right(s, n)参数说明:s 待获得子串的源串n 获得子串的长度返回值:字符串型示例:例1:right("abced",2) 返回:"ed"函数说明:rmQuote(exp)删除表达式里的引号,包括单引号和双引号语法:rmQuote(exp)参数说明:exp 表达式返回值:字符串函数说明:rplc( srcExp,subStrA,rplcStrB{,boolExp})将字符串src的子字符串a变为字符串b,语法:rplc( srcExp,subStrA,rplcStrB{,boolExp})参数说明:srcExp 源字符串subStrA 源字符串的子字符串rplcStrB 将要替换成的字符串boolExp 引号里的字符是否需要变换,缺省为true返回值:替换后的字符串示例:例1:rplc("abc'abc'def","a","中国") 返回:"中国bc'中国bc'def"例2:rplc("abc'abc'def","a","中国",false) 返回:"中国bc'abc'def"例3:rplc("abc'abc'def","a","中国",true) 返回:"中国bc'中国bc'def"函数说明:rtrim(s)去掉字符串右边的空格相关函数:ltrim() 去掉字符串左边的空格trim() 去掉字符串左右的空串语法:rtrim(s)参数说明:s 准备去掉右边空格的源串返回值:字符串型示例:例1:rtrim(" abc def ") 返回:" abc def"例2:rtrim("def abc ") 返回:"def abc"函数说明:space(n)产生一个空串相关函数:fill() 获得n个s拼成的字符串语法:space(n)参数说明:n 生成空串的长度返回值:字符串型,获得n个空格拼成的字符串示例:例1:space(5) 返回:" "函数说明:split( srcExp,sepExp{,boolExp})将字符串按分割符分割成多个子串语法:split( srcExp,sepExp{,boolExp})参数说明:srcExp 待分割的字符串表达式sepExp 分隔符表达式boolExp bool型,是否解析引号、括号里的分隔符,为true时解析,为false时不解析,缺省为false返回值:分割后的字符串列表示例:例1:=split("ab;cd;ef;tg;tt",";") 返回数组:["ab","cd","ef","tg","tt"]例2:=split("ab;c'd;e'f;tg;tt",";",false) 返回数组:["ab","c'd;e'f","tg","tt"]不解析引号里的分隔符例3:=split("ab;c[d;e]f;tg;tt",";",false) 返回数组:["ab","c[d;e]f","tg","tt"]不解析括号里的分隔符例4:=split("ab;c'd;e'f;tg;tt",";",true) 返回数组:["ab","c'd","e'f","tg","tt"]解析引号里的分隔符例5:=split("ab;c[d;e]f;tg;tt",";",true) 返回数组:["ab","c[d","e]f","tg","tt"]解析括号里的分隔符函数说明:trim(s)去掉字符串左右的空串相关函数:right_trim() 去掉字符串右边的空格left_trim() 去掉字符串左边的空格语法:trim(s)参数说明:s 待去掉左右空串的源串返回值:字符串型示例:例1:trim(" abc ") 返回:"abc"例2:trim(" a bc ") 返回:"a bc"函数说明:upper(s)把字符串转成大写相关函数:lower() 把字符串转成小写word_cap() 将字符串每一个单词的首字母大写语法:upper(s)参数说明:s 待转成大写的源串返回值:字符串型示例:例1:upper("ABCdef") 返回:"ABCDEF"例2:upper("abcDEF") 返回:"ABCDEF"函数说明:wordCap(s)将字符串每一个单词的首字母大写相关函数:upper() 把字符串转成大写lower() 把字符串转成小写语法:wordCap(s)参数说明:s 需要将单词首字母大写的源串返回值:字符串型示例:例1:wordCap("I love my country") 返回:"I Love My Country"例2:wordCap("she is beautiful") 返回:"She Is Beautiful"单元格函数说明:avg(expression{,containNull})对可扩展单元格或集合表达式求平均值语法:avg(expression{,containNull})average(expression{,containNull})参数说明:expression 需要求平均值的单元格或表达式,一般为可扩展单元格或集合表达式containNull 是否对null元素进行计数返回值:实数示例:例1:avg(A1:B10) 求得A1至B10之间单元格的平均值,注意是以当前格为基格计算A1和B10例2:avg(arg1) 其中arg1是整数组,表示求得arg1中所有数据的平均值例3:avg(B1{}) 表示求得当前主格扩展区域内所有扩展后的B1单元格的平均值例4:avg(B1{`0}{}) 表示求得根坐标下所有扩展后的B1单元格的平均值例5:avg(list(2,4,null),false)返回3,如果containNull为true或缺省则返回2函数说明:avg2(cellExp,exp{,containNull})以指定单元格集的元素为基格计算表达式求平均值语法:avg2(cellExp,exp{,containNull})参数说明:cellExp 单元格或单元格集合,以cellExp里的单元格为当前格计算表达式expexp 表达式containNull 是否对null元素进行计数返回值:实数示例:例1:avg2(A1[`0]{},B1+C1) 计算分别与每个A1相对应的B1、C1的和的平均值函数说明:call(sqlStatement{,arg1{,arg2{,arg3{,……}}}})执行存储过程,返回结果数据集合,只能返回单列数据,如果存储过程返回多个字段,则返回第一个字段的结果值语法:call(sqlStatement{,arg1{,arg2{,arg3{,……}}}})参数说明:sqlStatement 合法的调用存储过程的sql语句arg(n) sql语句的参数,可以是常数也可以是表达式,如果是输出结果集的参数,对应的参数表达式写成"@@result"返回值:一组数据的集合,由结果集的第一个字段决定数据类型,如果结果集是多列,只返回第一列示例:例1:call("{call ResultSet (?,?,?)}","@@result","000001",A2)表示执行存储过程ResultSet,第一个输出参数输出结果集,第二、三个参数传入"000001",A2作为参数值函数说明:call(dbName,sqlStatement{,arg1{,arg2{,arg3{,……}}}})除第一个参数为数据源连接外,其他参数可call()函数相同,功能也和call()函数相同,通过第一个参数,可以实现不同的单元格连接不同的数据源。
集算报表

集算报表:报表工具的二次革命计算引擎产生背景报表工具是润乾的主打产品,我们在这方面积累了丰富的经验,当然,也有教训。
现代的报表工具主要解决两个环节的问题:一方面是呈现,也就是把数据以表格或图形的方式展现出来;另一方面是数据计算,即计算出源数据中没有和不能直接呈现的数据,比如一些公式格、分组汇总排序等等。
这里说的报表,主要是指用户事先确定好格式和数据运算规则的报表,我们俗称为固定报表。
自助报表,也就是业务用户可以自己简单拖拽可以完成的报表,不在此类。
自助报表的话题我们会专门再讲。
十年前润乾首先提出了非线性报表模型,带来了报表工具的第一次革命。
这个模型从根本上解决了报表(特别是中国式报表)的复杂格式以及表内的计算问题,以此模型的润乾报表也因此取得了一定的成功,现在这个模型已经成为报表工具的标准了。
但是,有了这样的报表工具,报表开发是否就很好做了?“并不是!”报表工具常常会宣称自己支持“零编码开发报表”,润乾报表当然也不例外地喊过这个口号,但要认真分析下来,这是一句空话。
为什么呢?我们发现,数据库中的原始数据有时并不能直接用作报表工具的数据源去呈现,而需要一系列运算转换过程,有的过程还非常复杂。
有报表开发经验程序员都知道,为报表编写复杂SQL是经常的事,存储过程以及事先准备的中间数据也是家常便饭,有时SQL和存储过程不好写的运算还需要采用自定义数据源即JAVA程序来处理。
总之都需要大量的程序编码。
虽然大部分报表还是相对简单的,这类复杂报表总数上并不算多,但其占用的开发工作量却会占绝对的大头,开发10个用报表工具能直接完成的简单报表所用的时间可能也做不了一个需要编码才能准备好数据的报表。
那么,提升报表工具的计算能力可否解决这个问题吗?广义地说是可以的,这就是集算器的产生背景。
但是,由于数据量和数据转换具有分步性的特征,而报表工具在呈现环节的计算一般都是状态式和全内存方式,这样,无论在容量和复杂度方面都只能是很少部分地缓解这个问题而已,即使是润乾报表这样以计算能力为核心优势的报表工具也不行,数据源开发工作量依然很大,这也是我们这些年的经验。
集算报表与润乾报表的函数语法对比

集算报表与润乾报表的函数语法对比集算报表5.0在保留润乾报表V4.x的核心功能外,进行了优化和精简,其中报表函数也做了适当优化,这里就常见计算来比较一下二者函数语法之间的差异。
对比函数一览表1数据集函数1.1d s.group()润乾报表:datasetName.group(selectExp{,descExp{,filterExp{,sortExp{,groupSortExp{,groupDescExp{,rootGr oupExp}}}}}})集算报表:datasetName.group(<selectExp>{,filter_exp};{sort1}{:order1},…;{ groupSortExp }:{ groupOrderExp })选项:@r 是否root数据集表达式主要改变:1、增加@r函数选项,取代原rootGroupExp表达式参数2、取消分组前记录的排序顺序descExp参数3、更改排序表达式和排序顺序参数语法举例:1.2d s.select()/ds.select1()润乾报表:datasetName.select( <select_exp>{, desc_exp{, filter_exp{, sort_exp{,rootGroupExp}}}} ) datasetName.select1(selectExp{,filterExp{,rootGroupExp}})集算报表:将原ds.select()和ds.select1()合并为ds.select()语法如下datasetName.select(<select_exp>{: order_exp},{ filter_exp },{num_exp},{distinct_exp})选项:@r 是否root数据集表达式主要改变:1、增加@r函数选项,取代原rootGroupExp表达式参数2、取消数据的排序顺序descExp参数3、更改排序顺序参数语法举例:1.3d s.sum()润乾报表:datasetName.sum(selectExp{,filterExp{,rootGroupExp}})集算报表:datasetName.sum(selectExp{,filterExp})选项:@r 是否root数据集表达式主要改变:1、增加@r函数选项,取代原rootGroupExp表达式参数举例:2单元格函数2.1c all()/call2()润乾报表:call(sqlStatement{,arg1{,arg2{,arg3{,……}}}})call(dbName,sqlStatement{,arg1{,arg2{,arg3{,……}}}})集算报表:将原call()和call2()合并为call(),语法如下call(sqlStatement{,arg1{,arg2{,arg3{,……}}}}{;dbName})主要改变:1、数据源参数顺序改变,并作为可选参数举例:2.2i f()润乾报表:if(boolExp1,valueExp1{,boolExp2,valueExp2 {,boolExp3,valueExp3 {, {defaultExp}}}})集算报表:if(x1:y1,…,xk:yk;y)主要改变:1、函数参数分隔符变化举例:2.3n vl()润乾报表:nvl( valueExp1, valueExp2 )集算报表:ifn( valueExp1, valueExp2 )主要改变:1、函数名称变化举例:2.4s um()润乾报表:sum(expression)sum(cellExp,exp)集算报表:sum(expression)sum(cellExp,exp)主要改变:无举例:2.5v alue()表示当前单元格的值,集算报表与润乾报表用法相同,没有改变。
润乾报表函数

润乾报表函数个人中心我的主页好友消息站内消息:无新消息提醒互动请求:2条新系统通知:5条新zln 米老鼠|装扮|设置| 退出糍糍1025的空间主页博客相册|个人档案|好友|i贴吧查看文章润乾报表函数2 转2011-09-05 16:55 函数说明:根据第一个表达式的值是否为空,若为空则返回指定值语法:nvl( valueExp1, valueExp2 )参数说明:valueExp1 需要计算的表达式,其结果不为空时返回其值valueExp2 需要计算的表达式,当valueExp1结果为空时返回此值返回值:valueExp1或valueExp2的结果值示例:例1:nvl(A1,"") 表示当A1为空时,返回空串,否则返回A1例2:nvl(value(),0) 表示当当前格为空时返回0,否则返回当前格的值函数说明:计算分页后的当前页中所有的单元格(cellExp)的个数,注意,本函数只是在分页后才有效语法:pccount({cellExp})参数说明:cellExp 表达式返回值:当前页中所有的单元格(cellExp)的个数函数示例:pccount(A2{条件}) 返回当前页中所有的A2格的个数函数说明:取得总的页数,注意,本函数只是在分页后才有效语法:pcount({booleanExp})参数说明:booleanExp 表达式返回值:页数。
函数示例:pcount() 返回总的页表中的页数pcount(true) 返回纵向分页的页表中的页数pcount(false) 返回横向分页的页表中的页数函数说明:计算分页后的当前页中所有的单元格(cellExp)的和,注意,本函数只是在分页后才有效语法:pcsum({cellExp})参数说明:cellExp 表达式返回值:当前页中所有的单元格(cellExp)的和函数示例:pcsum(A2{条件}) 返回当前页中所有的A2格之和函数说明:计算圆周率及其倍数语法:pi(numberExp)参数说明:numberExp 倍数,此参数省略,则返回圆周率返回值:圆周率及其倍数示例:例1:pi() 返回:3.141592653589793例2:pi(2) 返回:6.283185307179586函数说明:计算一个值在一个完全划分中的位置语法:plot( valueExp, ListExp{, eqExp}{, ascExp} )参数说明:valueExp 返回值的表达式,值可以是字符串、数值、日期、时间等ListExp 返回同valueExp数据类型相同的数组,要求其中元素从小到大排列eqExp 返回布尔值的表达式,缺省为false,为false表示与ListExp元素比较时不包含等于ascExp 返回布尔值的表达式,缺省为true,即表示ListExp中元素从小到大排列,否则为从大到小排列示例:例1:plot( 0, list(0,10,100) ) 返回1,第一个集合为<0,不包含0,第二个集合为>=0且<10,所以0落在了第二个集合中,集合的编号从0开始起编,依次为0,1,2,3,所以结果为1例2:plot( 0, list(0,10,100),true,true) 返回0例3:plot( 10, list(0,10,100), false ) 返回2例4:plot(10,list(100,10,0),true,false) 返回1详细说明:划分是指将一个集合划分成几个集合,如数组{0,10,100}在eqExp返回false的情况下将整数集或实数集划分成4个集合,依次分别是<0、<10(此集合中元素必定>=0)、<100(此集合中元素必定>=10)及其它(即>=100);在eqExp返回true的情况下将整数集或实数集划分成4个集合,分别是<=0、<=10(且>0)、<=100(且>10)及其它(即>100);对于数组{100,10,0},eqExp为false时也划分成4个集合,分别为>100,>10(且<=100),>0(且<=10)及其它(即<=0);eqExp为true时则为>=100,>=10(且<100),>=0(且<10)及其它(即<0)函数说明:取得当前页的页码,注意,本函数只是在分页后才有效语法:pno({booleanExp})参数说明:booleanExp 表达式返回值:当前页的页码。
集算报表

集算报表:报表工具的二次革命引入计算引擎产品结构润乾集算报表是一款面向程序人员用于开发固定报表的工具软件。
所谓固定报表,是指事先已经确定好格式和数据运算规则、在客户端输入参数即可呈现出来的报表,这类报表的重点在于复杂的计算过程和格式,在呈现阶段一般不会太多交互动作。
这是集算报表的体系结构图,从图中可以看到,集算报表和包括润乾报表在内的其它报表工具相比,多了一个计算层:数据源的数据先经过计算层的计算,再传给呈现层去展现。
以前的报表工具都是直接由呈现层连接数据源,报表的数据准备工作要么通过SQL(存储过程)在数据源环节完成,要么使用外部自定义数据源在应用程序(Java)中完成,总之都不是报表工具的任务。
当然,集算报表仍然支持由呈现层与数据源直接连接的方式。
计算层不是必须的。
为什么要增加一个计算层呢?我们知道,“零编码开发报表”是许多报表工具厂商(包括润乾)都喊过的口号,但现实并不是这么简单,虽然确实有不少简单报表真地可以拖拖拽拽完成,但仍然有相当数量的报表必须经过编码才能完成。
有报表开发经验程序员都知道,为报表编写复杂SQL是经常的事,存储过程以及事先准备的中间数据也是家常便饭,有时SQL和存储过程不好写的运算还需要采用自定义数据源即Java程序来处理。
虽然大部分报表相对简单,复杂报表总数上并不算多,但其占用的开发工作量却会是绝对的大头,开发10个用报表工具能拖拽完成的简单报表所用时间也做不了一个需要编码才能准备好数据的报表。
润乾报表的计算能力在市场上已经算是比较强的,可以在呈现阶段直接实现多数据源关联计算和比上期同期比等层次格间引用计算,但即使这样,我们在经营报表工具过程中仍然大量碰到复杂数据准备的需求, 开发工作量很繁重。
这样,引入计算中间层希望更便捷地实现数据准备就是个比较自然的想法,也就产生了集算器这个产品。
面对这类报表,我们不能再期望零编码,而是基于集算器简单编码。
严格地说,数据准备虽然对报表开发很重要,但已经不属于报表工具的任务范畴了,作为报表工具厂商,也可以名正言顺地拒绝处理这个事情,把数据准备丢给数据源和应用程序。
润乾报表基本介绍

润乾报表3.0介绍润乾报表 3.0是用于统计报表制作及报表及数据填报的大型企业级工具软件。
产品首次成功解决了报表单元格与关系数据库之间的关联规律性,特别适合于中国式报表的填报和统计。
一、产品优势1.绘制方便润乾报表采用类EXCEL的绘制方式,真正做到所见即所得,把程序员从繁重且无聊的报表格式设置工作中解脱出来,极大的提高的表格绘制的方便度和效率,产品特有的EXCEL导入功能(包括格式)可充分利用业务人员原有积累。
2.数据模型先进润乾报表独创的数据模型首次成功地解决了中国报表中单元格与数据字段之间的弱关联性,彻底打破传统行式报表方案,报表行列完全对称,特有的层次扩展机制使多层分组及交叉报表制作非常简单,提供针对关联格的跨行跨组运算,很容易计算小计、同期比等数据。
同一报表中支持多个异构的数据源,允许报表各片之间无关,可用多个简单的数据集成组合出复杂报表,程序员无须再为每张报表编程(脚本或存储过程)或写复杂SQL准备数据。
3.输出能力丰富润乾报表每个单元格属性均提供条件控制,如颜色、行高、是否可见等均可与格内数据相关;支持代码显示值对应、多种数据格式、图片文件和图片字段的处理。
产品提供十几种各类统计图,支持PNG/GIF/JPG三种格式。
每张报表均可生成HTML、EXCEL、PDF三种输出格式(输出结果完全不失真,包括其内的统计图)。
单元格与统计图例均可加带参数的链接从而实现数据钻取功能,多层报表可在线收缩展开。
4.打印控制强大润乾报表提供强大的打印控制功能,按行数和纸张大小分页分栏或强制分页,表头自动重复(包括左表头),允许一张纸上打多个报表,提供末页补足空行。
可采用像素和毫米两种计量单位,独创的底图描绘功能以支持套打;5.集成性好润乾报表采用纯JAVA开发,利用服务器端提供丰富的API调用和标记可完全无缝地嵌入到基于J2EE的应用程序中(可看作应用程序员自己写的代码),程序员可更换报表的数据库连接和数据源、采用应用服务器的连接池管理;设计器也提供外置的数据源和数据字典定义,可由应用程序员提供这些信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
集算报表与润乾报表的函数语法对比
集算报表5.0在保留润乾报表V4.x的核心功能外,进行了优化和精简,其中报表函数也做了适当优化,这里就常见计算来比较一下二者函数语法之间的差异。
对比函数一览表
1数据集函数
1.1d s.group()
润乾报表:
datasetName.group(selectExp{,descExp{,filterExp{,sortExp{,groupSortExp{,groupDescExp{,rootGr oupExp}}}}}})
集算报表:
datasetName.group(<selectExp>{,filter_exp};{sort1}{:order1},…;{ groupSortExp }:{ groupOrderExp })
选项:
@r 是否root数据集表达式
主要改变:
1、增加@r函数选项,取代原rootGroupExp表达式参数
2、取消分组前记录的排序顺序descExp参数
3、更改排序表达式和排序顺序参数语法
举例:
1.2d s.select()/ds.select1()
润乾报表:
datasetName.select( <select_exp>{, desc_exp{, filter_exp{, sort_exp{,rootGroupExp}}}} ) datasetName.select1(selectExp{,filterExp{,rootGroupExp}})
集算报表:
将原ds.select()和ds.select1()合并为ds.select()语法如下
datasetName.select(<select_exp>{: order_exp},{ filter_exp },{num_exp},{distinct_exp})选项:
@r 是否root数据集表达式
主要改变:
1、增加@r函数选项,取代原rootGroupExp表达式参数
2、取消数据的排序顺序descExp参数
3、更改排序顺序参数语法
举例:
1.3d s.sum()
润乾报表:
datasetName.sum(selectExp{,filterExp{,rootGroupExp}})
集算报表:
datasetName.sum(selectExp{,filterExp})
选项:
@r 是否root数据集表达式
主要改变:
1、增加@r函数选项,取代原rootGroupExp表达式参数举例:
2单元格函数
2.1c all()/call2()
润乾报表:
call(sqlStatement{,arg1{,arg2{,arg3{,……}}}})
call(dbName,sqlStatement{,arg1{,arg2{,arg3{,……}}}})
集算报表:
将原call()和call2()合并为call(),语法如下
call(sqlStatement{,arg1{,arg2{,arg3{,……}}}}{;dbName})
主要改变:
1、数据源参数顺序改变,并作为可选参数
举例:
2.2i f()
润乾报表:
if(boolExp1,valueExp1{,boolExp2,valueExp2 {,boolExp3,valueExp3 {, {defaultExp}}}})集算报表:
if(x1:y1,…,xk:yk;y)
主要改变:
1、函数参数分隔符变化
举例:
2.3n vl()
润乾报表:
nvl( valueExp1, valueExp2 )
集算报表:
ifn( valueExp1, valueExp2 )
主要改变:
1、函数名称变化
举例:
2.4s um()
润乾报表:
sum(expression)
sum(cellExp,exp)
集算报表:
sum(expression)
sum(cellExp,exp)
主要改变:
无
举例:
2.5v alue()
表示当前单元格的值,集算报表与润乾报表用法相同,没有改变。
3时间日期函数
3.1d ate()
润乾报表:
date(stringExp)
集算报表:
date(stringExp)
date(year,month,day)
主要改变:
1、增加函数参数类型
举例:
3.2d atetime()/datetime2()
润乾报表:
dateTime(string)
dateTime(long)
datetime2(string, format)
集算报表:
将原dateTime()和dateTime2()合并为datetime(),语法如下datetime(string)
datetime(long)
主要改变:
无
3.3d aysAfter()
润乾报表:
daysAfter(dateExp1, dateExp2)
集算报表:
interval (datetimeExp1,datetimeExp2)
选项:
@y 计算两个日期时间型数据相差几年
@q 计算两个日期时间型数据相差几季度
@m 计算两个日期时间型数据相差几月
@s 计算两个日期时间型数据相差几秒
@ms 计算两个日期时间型数据相差几毫秒
@r 计算两个日期时间型数据间隔,返回实数
缺省为计算两个日期时间型数据相差几天主要改变:
1、函数名称变化
2、增加了若干函数选项,以满足不同需要
举例:
3.4l astday()/lastmonth()/lastyear()/relDate()/relTime()
润乾报表:
lastday(dateExp)
lastmonth( dateExp )
lastyear( dateExp )
relDate(dateExp, nExp)
relTime(datetimeExp, nExp)
集算报表:
将原lastday()/lastmonth()/lastyear()/relDate()/relTime()合并为afert(),语法如下after (dateExp, n)
选项:
@y 计算与指定日期相差n年的新日期数据
@q 计算与指定日期相差n季度的新日期数据
@m 计算与指定日期相差n月的新日期数据
@s 计算与指定日期相差n秒的新的日期时间数据
@ms 计算与指定日期相差n毫秒的新的日期时间数据
缺省时表示算出给定日期n天后的新日期数据
主要改变:
1、函数名称变化
2、增加若干函数选项以满足不同需要
举例:
3.5m onthbegin()/monthend()/queterbegin()/quaterend()/wee
kbegin()/weekend()
润乾报表:
monthbegin( dateExp )
monthend( dateExp )
quaterbegin( dateExp )
quaterend( dateExp )
weekbegin(dateExp)
weekend(dateExp)
集算报表:
将原monthbegin()/monthend()/queterbegin()/quaterend()/weekbegin()/weekend()合并为pdate(),语法如下
pdate (dateExp)
选项:
@w 获得指定日期所在星期的星期天
@we 获得指定日期所在星期的星期六
@m 取得指定日期所在月的月首
@me 取得指定日期所在月的月末
@q 取得指定日期所在季度的首日
@qe 取得指定日期所在季度的末日
缺省为获得指定日期所在星期的星期天
主要改变:
1、函数名称变化
2、增加若干函数选项以满足不同需要
举例:
4字符串函数
4.1l ike()
润乾报表:
like( stringExp, formatExp{, ignoreCase} )
集算报表:
like( stringExp, formatExp{, ignoreCase} )
主要改变:
无
举例:
4.2r plc()
润乾报表:
rplc( srcExp,subStrA,rplcStrB{,boolExp})
集算报表:
replace( src,a,b)
选项:
@q 引号里的字符不需要进行替换
主要改变:
1、函数名称变化
2、增加@q选项替代原boolExp参数,使引号里的字符不需要进行替换举例:
4.3s plit()
润乾报表:
split( srcExp,sepExp{,boolExp})
集算报表:
split( srcExp,sepExp{,boolExp})
主要改变:
无
举例:
5数据类型转换函数
5.1s tr()
润乾报表:
str(expression{, format})
集算报表:
string(expression{, format})
主要改变:
1、函数名称变化
举例:。