大家好,欢迎来到IT知识分享网。
前言
上篇主要介绍HFM系统中打印日志的程序,本篇主要介绍HFM系统中的计算规则。在HFM计算规则中,计算规则通常都集中放在Calculate程序中。涉及的业务场景主要包括:期初结转,科目重分类,会计校验,税金求值等。常用的脚本函数主要包括:Exp、GetCell、Clear、Round、NoRound等。在实际项目中,为了简化项目复杂程度,提高开发效率以及代码执行效率,往往会对通用规则进行总结,形成专门用来计算某类业务的自定义函数,而对于一些特殊场景,则会采用普通的直接赋值方式。接下来简单为大家介绍上述几个函数的使用方法,希望能起到抛砖引玉的效果。
HFM计算规则常用函数:
Exp
函数介绍
Exp函数是HFM中的顶级对象,只能以HS.Exp的形式使用,并且只能在计算规则(Calculate)、折算规则(Translate)和分摊规则(Allocate)中使用。它不能在合并规则(Consolidate)中使用。
- 语法
Exp函数的基本语法是:
HS.Exp "DestPOV = Expression"
其中DestPOV是目标视点,表示数据放置的位置;Expression是计算表达式。
- 维度组合
在Exp函数中,维度组合一般只用Account(A)、ICP(I)、C1-CN(N代表自定义维度的个数)。每个维度之间用英文点.分割,每个维度使用短名称和#连接。
- 维度交叉点考虑因素
如果不指定Exp从中获取数据以及Exp放入数据的维交叉点,则源和目标交叉点由以下因素决定:
- 目标(等号左边)。如果未在等号左侧指定任何ICP维或C1-Cn维的成员,则Exp会将数据写入所有与ACCOUNT维度为有效组合的POV上。
- 源(等号右边)。如果未在等号的右侧指定维的成员,则存在以下几种可能:
- 如果维只有一个成员,则Exp会从此成员与源科目的交叉点获取数据。
- 如果维与源科目只有一个有效的交叉点,则Exp会从此交叉点获取数据。
- 如果维与源科目有几个交叉的成员,则数据的源交叉点由等式左侧决定。
- 同时计算多个科目
Exp函数支持在其参数的等号右边进行加、减、乘、除运算。例如,计算规则使用Sales帐户的值除以UnitsSold帐户的值,然后将商插入AvgPrice帐户中。
- 示例
以下是一个Exp函数的示例,将UnitsSold账户与自定义维的[None]成员交叉的单元格设置为40000:
HS.Exp "A#UnitsSold.C1#[None].C2#[None].C3#[None].C4#[None] = 40000"
另一个示例将Taxes帐户与自定义维的[None]成员交叉的单元格设置为Sales帐户与指定的自定义维交叉的单元格中数据的6%:
HS.Exp "A#Taxes.C1#[None].C2#[None].C3#[None].C4#[None] = A#Sales.C1#AllProducts.C2#AllCustomers.C3#[None].C4#[None] * 0.06"
这些示例展示了Exp函数在HFM系统中如何用于数据的计算和分配。通过Exp函数,用户可以灵活地在HFM系统中进行复杂的财务数据处理和分析。
在Oracle Hyperion Financial Management (HFM)中,GetCell函数用于从数据库中检索单元格的数据。以下是GetCell函数的详细介绍:
GetCell
函数用途
GetCell函数的主要作用是从HFM数据库中获取特定单元格的数据。这个函数可以在计算(Calculation)、转换(Translation)、合并(Consolidation)和分摊(Allocation)等类型的规则中使用。
GetCell函数的基本语法如下:
HS.GetCell("POVExpression")
其中POVExpression是一个有效的视点表达式,用于指定要从中检索数据的单元格。
GetCell函数返回指定单元格中存储的数据。如果函数返回多个值,则会发生错误。
以下是一个GetCell函数的使用示例,它将变量dData赋值为存储在Sales账户和Custom1维的GolfBalls成员交叉点中的金额:
Dim dDatadData = HS.GetCell("A#Sales.I#[ICP None].C1#Golfballs.C2#Customer2.C3#Increases.C4#[None]")
在这个示例中,A#Sales指定了账户维度,I#[ICP None]指定了实体维度(这里使用的是默认的实体),C1#Golfballs指定了自定义维度Custom1的成员GolfBalls,后续的.C2#Customer2.C3#Increases.C4#[None]分别指定了其他维度的成员。
GetCell函数返回的数据类型是字符串,即使单元格中存储的是数字。当引用包含HFM数据的单元格时,GetCell返回的是字符串值而不是数字。如果行或列参数引用了一个扩展的段,则使用左上角扩展的单元格。GetCell函数是HFM中一个非常有用的工具,它允许用户在规则中动态地获取和使用数据,从而实现复杂的数据处理和分析。
Clear
在HFM中,Clear函数用于从特定的单元格组合中删除数据。这个函数可以在计算(Calculation)、转换(Translation)、合并(Consolidation)和分摊(Allocation)等类型的规则中使用。以下是Clear函数的详细介绍:
函数用途
Clear函数的主要作用是从HFM数据库中的特定单元格组合中移除数据。这对于在执行新的计算或合并之前清理旧数据非常有用。
Clear函数的基本语法如下:
HS.Clear "Account.ICP.Custom1.Custom2.Custom3.Custom4"
其中,Account是有效账户成员的名称,ICP是有效ICP(Intercompany Party)成员的名称,Custom1到Custom4是有效自定义维度成员的名称。
- 参数说明
- Account:科目维度的有效成员名称。
- ICP:往来单位维度的有效成员名称。
- Custom1, Custom2, Custom3, Custom4:自定义维度1到4的有效成员名称。
- 清除当前视点的所有单元格
要清除当前视点(由当前实体、期间、情景、值、视图和年份成员组成)相交的所有单元格,可以在A#字符后放置ALL关键字,如下例所示:
HS.Clear "A#ALL"
清除自定义或ICP维度的所有交叉单元格
要清除所有与自定义或ICP维度相交的单元格,可以使用ALL关键字或省略A#字符。以下示例省略了A#字符,以清除与自定义维度1的GolfBalls成员相交的所有账户的单元格数据:
HS.Clear "C1#GolfBalls"
示例
以下是一个Clear函数的使用示例,它清除了Sales账户和自定义维度1的GolfBalls成员交叉点存储的数据:
HS.Clear "A#Sales.C1#GolfBalls"
注意事项
Clear函数不会在清除数据后留下硬零(hard zeros)。如果需要保留硬零,可以考虑使用其他方法,例如使用带有’NODATA’的数据文件进行合并。Clear函数在执行时,如果指定的单元格组合不存在数据,则不会有任何效果。通过使用Clear函数,用户可以有效地管理和维护HFM中的财务数据,确保数据的准确性和及时更新。
在HFM中,Round和NoRound函数用于控制数值的四舍五入行为。
Round 函数
Round函数用于将数据舍入到指定的小数位数。在HFM中,这个函数可以在计算(Calc)、转换(Tran)、合并(Con)和分摊(Alloc)等类型的规则中使用。
语法:
HS.Round(expression, decimalplaces)
expression:要舍入的数值表达式。
decimalplaces:舍入到的小数位数。如果为正数,则舍入到小数点后指定位数;如果为负数,则舍入到小数点左侧指定位数。
应用场景:
在财务数据处理中,经常需要将金额保留到指定的小数位数,Round函数可以轻松实现这一需求。例如,将金额舍入到最接近的分(两位小数):
HS.Round("A#Sales", 2)
这会将Sales账户中的数值舍入到最接近的分。
NoRound 函数
NoRound函数用于关闭取整操作,即保持数据的原始精度,不进行任何四舍五入。
语法:
HS.NoRound(expression)
expression:原始数值表达式。
在某些情况下,可能需要保持数据的精确值,而不希望进行任何形式的四舍五入。例如,在处理精确的科学计算或需要保持原始数据精度的场景中,可以使用NoRound函数:
HS.NoRound("A#ExactValue")
这会保持ExactValue账户中的数值不变,不进行任何四舍五入。
这两个函数提供了在HFM中处理数值精度的灵活性,允许用户根据业务需求选择是否对数据进行四舍五入。
总结
以上为HFM中的计算规则,希望对大家有帮助。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/189276.html