微信公众号:大话EPM 10年EPM产品线经验,精通HFM/Tagetik产品
全部博文(18)
分类: IT职场
2021-07-07 15:21:56
我们先来看下昨天文章中的自定义维度选项,自定维度可以选择大中小。
在1 1.1.2.1 中,是4个固定自定义维度,后台没有进行加密机制,也就是说数据表中原样使用Custom 1 ~Custom 4 在维度表中的itemid.
Lcustom1 | Lcustom2 | Lcustom3 | Lcustom4 |
|
|
|
|
但是到了2 .4 版本后,由于支持无限个自定义维度,如果还是保持2 .1 的思路把所有自定义维度原样展示,那么数据表的列将会越来越多,占用的空间会逐渐增大。所以,Oracle Hyperion团队做了很好的优化,一方面是优化了自定义维度的存储方式,即将自定义维度加密后存储为后台两个字段(custom 1 -custom 2 通过加密算法后放到后台表lcustom 1 ,custom 3 -customN加密放到Lcustom 2 字段),另一方面对也降低了应用层代码解析的难度。 2.1 版本大概就是这个样子,值取自app_custom_ item 表中的itemid。
首先说明下上面提到的大中小在计算机的世界是这样定义的,
小= 1 byte,中= 2 bytes,大= 4 bytes。
1 byte = 255
先来看自定义维度对应的后台的一张神奇的表:
· 这张表对应的web端新建应用时选择的类型“大”
· 这张表对应的web端新建应用时选择的类型“中”
结论: W eb端新建应用时选择不同的自定义维度大小,那么后台custom _map 表对应的offset和length是不一样的。这里map表只有5行是因为应用程序只使用了5个自定义维度。如果web端创建应用时是更多自定义维度,那么map表会对应生成相应的行数出来。
以大小为“中”的情景来展示推演的过程
我在map表的基础上加了两列计算出来原表中的数字对应的offset和length。
以Dimid= 9 的这记录解释下,offset= 4 ,l ength=4
那么:新的offset: 256^4=4294967296 ,新的length:2 56^4 = 4294967296
256 是什么?是1byte,还记得上面提到的1byte= 255 吗。 当选择“中”时,上表中的第3行- 5 行的数据中offset为0、2、 4 ,length为2、2、2
先回答下昨天东哥的问题,直观理选择大中小对应的自定义维度承载的成员个数:
小:2 56^1=256 ,中= 256^2=65536 ,大= 256^4=4294967296
有点绕,我讲清楚了吗,哈哈 。
为了更加直观,我再贴一次上面的表,留意公式中的颜色数字
Custom 1 = MOD(LCUSTOM1, 4294967296 )
Custom 2 = FLOOR(LCUSTOM1/ 4294967296 )
Custom 3 = MOD(LCUSTOM2, 65536 )
Custom 4 = MOD(FLOOR(LCUSTOM2/ 65536 ), 65536 )
Custom 5 = FLOOR(LCUSTOM2/ 4294967296 )
我们用数据验证下:
贴图展示:
上面讲了这么多自定义维度的加密解密机制,读者可能会问,有什么用处?
可能一方面是笔者对这后面的机制有了解的兴趣。在实际应用中,一般情况不会用到。基于hfm底层表进行开发可能会用到,比如填充单元格文本的内容用来在表单中追溯分录来源就 需要解密自定义维度配合sql进行开发。
事实上,想要获取H FM 的数据,Hyperion还提供了一个方案,可以同时得到base层数据和parent数据(上面的解密自定义维度只能只能获取base数据,想要获取parent数据,需要使用sql汇总)。这个方案在2 .3 版本叫扩展分析(Extend Analytics),简称E A ,在2 .3 可以通过Hyperion安装包中的一个工具配合O DI 实现自动化抽取数据,可以抽取任何smartview能刷出来的数据。在2 .4 将这个功能集成到数据提取的功能中:
遗憾的是,2 .4 版本由于升级改造,无法实现直接抽取自动化,需要人工干预。