微信公众号:大话EPM 10年EPM产品线经验,精通HFM/Tagetik产品
全部博文(18)
分类: IT职场
2021-07-22 16:12:28
今天这篇文章主要是引用官方文档的内容并加以解释,笔者认为有关exp函数使用的资料,官方文档上的例子是非常经典的,值得读者细品。
Exp函数是HFM的顶级对象,即只能是HS.exp的用法,并且只能在计算规则(Calculate),折算规则(Translate),分摊规则(Allocate)中使用。
不能在合并规则(Consolidate)中使用,读者可以想一想为什么?
Hs.exp中的维度组合一般只用Account,ICP,C1-CN(N代表自定义维度的个数)。
语法:hs.exp “目标维度组合=源维度组合或者数值”,并且每个维度之间是英文的.分割,每个维度使用短名称和#连接。
维度短名称列表(8个固定维度的短名称取的就是每个维度的首字母):
维度编码 |
维度短名称(规则中用) |
说明 |
Account |
A |
科目维度 |
Entity |
E |
组织维度 |
Year |
Y |
年维度 |
Period |
P |
期间维度 |
View |
W |
视图维度,由于View和Value维度首字母都是V,为了区分使用W |
Value |
V |
值维度 |
ICP |
I |
往来单位 |
Scenario |
S |
情景维度 |
Custom1-CustomN |
C1-Cn |
2.1 版本以后,自定义维度支持给自定维度重命名,并且可以大于4个自定维度,比如Custom 1 设置为Report,更加直观 |
先看下以下示例,
将科目库存现金:100101与自定义维的 [None] 成员交叉的单元格设置为100:
HS.Exp "A#100101.C1#[None].C2#[None].C3#[None].C4#[None]=100"规则中一般只用Account,ICP, C1-Cn,不用其他维度,为什么?
因为其他维度默认就是“当前成员”,什么意思,上面这个语句也可以将1 2 个维度(假设是4个自定义维度)组合全部写出来,怎么写?
HS.Exp "E#"&hs.entity.member&".Y#"&hs.Year.member&"….A#100101.C1#[None].C2#[None].C3#[None].C4#[None]=100"
这样写可以,但是,是不是很复杂,可读性也不好,初学时如果对“当前成员”不理解,可以这样记住:能和H S 直接使用的维度就是当前成员,有如下维度:
我们再回过头去看上面的语句:
HS.Exp "A#100101.C1#[None].C2#[None].C3#[None].C4#[None]=100"
上面的维度组合我漏了I CP 维度,可以吗?
a. 一般库存现金科目是非I CP 科目,既不挂I CP ,也就是默认在[ ICP None] 上
科目维度I CP 属性字段:isICP =”N” :
b. 如果isICP =”Y”,即:
HS.Exp "A#100101.C1#[None].C2#[None].C3#[None].C4#[None]=100"
如果还这样写,有问题吗?
显然有问题,这个语句会将所有I CP 维度都填充,当表单选择 ICP 维度成员[ ICP TOP] 时,数据会翻 N 倍。
正确的写法应该是:
HS.Exp "A#100101. I#[ICP None]. C1#[None].C2#[None].C3#[None].C4#[None]=100"
通过这个简单的例子,说明非常重要的几点:
1) 写规则时必须要关注维度模板中每个维度的属性配置,特别是科目维度。
2) 尽可能将公式中的维度组合写全(主要是account,icp,C 1-Cn,其他维度一般不需要写在公式中),可避免垃圾数据和不正确的数据产生。
3) 读者一定要敢于怀疑,并且敢于去尝试不同写法的数据结果。
今天就先写这么多,下篇我们将真正走进exp函数的复杂场景使用。