IUFO中公式的一般应用
IUFO中的主要公式是指标公式,指标公式是最常用也是最难用的公式,这部分公式的定义与关键字的定义有很大的关系。
Mselect公式:
相同关键字:相同关键字指公式定义位置的关键字和公式中所有指标的关键字相同。如: 表A 和表B都是固定表,主表关键字相同,那么此时B表指标取A表数据可以直接使用mselect(‘A->指标名称’)。表示取具有相同关键字条件的数据。
表A是固定表,关键字:单位,月,客商, 1 2 3 A 销售额 销售折让 已付金额 B C 销售量 应收款项 剩余款项 D A表取B表数据的公式: B1=mselect(‘B->销售额’) D1=mselect(‘B->销售量’)
表B是动态表,主表关键字:单位,月,子表关键字:客商, 1 2 3 A 客商 <关键字:客商> B 销售额 <销售额> C 销售量 <销售量> D B表取A表数据的公式: B2=mselect(‘A->销售额’) C3=mselect(‘A->销售量’)
无论指标在固定区还是动态区只要具有相同关键字组合,这样的指标相互取数就可以直接使用mselect不加条件。
不同关键字:如果表A关键字多于表B,则表B取数时必须加上A表多余关键字条件的约束,如下:
表C 固定表,主表关键字:单位,月,币种, 1 2 3 A 货币资金 B 年初数 <货币资金年初数> C 年末数 <货币资金年末数> D 表D 固定表,主表关键字 单位,月
1 2 3 4 A 单位:xx 币种 美元 港币 B 时间:xx 货币资金年初数 C 货币资金年末数 D <美元货币资金年初数> <美元货币资金年末数> <港币货币资金年初数> <港币货币资金年初数> D表中定义公式:
B3=mselect(‘C->货币资金年初数’,,,k(‘币种’)=‘USD’) C3=mselect(‘C->货币资金年末数’,,,k(‘币种’)=‘USD’) B4=mselect(‘C->货币资金年初数’,,,k(‘币种’)=‘CNY’) C4=mselect(‘C->货币资金年末数’,,,k(‘币种’)=‘CNY’)
反过来如果C表取D表的数据,从写法上看不用加关键字约束条件,但会使得C表中对于同一单位同一时间不同币种下取到的数据都是一样的,所以一般来说关键字多的报表从关键字少的报表中取数没有实际意义。
期间偏移:
Mselect公式可以通过期间偏移取指标相对当前时间的前期或后期的值。
如C表中,货币资金年初数也就是上年的年末数,可以取年末数相对当前月向前偏移-zmonth()个月,B2=mselect(‘货币资金年末数’,’月’,-zmonth()),其中时间属性可以缺省,缺省情况下默认为当前指标的关键字中的时间。
如果取上年同期数则可以向前偏移12个月,或向前偏移一年,分为表示为mselect(‘货币资金年末数’,’月’,-12),mselect(‘货币资金年末数’,’年’,-1)
Mselecta公式:
用法和mselect公式相似,只是把具体指标可以替换成以单元编号表示的区域,如D表中公式可以写成:
B3:C3= mselecta(‘C->B2:C2’,,,k(‘币种’)=‘USD’) B4:C4= mselecta(‘C->B2:C2’,,,k(‘币种’)=‘CNY’)
Msum公式:
动态区的合计:msum函数,加主表关键字条件的限定,一般来说几个关键字几个限定条件,要注意的是如果小的时间关键字,如月,周,旬等前应加上额外的限定条件,以使得表示的时间明确。
如:
表E 动态区,主表关键字: 单位,月 1 2 3 A 客商 <关键字:客商> B 销售额 <销售额> C 销售量 <销售量> D B2=Msum(‘销售额’,k(‘年’)=zyear() and k(‘月’)=zmonth() and k(‘单位’)=zdw())
Msum统计某一口径的数据:
如按照地区统计资产总额,资产总额来自于关键字为单位、月的资产负债表F表项目,地区信息来自于单位结构信息。
F表:固定表,资产负债表,主表关键字:单位,月 1 2 A 货币资金 ....... B 年初数 C 年末数 D 应收帐款 ...... 负债及所有者权益合计 <货币资金年初数> <资产总额> <资产总额年初数> <资产总额> 44 资产总额 G表:固定表,主表关键字:月 1 2 3 4 5 6 A 01北京 02天津 03河北 04河南 ...... B 资产总额 求特定年份月份下某一个地区资产总额的合计,因此公式中要加上时间限制,而对某个地区单位的限制是通过单位结构信息中的属性来限制的。 G表公式:
B2=msum(‘F->资产合计’,K(‘年’)=zyear() and k(‘月’)=zmonth() and k(‘单位->地区’)=‘01’)
B3=msum(‘F->资产合计’,K(‘年’)=zyear() and k(‘月’)=zmonth() and k(‘单位->地区’)=‘02’)
B4=msum(‘F->资产合计’,K(‘年’)=zyear() and k(‘月’)=zmonth() and k(‘单位->
地区’)=‘03’) ......
以上的情况适用于代码没有下级的情况,如果01北京下有0101东城区,0102西城区,那么取北京地区单位资产总额的合计,条件必须写成k(‘单位->地区’) like ‘01%’。 Msum中特定取某个单位的下级单位合计,可以使用条件k(‘单位->上级单位编码’)=zdw()
Mcount,Mmax,Mmin,Mavg这几个函数的用法基本同Msum
Mno,Mpercent特定用在动态区,返回动态区某个指标的排名、占合计比。
Codename公式:
codename(‘代码值’,’代码项目’),返回代码项目对应代码值的名称,如codename(‘CNY’,’币种’)返回“人民币元”,可用在动态区显示代码对应的名称。 如: 1 2 3 A 客商编码 <关键字:客商> B 客商名称 <客商名称> C 销售额 <销售额> D 销售量 <销售量> B2= codename(k(‘客商’),’客商’),表示取当前客商代码值对应的客商名称,当然客商信息必须在代码中存在。
关于iufo函数和其他业务系统函数结合使用,计算不出数据或数据错误,如何查错的问题:
iufo的函数经常需要和其他业务系统的公式结合使用,这个时候,iufo函数经常是作为其他业务系统公式的一个参数,如:
GLQM('2181','','','[客商辅助核算='+DWXX(k('对方单位编码'),'单位->客商核算编码')+']','','本币','Y','','本币')
像这样的公式,由于既有iufo函数又有业务系统函数,很容易写错,出了错也难以一下子查清哪个环节的问题,如果公式计算不出数据,查错第一步,去掉iufo函数,测试将其换成具体值,是否能计算出数据,如
GLQM('2181','','','[客商辅助核算=050401]','','本币','Y','','本币')
如果修改后的公式不能计算出数据,查询业务系统中有无数据,排除各种原因仍不正确,将问题提交给各业务系统对应的开发组。
如果计算正确,那么继续测试单独iufo函数是否能计算出数据,计算出的数据是否和希望得到的数据一致:
DWXX(k('对方单位编码'),'单位->客商核算编码')=?050401
如果iufo函数数据计算不正确或计算不出数据,再进一步检查iufo函数定义是否有误,如果没有问题再检查组合后的公式是否正确:
如果参数位置只有iufo函数,直接写入,如:
GLQM('2181',zyear(),zmonth(),'[客商辅助核算=050401]','','本币','Y','','本币')
要注意的是iufo函数一定不能放在引号之内,否则将作为字符处理,不会先计算出数据。
如果参数位置已经有固定的字符串,则必须使用加号连接,前后的字符串分别用引号引起来,加号之间的iufo函数不能加引号,如:
'[客商辅助核算='+DWXX(k('对方单位编码'),'单位->客商核算编码')+']'