数学函数
在定义运算公式、审核公式、计算指标、分析区指标宏定义时,在公式定义向导中,常用到一些运算符和其他符号,如+、-、*、/、<、>、!、|、&、@-1等,
各种运算符的意义如下:
"+"、"-"、"*"、"/":分别为加、减、乘、除四则运算符,如A+B*C-D/F。
"("、")":左括号、右括号,在表达式中要成对使用。
"="、">"、">="、"<"、"<="、"<>":比较运算符,分别为等于、大于、大于等于、小于、小于等于、不等于。
“&”、“|”、“!”:逻辑运算符,分别表示逻辑运算中的与、或、非,其运算结果返回值为逻辑型。
“^”:对字符串操作,用来将其左右的两个字符串连接成一个,如T(1)^"12"。
“##”:用来标志日期型字符串,如#2005-01-18#。
“@-1”:表示取上一个报表期的数据,对月报而言是上月,若在旬报中,则系统自动取上旬。如果月报分析表中要取上年同期的数据,用“@-12”表示。如果所引用的报表期不存在,则公式所得的值是空值,此时用户可以手工输入数据。
计算指标:计算指标是定义的一个表达式,在定义时给表达起一个名字,在要使用这个表达式的地方,可直接引用表达式的名称,引用方法为:%计算指标名称%。
分析区指标宏:在定义分析区的指标时,也可以给指标表达式起一个名字,在指标中要使用这个表达式的地方,直接引用表达式的名称,引用方法为:$宏名称。
绝对值:ABS(Num)
求绝对值。绝对值是指没有正负符号的数值。
Num:需要求出绝对值的任意实数。
例如:
ABS(-1.2)=1.2
组合公式:C(int,int)
例如:
C(6,2)=15
余弦值:COS(num)
计算给定角度的余弦值。 num:以弧度表示的需要求余弦值的角度。
备注: 要把一个角度转换成弧度值,将角度乘于PI()/180。
例如:
COS(1.57) = 0 COS(3.14159) = -1
沿绝对值增大方向取整后最接近的偶数:EVEN(num)
返回沿绝对值增大方向取整后最接近的偶数。不论 num 的正负号如何,函数都向远离零的方向舍入, 如果 num 恰好是偶数,则无需进行任何舍入处理。
例如:
EVEN(1.5) 等于 2
EVEN(3) 等于 4
EVEN(2) 等于 2
EVEN(-1) 等于 -2
e的n次幂:EXP(num)
返回e的n次幂。常数e为自然对数的底数, 等于2.71828182845904。 Num:为任意实数,作为常数e的指数。 备注: EXP函数与LN函数互为反函数。
例如:
EXP(0)等于1 EXP(3)等于20.08553692 EXP(LN(2))等于2
I的阶乘:FACT(int)
I的阶乘,自然数i的阶乘是所有小于或等于i的正整数的积
例如:
FACT(5)=120
求以e为底求对数:LN(num)
求以e为底的自然对数。 num:待计算其自然对数的正实数 num必须保证Ln的结果在实数域内有意义。
例如:
ln(10)=2.3025
ln(2)=0.6931
去尾法求整数:INT(num)
返回数字舍入后的整数值。 Num:需要进行取整处理的实数。
例如:
INT(8.9) 等于 8
INT(-8.9) 等于 -8
下面公式将返回 A1 单元格中的一个正实数的小数部分:
A1-INT(A1)
求数值的对数:LOG(num1,num2)
按指定的任意底数,返回数值的对数。 num1:对数的底数。 num2:需要求对数的正实数。 num1,num2必须保证Log的结果在实数域内有意义。
例如:
Log(10,100) = 2 Log(9,3) = 0.5
取余数:MOD(int1,int2)
返回int1除以int2后的余数。
例如:
MOD(10,3)=1
取舍入后的奇数:ODD(num)
返回对指定数值进行舍入后的奇数。 不论正负号如何,数值都朝着远离 0 的方向舍入。 如果num 恰好是奇数,则不须进行任何舍入处理。
例如:
ODD(1.5) 等于 3
ODD(3) 等于 3
ODD(2) 等于 3
ODD(-1) 等于 -1
ODD(-2) 等于 -3
圆周率:PI()
返回圆周率3.14159
累计乘积:PRODUCT(num1.num2,....)
累计乘积,返回一组数值的连乘积。
例如:
PRODUCT(1.5,3,2,10)=90
求数的乘幂:POWER(num1,num2)
返回指定数字的乘幂。 num1:底数,可以为任意实数。 num2:指数。参数num1按照该指数次幂乘方。 num1,num2必须保证Power的结果在实数域内有意义。
例如:
Power(10,2) = 100
Power(4,0.5) = 2
随机数:RAND(num,n)
返回0 - 1之间均匀分布的随机数。
备注: 要生成一个位于a和b之间的随机数,可以使用以下的 公式: C=RAND()(b-a)+a。
例如:
假如需要生成一个大于等于0,小于60的随机数, 使用公式: RAND()60。
假如需要生成一个大于等于0,小于19的随机数, 使用公式: RAND()19。
假如需要生成一个大于等于0,小于50的随机数, 使用公式: RAND()50。
正弦值:SIN(num)
计算给定角度的正弦值。 Num:待求正弦值的以弧度表示的角度。
备注: 如果参数的单位是度,将其乘以PI()/180即可 转换成弧度。
例如:
sin(1.57079) = 1
sin(3.14159) = 0
返回正负符号:SIGN(num)
符号函数,返回参数num的符号。
例如:
num>0 ,Sign(Num) = 1
num=0,Sign(Num) = 0
num<0,Sign(Num) = -1
平方根:SQRT(num)
求num的平方根。 num为大于0的实数。
例如:
SQRT(4) = 2
SQRT(1.44) = 1.2
正切值:TAN(num)
返回指定角度的正切值。 num:待求正切值的角度,以弧度表示。 如果参数是以度为单位的,乘以Pi()/180后转换为弧度。 num必须保证TAN的结果在实数域内有意义。
例如:
Tan(0.785) = 1
Tan(3.14159) = 0
TRUNC(num,n)
将数字的小数部分截去,返回指定小数位数的数字。 num:待做截取处理的数值 n: 指明需保留小数点后面的位数 第二个参数可以为负数,表示为小数点左边指定位数 后面的部分截去,即均以0记 例如: TRUNC(8.19,0) 等于 8 TRUNC(-8.19,0) 等于 -8 TRUNC(PI(),1) 等于 3.1 TRUNC(1238.19,-2)等于1200
时间日期函数
DATE(yy、mm、dd)
返回由指定年、月、日合成的日期常量。 其中:参数yy、mm、dd为整数。
例如:
Date(1999,12,25)=#1999-12-25#
DATETOSTR(date)
将一日期转变成字符串。
例如:
DATETOSTR(#1999-12-25#)="1999-12-25"
DAY(date)
返回日期中的日,返回值为整数。
例如:
Day(#1999-12-1#)=1
DAYS(date,date)
返回两个日期之间的天数。天数中包括两头的日期。
例如:
DAYS(#1999-12-1#,#1999-12-10#)=10
DXDATE(date)
将日期变成大写格式。
例如:
DXDATE(#1999-1-1#)="一九九九年一月一日"
JDY(str)
计算月份str所属的季度,返回的结果是字符串;
例如:
JDY("10")="4",即表明10月份属于第4季度。
Jidu(date)
返回日期中的季度,返回值为整数。
例如:
Jidu(#1999-12-1#)=4
JSY(date)
判断月份str是否是一个季度的第一月,如果是 返回TRUE,否则返回FALSE,JSY是季首月的简称;
例如:
JSY(“07”)=TRUE jsy(t(2))即可判断当前报表期是否是一个季度的 第一月。
MONTH(date)
返回日期中的月份,返回值为整数。
例如:
Month(#1999-12-1#)=12
NOW()
返回系统当前时间,返回值为字符串:HH:MM:SS。
例如:
NOW()="12:56:50"
STRTODATE(str)
将一字符串转变成一日期。
例如:
STRTODATE("1999-12-25")=#1999-12-25#
如果串格式非法,则返回ErrVal。
TODAY()
以日期常量的形式返回当天的日期。
例如:
TODAY()=#1999-12-25#
WEEKDAY(date)
返回指定日期为一周中的第几天。返回类型为整型。
例如:
Weekday(#2005-01-03#)=1 2005年01月03日为星期一,为本周的第1天,所以 返回值为1。
如果日期为星期天,则返回值为7。 (星期日为本周的第1天)
WOFM(date)
返回日期Date所在的周是所在月的第几周,第一周从本月 的第一个周一算起
例如:
今天是2005年6月21日,则 WOFM(today())返回的 值为3,表示是第3周;因为2005年6月的1--4日所在周的 周一在上月的最后一周,所以是第3周。
YEAR(date)
返回日期中的年份,返回值为整数。
例如:
Year(#1999-12-1#)=1999
字符串函数
CHAR(int)
根据ASCII码返回单个字符的串。
例如:
CHAR(65)="A"
CLEAN(str)
将串中的不可见字符去掉。(这里的"不可见字符"是指 "ASCII码小于32的字符")
CODE(str)
返回串中第一个字符的ASCII码。
例如:
CODE("abc")=97
FIND(substr,str)
在串str中查找子串substr,并返回子串第一次出现的位置。(0代表第一个字符)如果没找到,则返回-1。与Search不同,FIND区分大小写。
例如:
FIND("AB","AAABBBBB")=2
FIND("Ab","AAABBBBB")=-1
FORMAT(str,num)
将一数字num变成格式化字符串。该函数类似于C语言 中的printf函数。
例如:
Format("%d",1234)="1234" 将十进制整数"1234"格式化为字符串 Format("%.8d",1234)="00001234" 将十进制整数"1234"格式化为长度为8个字符的字符串, 如果num长度小于给出的精度数时,在前边填补0;如果 大于精度数,按实际长度显示 Format("%f",12.34)="12.34" 将浮点数num转换为字符串 Format("%.1f",12.3412)="12.3" 将浮点数num转换为字符串,并指定小数点后位数 Format("%x",31)="1E" 将num格式化为16进制,num必须是一整数 Format("%o",12)="14" 将num格式化为8进制,num必须是一整数 Format("%e",1234.56)="1.23456000000000E003" 用科学计数法表示,num必须是一浮点数 Format("%u",2005)=“二零零五” 将整数格式化为大写
In(substr,str)
判断SubStr是否是Str的子串 SubStr表示子串;str表示多个字符串,串中的各 子串只能用空格分隔
例如:
In("00","00 01 02") 函数返回值为T。
LEFT(str,int)
返回一字符串左边int个字符组成的子串,其中int为整数。
例如:
LEFT("ABCDEF",3)="ABC"
LEN(str)
返回串的长度,返回值为整数。
例如:
LEN("ABCDE")=5
LOWER(str)
将串变成小写。
例如:
LOWER("AbCd1")="abcd1"
MID(str,I,n)
返回串中从I开始的n个字符的子串。其中:I,n都为整数。 串的基数n从0开始。
例如:
MID("ABCDEF",2,3)="CDE"
MT(str1,str2)
判断Str1与Str2是否模式匹配,返回值为逻辑型T、F。
例如:
MT ("ABC","A")返回T; MT ("ABC","A?C")返回T; MT ("ABC","AB")返回F; 其中*、?为通配符。
REPLACE(str,substr,from,num)
将串str从From开始的num个字符换成新串substr。串的基数从0开始;且from和num均必须为整数。
例如:
REPLACE("ABCDEF","12345",2,3)="AB12345F"
REPT(str,int)
将一串重复若干次,变成一新串。int为整数。
例如:
REPT("A",5)="AAAAA"
RIGHT(str,int)
返回一字符串右边n个字符组成的子串。int为整数。
例如:
RIGHT("ABCDEF",3)="DEF"
RMBDX(num)
将数值转变成大写人民币串。
例如:
RMBDX(1203.45)="壹仟贰佰零叁元肆角伍分整"
SAME(str1,str2)
判断两个字符串str1和str2串是否相等,不区分大小写。 返回值为逻辑型T、F,等于返回T,否则返回F。
例如:
SAME("aBc","ABC")=T
SEARCH(substr,str)
在串str中查找子串substr,并返回子串第一次出现的位置。(0代表第一个字符)如果没找到,则返回-1。与Find不同,SEARCH不区分大小写。
例如:
SEARCH("AB","AAABBBBB")=2
SEARCH("Ab","AAABBBBB")=2
STR(int)
将数值变成串;
例如:
STR(1)="1";
STRCAT(str1,str2,...)
将所有串合并。该合并不受255长度限制。
例如:
STRCAT("AB"," CD"," EF")="AB CD EF"
SUBSTITUTE(str,oldsub,newsub)
将串中的oldsub子串换成另一newsub子串。不管子串出现多少次,全部换掉。
例如:
Substitute("AbCdEFCdEG","CdE","123")="Ab123F123G"
TRIM(str)
将串中的头尾空格及TAB键去掉。
例如:
TRIM(" AB C ")="AB C"
大写:UPPER(str)
将串变成大写。
例如:
UPPER("AbCd1")="ABCD1"
VALUE(str)
将字符串转换成数值。如果转换不成功,则返回ErrVal。
例如:
VALUE("12.34")=12.34
统计函数
平均值:AVE(num1,num2,...)
对一组数据求平均值。至少必须有一个参数。
例如:
AVE(a1:a5,c1,c4,d1+d5*f2,max(e2:e10))
记数:COUNTIF(Bbname,cond)
对变长表中所有满足某一条件的记录记数;应用此函数的前提是先定义代码表元。 其中:BbName表示变长表表名,cond表示条件。
例如:
COUNTIF("b1",a2="2210101"),其中a2为代码表元, 此函数返回b1中a2值为2210101的记录条数。
最大值:MAX(num1,num2,...)
在一组数据中求出最大值。至少必须有一个参数。
例如:
Max(a1:a5,c1,c4,d1+d5*f2,max(e2:e10))
最小值:MIN(num1,num2,...)
在一组数据中求出最小值。至少必须有一个参数。
例如:
Min(a1:a5,c1,c4,d1+d5*f2,max(e2:e10))
RANK(num,"Cells",Ord)
求出num在Cells表元数组中的序号。
当Ord为0时,将数组按降序排列;
当Ord为非0时,则将数组按升序排列。
由于PowerReport不支持[Cells]的形式,所以如果在Excel中的公式为:Rank(A2,[A3:A10,B2:B9],1) 在PowerReport中则应写为: Rank(A2,"A3:A10,B2:B9",1)
STDEV(num1,num2,...)
对一组数据求标准方差。至少必须有2个参数。
例如:
STDEV(a1:a5,c1,c4,d1+d5*f2,max(e2:e10))
SUM(num1,num2,...)
对一组数据求和; 至少必须有一参数。
例如:
sum(a1:a5,c1,c4,d1+d5*f2,max(e2:e10))
SUMIF(Bbname,exp,cond)
对变长表中满足某一条件的表元求和。
其中:BbName为变长表表名; exp是变长表中的表元,可以是表达式; cond表示条件; 应用此函数的前提是先定义代码表元,一般在基本表和分析表中引用。
例如:
sumif("b1",c2+d2,a2=”2180100”),a2为代码表元, 此公式是对b1中所有满足a2=“2180100”的c2+d2求和。
VAR(num1,num2)
对一组数据求方差。至少必须有2个参数。
例如:
VAR(a1:a5,c1,c4,d1+d5*f2,max(e2:e10))
数据转换函数
AsBool(任意类)
将某个任意类型值转换成逻辑型
AsDate(任意类)
将某个任意类型值转换成日期型
AsInt(任意类)
将某个任意类型值转换成整型
AsNum(任意类)
将任意类型值转换为数值型。
AsStr(任意类)
将某个任意类型值转换成字符型
逻辑函数
AND(bool1,bool2,...)
求多个逻辑表达式相与的结果。
例如:
AND(a1:a5,b1,b3,TRUE,C1 & C5) 返回值为逻辑型True,False。
判断为空:BLANK(val)
判断一表达式是否为空(NULL)。一般常用在判断一表元是否填写。
例如:
BLANK(A3) 返回值为逻辑型True,False。
条件赋值:IF(bool,val1,val2)
条件赋值函数。 如对逻辑表达式bool求值结果为TRUE,则返回val1,否则返回val2。
例如:
if(T(2)="01",C3,C3+@-1D3) 在月报任务中,该表达式判断当前报表期的月份是否是1月,如果是,则取C3表元的值,否则取C3与上期D3的和。
该函数返回值由实际返回内容决定。
OR(bool1,bool2,...)
求多个逻辑表达式相或的结果。
例如:
OR(a1:a5,b1,b3,TRUE,C1 & C5) 返回值为逻辑型True,False。
其它函数
CodeStr(DroupNmae,Code)
该函数根据指定的代码组名和代码值返回代码对应的文字串。 GroupName为代码组名,参数类型为字符串。 Code也是字符串,表示代码。
例如:
CodeStr("科目代码",A2) 若表元A2的值为 "010201",而代码"010201"在代码组“科目代码”中对应的字符串为"差旅费",该函数返回: "差旅费"
CodeStrN(DroupNmae,Code,Ord)
该函数根据指定的代码组名、代码值和需要取出的代码文字的序号返回对应的文字串。 GroupName为代码组名,参数类型为字符串。 Code也是字符串,代表代码。 Ord:文字串在一个代码行中的序号,0表示第一个,1表示第二个等等。
在一般情况下,一个代码组中总是一个代码对应一个文字串;但是有些代码组中,一个代码可以对应一个主文字串和最多九个辅助文字串,便于用户在特殊情况下使用。
例如:
请看下面的产品代码:
代码 | 主文字串 | 辅助文字串1 | 辅助文字串2 |
---|---|---|---|
01011 | 一类卷烟 | 箱 | 2 |
01012 | 二类卷烟 | 箱 | 2 |
01020 | 雪茄烟 | 箱 | 2 |
01030 | 烟丝 | 吨 | 2 |
01040 | 烟叶 | 吨 | 1 |
02031 | 一类啤酒 | 吨 | 2 |
则:
CodeStrN("产品代码","01011",0) 该函数返回: "一类卷烟"
CodeStrN("产品代码","01011",1) 该函数返回: "箱"
如果第三个参数Ord是负数,则返回如下值:
-1:返回对应代码的级次,级次从0开始
-2:返回代码的父代码,如果没有父代码则返回空
-3:如果代码是叶子节点则返回TRUE,否则返回FALSE
-4:如果代码是跟节点则返回TRUE,否则返回FALSE
例如:
CodeStrN("产品代码","01011",-2)
DATASET()
返回当前所在数据集的名称
例如:
当前为主数据集,则返回MAIN;
当前为舍位平衡数据集,则返回MAIN_PH;
当前为选择汇总数据集,则返回MAIN_SS;
当前为测试数据集,则返回“测试数据集”
GENIDC(Str,Tag)
根据Str中的前8个字符,产生IDC码,即自动生成校验码。 当Tag为1时,8位码与校验码之间带横线'-', 如43434345-5;否则不带。
GetHJH(CellNmaeStr)
该函数返回某个变长表表元的合计值。 参数CellNameStr为变长表表元名组成的串。 请注意,由于变长表表元不能参加一般报表的公式运算, 所以这里必须用表元名串。另外,表元名必须为变长表 数据行表元,而不是合计行。
例如:
GetHJH("B0->B3") 该函数返回B0表中的B3表元的合计值。
该函数也支持取前期值,如GetHJH("@-1B0->A2")表示 取上一期B0表中A2表元的合计值。
His(C,N)
取上几期的指标,C表示取数指标,为字符型;N表示 上几期,为整型;此函数功能主要是对任意表元跨报表期取数;
例如:
C5=His("K03->C6",3) 表明C5指标的值为K03表中C6指标上3期的数值,若当前 报表期是2003年4月,则C5指标的值等于2003年1月K03表 中C6指标值。
注:此函数主要为兼容早期任务而存在;现在推荐使用 TC( )函数。上述例子中的公式可用TC( )表示为: C5=TC(":K03:C6","@-3","")
His1(N,C)
取指定报表期的指标值。 N表示取数指标,C为字符串表达式,表示报表值;
例如:
C5=His1("C6","200302") 即表明C5指标值为2003年2月C6指标的值。
注:此函数主要为兼容早期任务而存在;现在推荐使用 TC()函数。
上述例子中的公式可用TC()表示为: C5=TC(":B1:C6","200302","")
Id()
返回当前报表户的代码。
例如:
ID() ID()也可写成UserID()
IDC(Str)
判断字符串Str是否为国家标准单位代码。 若是,则返回TRUE,否则返回FALSE。
IsFilled(Str)
该函数判断当前报表户对应的某个报表是否已被填过。 参数Str为报表代号。
例如:
IsFilled("gdzc") 该函数判定固定资产表是否已填。
IsHZ()
判断当前报表是否为汇总报表。
例如:
IsHZ() 若是则返回TRUE;否则返回FALSE。
LNAME()
返回注册节点的单位名称
例如:
任务中注册的单位名称为“亿信华辰”,则返回的 值为“亿信华辰”。
Logininf(num)
Logininf(0):返回登陆id
如果使用的是运行系统或者报表精灵,并且任务没有 设置需要密码保护,则返回空,否则返回对应的登陆者;
如果是使用的插件并且登陆者是报表单位,则返回 报表单位的单位代码。
如果是服务器用户的身份登陆的,则返回服务器用户 的帐号。
Logininf(1):返回登陆者的名称
如果使用的是运行系统或者报表精灵,并且任务没有 设置需要密码保护,则返回空,否则返回对应的登陆者;
如果是使用的插件并且登陆者是报表单位,则返回 报表单位的单位名称; 如果是服务器用户的身份登陆的,则返回服务器 用户的名称。
Logininf(2):
如果是运行系统或者报表精灵则返回登陆者的角色: “Admin”,“Operator”,“Readonly”,分别表示管 理员,数据操作员和数据查看员;
如果任务没有设置需要密码保护则总是返回“Admin”。
如果是插件并且登陆者是报表单位则返回admin。 如果是服务器用户,返回“user”。 如果是报表户,返回"bbh"。
如果是以服务器用户登陆的,并且有写权限的返回 Operator,否则返回Readonly
Logininf(3):
返回登陆者的登陆工具:runsys、plugin、sparrow, 分别表示使用的是运行系统、插件、报表精灵。
Logininf(4):
如果使用的运行系统或者报表精灵,则总是返回空。
如果是插件并且登陆者是服务器用户,则返回登陆者 的名称。
Logininf(5):
如果使用的运行系统或者报表精灵,则总是返回空。
如果是插件并且登陆者是服务器用户,则返回登陆者 的所属部门。
L_ID(Tag)
返回本机注册当前任务所用的代码。
例如:
L_ID(1)返回注册用的UserID;
L_ID(0)表示注册用的UpID。
NAME()
与Id类似,该函数返回当前报表对应的报表户名称。
例如:
当前表页为的填报单位为“亿信华辰”,则该函数返回"亿信华辰"。
如: Name() Name()也可写成UserName()
OffsetCodestr("CodeGroup","Code",FieldNo,Offset)
取代码组中某一代码的前或后offset个代码对应的文字串的FieldNo段的值,返回值为字符串。
其中:
CodeGroup:表示代码组名
Code:表示代码组中的代码
FieldNo:表示代码组中文字串的顺序
Offset:表示代码在代码组中的顺序
FieldNo取值:
-1 返回代码
-2 返回代码组第一个代码
-3 返回代码组最后一个代码
0 返回主文字串
大于0 返回辅文字串,如1返回辅文字串1
Offset取值:
取正值表示向当前代码的后几行滚动(取值1表示定位 到代码组中该代码下面一行代码)
取负值表示向当前代码的前几行滚动(取值-1表示定位 到代码组中该代码前面一行代码)
取零表示定位到Code代码所在行
例如:
代码组“产品代码”中的代码为:
代码 | 主文字串 | 辅文字串1 | 辅文字串2 | 辅文字串3 | 辅文字串4 |
01011 | 一类卷烟 | 箱 | 2 | 45 | 150 |
01012 | 二类卷烟 | 箱 | 2 | 30 | 100 |
01020 | 雪茄烟 | 箱 | 2 | 40 | |
01030 | 烟丝 | 吨 | 2 | 30 | |
01040 | 烟叶 | 吨 | 1 |
则:
Offset取零,定位到代码所在行:
OffsetCodestr("产品代码","01030",0,0)="烟丝" FieldNo取0,返回主文字串
OffsetCodestr("产品代码","01030",-1,0)="01030" FieldNo取-1,返回代码
OffsetCodestr("产品代码","01030",-2,0)="01011" FieldNo取-2,返回代码组第一个代码
OffsetCodestr("产品代码","01030",-3,0)="01040" FieldNo取-3,返回代码组最后一个代码
OffsetCodestr("产品代码","01030",1,0)="吨" FieldNo取1,返回代码01030的辅文字串1--吨。
OffsetCodestr("产品代码","01030",3,0)="30" FieldNo取3,返回代码01030的辅文字串3--"30"。
Offset取其他,定位到代码前或后几行: OffsetCodestr("产品代码","01030",-1,1)="01040" Offset取1,定位到代码01030的后一行,FieldNo取-1, 返回代码。
OffsetCodestr("产品代码","01030",-1,-1)="01020" Offset取-1,定位到代码01030的前一行,FieldNo取-1, 返回代码。
OffsetCodestr("产品代码","01030",0,-3)="一类卷烟" Offset取-3,定位到代码01030的前三行,FieldNo取0, 返回主文字串。
OffsetCodestr("产品代码","01030",3,-3)="45" Offset取-3,定位到代码01030的前三行,FieldNo取3, 返回辅文字串3。
OffsetCodestr("产品代码","01030",-3,-1)="01040" OffsetCodestr("产品代码","01030",-3,1)="01040" 以上2个公式中,FieldNo取-3,无论Offset取何值,总返 回代码组中的最后一个代码。
OffsetCodestr("产品代码","01030",-2,-1)="01011" OffsetCodestr("产品代码","01030",-2,1)="01011" 以上2个公式中,FieldNo取-2,无论Offset取何值,总返回 代码组中的第一个代码。
PC(cellname,step)
变长表中取历史指标函数。 其中cellname为表元名,用字符串表示;Step表示步长, 如-1表示上一期。应用此函数的前提是取数表与被取表 之间必须有一致的关键字定义!
例如:
PC("c2",-3)返回c2表元上3期的值。
QS(DATENAME,BBQ,BBH,ZBNAME,OPTIOIN)
QS函数返回一个字符串型,它只接收五个字符串型的参数: 第一个参数表示要取哪个取数设置的数据,此参数必须指定。 第二个参数是取哪个期的数据,此函数可以为空表示取 当前期,为@-1表示前一期,为200212--表示取2002年12 月的数据。 第三个参数是取那户的数据,为空表示取当前户的数据, 为001表示是取报表户代码为001的单位的数据 第四个参数是表示取哪个指标。 第五个参数是自定义选项以备扩充,此参数的形式是 key1=value1;key2=value2的形式可以任意扩充。 这些参数会依次再服务器上传个第三方开发商实现的类,
例如:
QS("KM","20050504","0001","A5","") 此函数主要用在插件上在线填报时从数据源中取数。
SELF()
返回公式所在表元的值。
例如:
表元A2的公式为if(blank(self()),today(),self()), 则self()返回A2的值。
该表达式判断某表元是否为空,如为空,则将当前日期 赋给A2表元注意,这里不能用if(blank(a2),today(),a2), 这样就会有循环调用。
strcount(STR:substr)
统计字符串中串的个数。
其中:
str:为多个字符串组成的字符串组,
例如, "adb,bc,asd,af",adb,bc,asd,af分别为一个字符串。
substr:为上述的字符串组中多个字符串间的分隔符。 特别地, 如果str为空,则函数的返回值总为0; 如果substr为空,则函数的返回值总为1; 如果分隔符在串中不存在,也总返回1。
例如:
strcount("23,44,54,44",",")=4
strcount("",",")=0
strcount("23,44,54,44","")=1
strcount("23,44,54,44","、")=1
该函数可以用于统计多选的代码组中代码的个数。
SVal()
浮动分析表中取浮动值的函数,即浮动设置中浮动表元的占位符号! 浮动分析表中定义分析区时设置浮动行的条件时要用到此函数。 浮动分析表刷新后,此函数就被浮动设置中的浮动依据代替。
T(num)
该函数返回当前报表期的某一段,即T(1)返回报表期的 第一段,T(2)返回第二段,T(3)返回第三段。
根据报表期类型的不同,T(1),T(2),T(3)返回的内容是不同的。 对于日报,T(1)、T(2)、T(3)返回的分别是年、月、日; 对于月报,T(1)、T(2)返回的分别是年、月, T(3)无返 回值; 对于季度报表,T(1)返回的仍然是年,T(2)则返回季度值, T(3)无返回值。 对于旬报和五日报,T(1)、T(2)返回的分别是年、月, 旬报中T(3)返回上、中或下,五日报中T(3)则返回1日-5日, ……20日-25日 或 26日-月末。
函数返回类型为字符串。 如果num小于零,则返回的是当前报表期的前期。 参数num必须为整数。 举例: 对于月报,如果当前表期为2002-11,则: T(1)="2002" T(2)="11" T(-1)="200210" T(-2)="200209" 对于季报,如果当前报表期为2006年第01季度,则: T(1)=”2006” T(2)=”01” 月报、季报中不能返回T(3)。同理,年报中不能返回T(2)、 T(3)。
T(num)也可写成BBQ(num)
跨任务取数:Task_Cell(任务别名,RpfName,BBQ ,UserID,FieldName)
跨任务取数公式的另一种写法,
“任务别名”通过定义关联任务来设置。注意:“任务别名” 要区分大小写!
RpfName表示报表名称,
BBQ、UserID分别表示报表期和报表户代码,FieldName 表示表元名。
其中:“任务别名”为空表示取本任务相应表元值, BBQ和UserID都可以为空,默认为当前报表所在的值; UserID前带则代表汇总表,如"23456789",也可以 就是"*"。
取外任务表元值时,若成功,则返回对应的值;否则返 回NULL。
与TC只能取数值型表元不同的是,Task_Cell可取任意 类型表元的值,返回的结果为字符型。
例如:
Task_Cell("YB","XXB","200312","23456789","B5"), 表示取YB任务中XXB的B5表元2003年12月报表户代码为 23456789的值。 同TC一样,Task_Cell也可以从变长表取数,也必须有 关键字表元和代码表元。 如:Task_Cell("YB","00001@A1","","","B5")
注:此函数主要为兼容早期任务而存在;现在推荐使用 TC( )函数。上述例子中的公式可用TC( )表示为: TC("YB:XXB:B5","200312","23456789") TC("YB:00001@A1:B5","","")
跨任务取数:TC(OutCell,BBQ,ID)
跨任务取数函数。 OutCell:由任务别名、报表名、表元名3部分合成。 BBQ:对应外部任务中的报表期;或写作"@-1",表示取上期的数据。 ID:外部任务中的报表代码。 其中BBQ和ID都可以为空,默认为当前报表所在的值; ID前带则代表汇总表。如"23456789",也可以就是"*"。 取外任务表元值时,若成功,则返回对应的值;否则返回NULL。
一个参数完整的公式例子: TC("YB:B1:C5","200501","420000") 其中: YB:为任务别名,即关联任务的代号,可在运行系统或设计系统的“关联任务”菜单中定义。 B1:为关联任务中的报表名称,即要从此表中取数。 C5:为关联任务中的表元,即要从此表元中取数。
TC函数的常见用法:
(1)、取本任务中指定报表期的某个指标。
取本任务的数据时:
第一个参数(OutCell)应写作:":B1:C5",注意第一个冒号“:”不能省略。
此时第二个参数(BBQ)不能为空,可写作"200411",若要取当前期的上期的值则可写作:"@-1"
第三个参数和取其他任务时一样,可以为空
如:取本任务上期B1表的C5表元的当前单位的数据
可写作: TC(":B1:C5","@-1","")
(2)、TC函数中的字段名可以是一表达式,单表达式中的表元必须来自同一张报表。 TC("NB:B1:C5+D5","2004",""),其中C5+D5就是一表达式。
(3)、TC函数可写成“TC(OutCell)”的形式,如TC("YB:B1:C5"),即只有第一个参数,表示取的是本报表期当前单位的数据。
(4)、TC支持从变长表跨任务取数,变长表必须有关键字或者代码表元。 TC(":1001@B2:C3","",""),返回变长表b2中关键字为1001那行的C3的值,常用在基本表或分析表从变长表中取数。 TC(":"^A3^"@B0:C3","",""),表示取对应的变长表多行的值,常用在一个变长表从另外一个变长表取数,其中"^^"里面还可以是更为复杂的表达式,
如:TC("scyb:"^CodeStrN("产品产量",A2,1)^"@CPCL:H3",t(1)^t(2),“”)。
请注意,TC(":1001@B2:C3","","")只能取到指定代码表元值为"1001"的那一行值。而TC(":"^A3^"@B0:C3","","")可以取到与关联任务B0表中关键字A3相同多行的值。
TC也支持取变长表的合计行的值,如:
TC(":HJH@B1:B2","",""):返回的是b1表的b2表元的合计行的值,即@符号前面如果是hjh则返回的是合计行的值,插件和报表精灵也支持,hjh大小写不敏感
UpId()
与UserId类似,该函数返回当前报表的上级代码。
例如:
假如当前表页为武汉市,则该函数返回湖北省的代码。
IDCHECK(checkName ,str )
根据传入的规则名 checkName 获得校验码字符串str 的校验码 参数 checkName
算法名称:目前支持"IDC" "PDY" "PID",不区分大小写
参数 str
代码原值
返回值:校验位,不合法的返回空格#20
例如 :
IdCheck("IDC","1234567")
IdCheck("PDY","1234567")
IdCheck("PID","4205001979122651")
WildMatch(Str1,Str2)
判断Str1与Str2是否模式匹配。
例如:
WildMatch("ABC","A")返回True; WildMatch("ABC","A?C")返回True; WildMatch("ABC","AB")返回False; 其中*、?为通配符。
UserId()
返回当前报表户的代码。
例如:
UserId() 与Id()功能相同。
UserName()
返回当前报表户的名称。
例如:
UserName() 与Name()功能相同。
CheckTag()
检查当前报表户数据的Option字段的首字符是否为“1”。 返回True表示该条数据Option字段以“1”开头, 返回False表示该条数据Option字段不是以“1”开头。
例如:
CheckTag() 注:无法定位到这户也返回False。
UpIdExist()
判断在信息表中当前报表户的上级是否存在。
例如:
UpIdExist() 返回True表示存在,返回False表示不存在。 注:如果当前报表户为注册节点,总返回True。
BBQ(offset)
返回与当前报表期相关的串。
offset=1表示取当前报表期的“年”
offset=2表示取当前报表期的“月”
offset=3表示取当前报表期的“日” offset为其他值的时侯,表示取与当前报表期相距offset个单位的报表期串。
例如:
当前报表期为“2009年2月”,则BBQ(2)=2;
注:
(1)offset为其他时,表示取前offset期或后offset期的报表期串。 (
2)与T函数功能相同。
NUMUPPER(F)
返回F指定的浮点数的汉字串。
举例:
NUMUPPER(3602.105)=“三千六百零二点一零五”
SCRIPTEXP(funcName, param1, param2,...)
返回执行脚本中的自定义公式后的结果。 参数funcName是函数名称。param1,param2,...代表的是funcName这个函数所需要的参数。 注:要执行脚本中的自定义公式,必须先到脚本管理器中,右键“任务事件”,添加“OnCustomExp”,在其中自定义要调用的函数。具体加入规则见该文件内函数编写说明。
例如:
假设onCustomExp的脚本中定义了"GetXun"函数,对一个时间型的表元"C2",其值为2009年12月17日,则执行 SCRIPTEXP("GetXun", C2)="中旬"
假设onCustomExp的脚本中定义了如下"GetAddOne"函数: procedure GetAddOne(p1: string; var value: string);
var
i: integer;
begin
i:=strtoint(p1);
value:=inttostr(i+1);
end;
对一个整型表元B2=11,执行 SCRIPTEXP("GetAddOne", B2)="12"
TXT(Exp, bbqStr)
返回值是备注型,返回根据对bbqStr指定的报表期计算Exp(可以是表元名也可以是合法的表达式)的值。
其中参数Exp为表元名或者合法的表达式。Exp为表元名时,表示获取相应报表期内的表元值的字符串形式。
例如:
TXT("C5", t(1)^"02") 表示获取当前报表器所在年份的第二个月中的C5表元值。
THISRPT()
返回运行系统当前展示的报表的简称。
例如:
运行系统正在显示的是信息表(假设期简称为XXB),则 THISRPT()=“XXB”
FINDCODE(cgName, condition)
返回cgName指定的代码组中满足特定条件condition的代码名称。
返回值和两个参数都是字符串类型。
ISUPID(id)
判断一个报表户是否是当前报表户的上级
举例:
假设1000是100101的上级,而当前报表是100101,
则 IsUpId("1000")=T 即返回TRUE
PMI(name)
返回当前报表的名为name的整型报表参数值。
name为字符串类型。
PMN(name)
返回当前报表的名为name的浮点数类型的报表参数的值。
name为字符串类型。
PMC(name)
返回当前报表的名为name的字符串类型的报表参数的值。
name为字符串类型。
PMD(name)
返回当前报表的名为name的日期类型的报表参数的值。
PML(name)
返回当前报表的名为name的布尔类型的报表参数的值。
ISPLANARXJ()
判断鼠标当前选中数据行是否是变长表小计行。 如果是返回“T”(True), 反之返回“F”(False)。
SUMCHILD(rpt, calcExp, condition)
汇总下级某些符合条件的表元。 返回值为汇总后的和值。
参数说明:
rpt:报表简称
calcExp:表元值计算表达式
condition:汇总条件
CODEISPARENT(cgName, code1, code2, recursive)
判断在cgName指定的代码组中,code1是否是code2的父节点。 cgName是代码组的名称。code1和code2都是代码值。
recursive是布尔类型的,为True时递归查找code2的父节点,表示判断code1是否是code2的上级节点。
recursive为False时,判断的是code2是否是code1的直接下级。
CODEISCHILD(cgName, code1, code2, recursive)
判断在cgName指定的代码组中,code1是否是code2的子节点。 cgName是代码组的名称。code1和code2都是代码值。
recursive是布尔类型的,为True时递归查找code2的子节点,表示判断code1是否是code2的下级节点。
recursive为False时,判断的是code1是否是code2的直接下级。
PDY(id)
计算指定id的PDY码(组织机构代码)。 返回值为PDY码。参数为字符串类型。
例如:
PDY("51000010")=7;
IDCARD(id)
计算指定id的身份证号码。 返回值为身份证号码,参数为字符串类型。
例如:
IDCARD("42112219820214633")=421122198202146331
CUSTOMPV(Type, Name, propName)
返回任务、报表或表元的一个扩展属性的值。
其中,Type为业务对象的单位,可以从“task”“report”“cell”中取值,表示是任务、报表还是表元。
Name为该业务对象的名字。propName为属性名。
UINF(QueryStr)
获取指定用户的某个属性值。
参数QueryStr为要查询的属性,
(1)获取服务器上用户登录信息 如要获取当前登录者的某个扩展属性 使用函数uinf(“user_mh”) 下划线前部分表示用户属性类别,后部分为属性名也就是字段名
Uinf(“user属性名”) 表示获取用户的属性 Uinf(“dp属性名”) 表示获取用户所在部门的属性
例如:
如果服务器上部门列表中有个属性名为 ask, 那么要获得当前等度者的这个信息
函数使用如下:Uinf("dp_ask")
VFIELD(name)
根据字段名返回该字段对应的值。
例如:
VFIELD("B2")=3.2 表示B2表元的值为3.2。
VFIELD("C3.B5")=6 表示C3报的B5表元的值为6。
注:可以跨表取表元值,报表名和表元名之间要加一个点。