Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18689
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2018-03-08 19:51
个人简介

http://gcd525.tankehu.com/ 刘燕酿制,【微信GCD525】匠心品质。刘燕酿制旗下的产品:刘燕酿制燕窝酒酿蛋和刘燕酿制丰韵霜采用“内服外用”的营养概念,致力于呵护每一位女士!

文章分类
文章存档

2021年(7)

我的朋友

分类: IT职场

2021-07-30 18:06:15

第八篇介绍的是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  将保留目标科目不变。



全文完。

阅读(1155) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~