微信公众号:大话epm 10年epm产品线经验,精通hfm/tagetik产品
(18)
(17)
(1)
分类: 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函数的复杂场景使用。