数据表包括DCE表、DCN表、DCT表
DCE表格存储
DCN表格存储价值维度剩余成员的数据。
DCT表格存储日记账调整。当日记账被过账时,数据值流向DCE和/或DCN表格。
表的命名格式:APPNAME_[表][场景][年份]
例如:APPNAME_DCE_1_2024, APPNAE应用,DCE表,场景1,年份为2024。依此类推。
1、表结构说明
数据表的数据与维值取法相关,以APPNAME为“HFM"为例,查询 HFM_DCE_1_2024 表的数据如下图
lentity,lvalue,laccoount,licp分别表示组织、值、科目和往来方的维度,关联主数据表即可,lcustom1、lcustom2为Custom维度,dp0_inpt、dp1_input、dp2_input...等,依次对应各财务期间(分别对应1月、2月、3月等)的数据。
以下为取数的SQL:
SELECT xv.label,c1.label,c2.label,c3.label,c4.label,xt.*
FROM (select bitand(x.lcustom1,
to_number('00000000ffffffff', 'XXXXXXXXXXXXXXXX')) as C1id,--C1维度
bitand(x.lcustom1,
to_number('ffffffff00000000', 'XXXXXXXXXXXXXXXX')) /
to_number('000000100000000', 'XXXXXXXXXXXXXXXX') as C2id, --C2维度
bitand(x.lcustom2,
to_number('00000000ffffffff', 'XXXXXXXXXXXXXXXX')) as C3id,--C3维度
bitand(x.lcustom2,
to_number('0000ffff00000000', 'XXXXXXXXXXXXXXXX')) /
to_number('000000100000000', 'XXXXXXXXXXXXXXX') as C5id,--C5维度
bitand(x.lcustom2,
to_number('00ff000000000000', 'XXXXXXXXXXXXXXXX')) /
to_number('001000000000000', 'XXXXXXXXXXXXXXX') as C4id,--C4维度
x.*
from HFM.HFM_dce_1_2024 x) xt,
HFM.HFM_ACCOUNT_ITEM xai,--科目
HFM.HFM_CUSTOM_ITEM c1,--C1
HFM.HFM_CUSTOM_ITEM c2,--C2
HFM.HFM_CUSTOM_ITEM c3,--C3
HFM.HFM_CUSTOM_ITEM c4,--C4
HFM.HFM_Entity_Item ent,--组织
hfm.HFM_icp_item xii,--ICP
EDW_APP.HFM_value xv--值
where xt.C1id = c1.itemid
and xt.c2id=c2.itemid
and xt.c3id=c3.itemid
and xt.c4id=c4.itemid
and c1.ldimid = 1
and c2.ldimid=2
and c3.ldimid=3
and c4.ldimid=4
and xt.laccount = xai.itemid
and xt.lentity = ent.itemid
and xt.licp = xii.itemid
and xt.lvalue = xv.id
and ent.label = '100' --组织编码为100
and c4.label='E_Load'--C3为 E_load
and c2.label='[None]'
2、C1~C5维度的取法
查 HFM_CUSTOM_MAP 表的数据如下图,按dimid顺序依次对应C1~C5的偏移值(offset)和长度(length)
则需要在bitand中,写入 “f”的位置为 2Xoffset+1 ,长度为 lengthX2
"1"位置对应 2Xoffset+1 ,参考上述SQL的计算方法,可获取C1~C5的值。
例如下图,C4对应dimid=11, offset=6,length=1 ,则“f"放在第13位(2X6+1),长度为2,
因此C4维值获取逻辑为:
bitand(x.lcustom2,to_number('00ff000000000000', 'XXXXXXXXXXXXXXXX')) /to_number('001000000000000', 'XXXXXXXXXXXXXXX')
注意:第一个to_number固定为16位,第二个to_number固定为15位
为什么要这么计算?HFM产品就是这么设计的,底层原因不清楚。