第十篇.hfm规则入门(三:深入使用exp函数) -凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 58366
  • 博文数量: 18
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 286
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-16 21:41
个人简介

微信公众号:大话epm 10年epm产品线经验,精通hfm/tagetik产品

文章分类

(18)

  • (17)
  • (1)
文章存档

(17)

(1)

我的朋友

分类: it职场

2021-07-22 16:14:45

第八篇介绍的是exp函数右边是一个数值的场景,实际场景中用的更多的是exp函数左右两边都是维度组合(也叫p ov ),而非数值。今天深入探讨exp函数的使用。

1、维度交叉点考虑因素


如果不指定 exp 从中获取数据以及 exp 放入数据的维交叉点,则源和目标交叉点由下列因素决定:

· 目标(等号 左边 )。如果未在等号左侧指定任何icp维或c1-cn维的成员,则 exp 会将数据写入所有与account维度为有效组合的pov上。

· 源(等号 右边 )。如果未在等号的右侧指定维的成员,则存在下列几种可能:

o 如果维只有一个成员,则  exp  会从此成员与源科目的交叉点获取数据。

o 如果维与源科目只有一个有效的交叉点,则  exp  会从此交叉点获取数据。

o 如果维与源科目有几个交叉的成员,则数据的源交叉点由等式左侧决定:

  1)如果在左侧指定了一个成员,则  exp  会尝试从此成员与源科目的交叉点获取数据。

  2)如果未在左侧指定任何成员,则  exp  将尝试将数据置于目标科目与维成员的每个有效交叉点。 exp  将从该成员与源科目的相应交叉点获取目标交叉点的数据。

注:

如果源交叉点无效,则  exp  不会更改相应目标交叉点中的数据。


总结下:笔者认为就两点

1)就是前面的文章也提到的,exp函数左右的维度组合个数(pov)最好要对应,能明确的维度一定要显示写出来。通常规则是:

hs.exp “a#.i#.c1#.cn#= a#.i#.c1#.cn#”

规则中一般只用account、icp,c1-cn维度,这一点很重要。

2)等号两边的科目需要特别注意,比如等号左边的pov中科目属性是icp科目(isicp=y),等号右边的科目是非icp科目(isicp=n)。所以写规则的时候特别要关注等号左右两边科目的属性(cntopmember,isicp,isconsolidated等)

2、同时计算多个科目

--->要将数据插入与当前视点交叉的所有科目中,可将  all  用于帐户表达式中。您可以使用此方法来设置所有科目的期初余额。在以下示例中, isfirst  函数将测试当前期间是否是第一个期间。如果是第一个期间,则  exp  会将当前期间每个科目的值设置为前一年最后一个期间的科目值。

  if hs.period.isfirst = true then
     
   hs.exp "a#all = a#all.y#prior.p#last"
     
  end if
上面这段的变种其实就是我们常见的年初数结转规则,如下:
 if hs.period.isfirst = true then
     
  hs.exp "a#all.c1#movbeg01 = a#all.c1#[none].y#prior.p#last"
     
 end if

实际业务中,主要是资产负债类的科目的年初结转,我们知道,资产负债表的第一列是年初数据,

第二列是期末数据。年初数数据就是上面这段规则计算出来的

(实际使用时涉及到增减变动的结转,会略复杂)。


     

----->要将数据写入到科目与自定义维或icp维的所有有效组合式上,可使用  all  关键字或省略  a#  字符。上面的写法可以等价为为:

 if hs.period.isfirst = true then
     
   hs.exp "c1#movbeg01 = c1#[none].y#prior.p#last"
     
 end if
  

下例设置  statetax  帐户中的金额。此示例通过将  2014   sales  帐户中的金额乘以  2014  staterate  帐户中的汇率来计算此金额。

hs.exp "a#statetax = a#sales.y#2014 * a#staterate.y#2014"

  

3、exp和维度交叉点考虑因素

这一节大部分是hfm官方文档上的内容,非常的经典,值得读者认真研读。

以下示例说明了 “维交叉点考虑因素” 中提到的考虑因素。将介绍以下交叉点类型:

a) 所有交叉点对于源科目和目标科目均有效。

b) 某些交叉点对于源科目和目标科目有效,其他一些交叉点则无效。

c)只有一个成员对于源科目有效。

以下所有示例都将名为  targacct   sourceacct  的帐户与名为  member001 member002  member003   custom1  维配合使用。下表中列出了所有示例的源交叉点数据。后面的例子的基础都是此例子为前提。

 

成员

sourceacct 交叉点中的数据

member001

10

member002

nodata  状态

member003

15

维交叉点示例的数据


先翻译下上面这个表格,怎么理解?

等价于如下公式:

使用smartview刷数或者web表单展示如下:

a#  sourceacct.c1#  member001=10

a#  sourceacct.c1#  member002=空,这里用空作意思表示,smartview刷出来或者表单显示是空白

a#  sourceacct.c1#  member003=15


3.1 所有维度组合都是有效的场景

对于以下示例, targacct   sourceacct  科目与  custom1  成员的所有交叉点都是有效的:

      hs.exp "a#targacct = a#sourceacct"
如果目标科目targacct和源科目sourceacct的设置的属性一样,那么上面的规则就是将源科目的数据复制一份到目标科目上,也就是我们常说的平转。

应用公式后的结果如下:

custom1  成员

数据

交叉点

member001

10

sourceacct   member001

member002

---

不适用。 targacct   member002  的交叉点未更改,因为  sourceacct  member002  的交叉点状态为  nodata

member003

15

sourceacct   member003

可以翻译为:

a# targacct .c1#  member001=10

a# targacct .c1#  member002=空,这里用空作意思表示,smartview刷出来或者表单显示是空白

a# targacct .c1#  member003=15


à 如果 在等号左侧将  exp   member001  成员一起使用:

      hs.exp "a#targacct.c1#member001 = a#sourceacct"

targacct   member001  的交叉点设置为  10 exp   sourceacct   member001  的交叉点获取数据,因为在左侧指定了  member001

à 如果 在等号右侧将  exp   member003  一起使用:

      hs.exp "a#targacct = a#sourceacct.c1#member003"
  这样写等价于右边就是一个数值,那么会填充左边目标pov上所有有效组合:

custom1  成员

数据

交叉点

member001

15

sourceacct   member003

member002

15

sourceacct   member003

member003

15

sourceacct   member003

上面的表格翻译为:

a# targacct .c1#  member001=15

a# targacct .c1#  member002=15

a# targacct .c1#  member003=15

所以这种写法是很危险的,特别是要防止是一个常数的情况



3.2 无效组合

在以下示例中,源帐户与目标帐户各有无效组合。

a)sourceacct.member002   member003  有效, member001  无效。

b) targacct.member001   member002  有效, member003  无效。

下面这个公式及应用公式后的结果值得初学者细品,笔者不再赘述:

      hs.exp "a#targacct = a#sourceacct"
  

使用公式后的结果

a) targacct.member001 = sourceacct.member001 sourceacct   member001  为无效交叉点。

b)targacct.member002 = sourceacct.member002 。因为  sourceacct   member002  的交叉点为  nodata  状态,所以  targacct   member002  的交叉点保持不变。

c)targacct.member003 = sourceacct.member003 targacct   member003  为无效交叉点。

在以下示例中, exp  与在等号左侧指定的  member001  一起使用:

      hs.exp "a#targacct.c1#member001 = a#sourceacct"
  

targacct.member001  保持不变,因为  exp  尝试从无效的交叉点( sourceacct  member001 )检索数据。

在以下示例中, exp  与在等号右侧指定的  member003  一起使用:

      hs.exp "a#targacct = a#sourceacct.c1#member003"
  

该函数将此数据置于  custom1  成员与  targacct 科目 的交叉点中:

custom1  成员

数据

交叉点

member001

15

sourceacct   member003

member002

15

sourceacct   member003

member003

n/a

不适用。 member003  对于  targacct  帐户是一个无效交叉点。


3.3 右侧的一个有效成员



在以下示例中,源科目的有效组合中仅具有一个有效成员,目标科目组合中具有两个有效成员。

a) sourceacct.member003  是唯一有效的交叉点。

b)targacct.member001   member002  有效, member003  无效。

在以下示例中,使用  exp  时未在等号的任一侧指定  custom1  成员:

      hs.exp "a#targacct = a#sourceacct"
  

该函数将此数据置于  custom1  成员与  targacct  科目的交叉点中:

custom1  成员

数据

交叉点

member001

15

sourceacct   member003 sourceacct  科目的唯一有效交叉点)

member002

15

sourceacct   member003 sourceacct  科目的唯一有效交叉点)

member003

n/a

不适用。 member003  对于  targacct  科目是一个无效交叉点。

在以下示例中, exp  与在等号左侧指定的  member001  一起使用:

      hs.exp "a#targacct.c1#member001 = a#sourceacct"
  

targacct   member001  的交叉点设置为  15 ,这是  sourceacct   member003  的交叉点中的数据。

提示:

如果  sourceacct  科目和  custom1  维有多个有效交叉点,则  exp  将尝试从  sourceacct   member001  的交叉点中获取数据。如果此交叉点是无效交叉点,则  exp  将保留目标科目不变。



全文完。

阅读(4655) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图