创建Cube操作手册.docx
《创建Cube操作手册.docx》由会员分享,可在线阅读,更多相关《创建Cube操作手册.docx(37页珍藏版)》请在冰豆网上搜索。
![创建Cube操作手册.docx](https://file1.bdocx.com/fileroot1/2022-12/15/1b04c7e9-465f-4b1e-9362-5f783df4510e/1b04c7e9-465f-4b1e-9362-5f783df4510e1.gif)
创建Cube操作手册
第1章前言
本操作手册主要用于在创建OLAP数据模型时,给用户一个指导性操作步骤。
OLAP模型的建立主要有以下步骤和关键点:
1)需求调研
此时主要是通过和用户进行沟通,明确用户有什么样需求,有哪些需求。
2)需求分析
当明确用户的需求时,开发人员应该针对用户的需求进行分析。
分析的目的主要是分析现有系统有没有相应的数据支持,能不能做等。
并规划以后的开发过程。
3)系统设计
详细的需求说明书确认后,此时就要整合所有的需求,进行归类,分析共性和异性。
确认实现的整个架构,统一的规范等。
4)详细设计
依据系统设计书,开发详细的程序
5)创建Cube模型
建模型
本操作手册以《原奶收购情况分析》作为例子指导
第2章用户需求
2.1原始需求
需求说明书中原奶收购情况分析的需求如下:
原奶收购情况分析
⏹分析目的
分析牛奶收奶完成情况。
⏹分析主体
伊利集团液态奶事业部领导。
⏹数据来源
指标名称
指标解释
指标计算公式
取数来源
实际收奶量
工厂每月原奶实际收购量
工厂在ERP系统录入的实际收奶量
ERP供应链系统牛奶收购情况报表
年计划收奶量
指一年计划的用奶量
BI系统
月计划收奶量
指一月计划的用奶量
BI系统
日计划收奶量
指一日计划的用奶量
BI系统
⏹分析指标
1.基础指标:
实际收奶量、年计划收奶量、月计划收奶量、日计划收奶量
衍生指标:
计划量
2.时间维度上的聚合关系:
基础指标为加和汇总。
⏹分析维度
1、时间:
年-月-日
品种:
A++有机奶、A+原料奶、A原料奶、A-原料奶
机构:
工厂
区域:
东北区域、中南区域、西北区域
单位:
吨
⏹分析案例
1.展示示例:
液态奶事业部管理层:
i.时间为日(查询的日期需求为时间段,开始时间:
年-月-日,结束日期:
年-月-日)
ii.展示品种:
A++有机奶、A+原料奶、A原料奶、A-原料奶
iii.展现工厂
iv.展现区域:
东北区域、中南区域、西北区域
v.展示相应的分析指标。
⏹信息展现需求
1、分析可以按照时间点或时间段进行查询;除提供本期查询分析外,并支持同比分析,环比分析,累计分析等及丰富灵活的图形化展示,包括:
柱状图,饼图,折线图,地图形式,气泡图,堆积图等等
2、地图展示:
提供指标告警
2.2需求分析
分析指标:
在第2.1节的分析指标中我们可以看到总共有4个指标实际收奶量、年计划收奶量、月计划收奶量、日计划收奶量。
通过分析我们知道,在ERP系统中,牛奶是通过杂项入库的方式维护到ERP当中的。
但收奶计划量是业务部门通过制订计划,由外部数据Excel手工维护的。
因此通过分析数据来源,我们可以清楚的知道,该需求的数据主要有两部分:
ERP系统和外部数据。
分析维度:
1)时间:
在时间维度上,有三种选择,年、月、日
2)品种:
在ERP系统中,对原奶来说,实际上就是批次表中相应的批次号
3)机构:
原奶收购量在维护进ERP时,是入到具体的原料仓中,所以通过仓库代码就可以找到对应的机构。
机构肯定在某个固定的区域内。
4)区域:
对于区域的划分,在ERP中并没有做明确的维护。
因此需要手工定义并维护。
ERP系统中手工维护区域和仓库的关系,因此区域—机构—仓库可以建立对应关系。
2.3结论
分析指标:
实际收奶量ERP系统
计划量外部数据
分析维度:
时间系统产生
品种手工维护
机构系统产生
区域手工维护
第3章系统设计
命名规范:
1)维度:
DW_DIM_XXXX
2)事实表:
DW_FACT_XXXX
3.1维度模型
1)时间
createtableDW.DW_DIM_TIME_DAY
(
YEAR_IDVARCHAR2(8)notnull,
YEAR_NAMEVARCHAR2(20)notnull,
YEAR_ORDERVARCHAR2(8)notnull,
HALFYEAR_IDVARCHAR2(8)notnull,
HALFYEAR_NAMEVARCHAR2(20)notnull,
HALFYEAR_ORDERVARCHAR2(8)notnull,
QUARTER_IDVARCHAR2(8)notnull,
QUARTER_NAMEVARCHAR2(20)notnull,
QUARTER_ORDERVARCHAR2(8)notnull,
MONTH_IDVARCHAR2(8)notnull,
MONTH_NAMEVARCHAR2(20)notnull,
MONTH_ORDERVARCHAR2(8)notnull,
TENDAYS_IDVARCHAR2(8)notnull,
TENDAYS_NAMEVARCHAR2(20)notnull,
TENDAYS_ORDERVARCHAR2(8)notnull,
FIVEDAYS_IDVARCHAR2(8),
FIVEDAYS_NAMEVARCHAR2(50),
FIVEDAYS_ORDERVARCHAR2(8),
DAY_IDVARCHAR2(8)notnull,
DAY_NAMEVARCHAR2(20)notnull,
DAY_ORDERVARCHAR2(49)notnull,
DUMMY_LEVELNUMBER
)
tablespaceDW
2)等级奶维度
手工维护
createtableDW.DW_DIM_MILKGRADE
(
GRADE_IDNUMBER(5),
LOT_NOVARCHAR2(32),
LOT_DESCVARCHAR2(40),
PARENT_IDNUMBER(15),
SHOW_ORDERVARCHAR2(32),
ROLLUP_METHODVARCHAR2
(1)default'+'notnull
)
tablespaceDW
3)区域机构维度
手工维护
createtableDW.DW_DIM_MILK_DEPOT
(
WHSE_IDNUMBER(15),
WHSE_CODEVARCHAR2(20),
WHSE_NAMEVARCHAR2(200),
PARENT_IDNUMBER(15),
SHOW_ORDERVARCHAR2(32),
ROLLUP_METHODVARCHAR2
(1)default'+'notnull
)
tablespaceDW
4)指标维度
指标表dw_dim_measure_all与dw_dim_msr_olap_info配置如下:
将配置表中数据插入到dw_dim_measure_all与dw_dim_msr_olap_info中。
指标维DW.VW_DIM_MEASURE_MILK视图如下:
CREATEORREPLACEVIEWDW.VW_DIM_MEASURE_MILKAS
SELECT
t.MSR_IDFACT_VALUE_ID,
t.MSR_OLAP_NAMEFACT_VALUE_NAME,
t.ROLLUP_METHODCALL_METHOD,
t.PARENT_MSR_IDPARENT_ID,
t.OLAP_ATTRIBUTE1MEASURE_FLAG,
t."CUBE_ID",t."PARENT_MSR_ID",t."MSR_ID",t."MSR_NAME",t."CALC_ENGINE",t."CALC_TYPE",t."TIME_TYPE",t."CALC_LEVEL",t."DEFAULT_JD",t."MSR_CATEGORY",t."MSR_SUB_CATEGORY",t."LINK_MSR1_TYPE",t."LINK_MSR1_ID",t."LINK_MSR1_NULLABLE",t."LINK_MSR2_TYPE",t."LINK_MSR2_ID",t."LINK_MSR2_NULLABLE",t."EXTERNAL_MSR_FLAG",t."MSR_ATTRIBUTE1",t."MSR_ATTRIBUTE2",t."MSR_ATTRIBUTE3",t."MSR_ATTRIBUTE4",t."MSR_ATTRIBUTE5",t."SHOW_ORDER",t."ROLLUP_METHOD",t."ALT_MSR_NAME",t."MSR_OLAP_NAME",t."OLAP_ATTRIBUTE1",t."OLAP_ATTRIBUTE2",t."OLAP_ATTRIBUTE3",t."OLAP_ATTRIBUTE4",t."OLAP_ATTRIBUTE5"
FROMdw.vw_dw_dim_measure_allt
WHEREt.CUBE_ID='MILK'
3.2事实表模型
通过分析知道,原奶收购情况分析涉及到时间、机构、等级奶、指标维,因此事实表结构如下:
createtableDW.DW_FACT_MILK
(
TIME_IDVARCHAR2(8),
WHSE_IDNUMBER(15),
ITEM_IDNUMBER(10),
ITEM_NOVARCHAR2(32),
GRADE_IDVARCHAR2(10),
FACT_VALUE_IDVARCHAR2(10),
FACT_VALUENUMBER
)
tablespaceDW
3.3数据处理过程(ERP)
该过程主要统计原奶收购量。
/*
*Author:
tyc
*Created:
2009-8-9
*Purpose:
原奶收购情况统计
*/
procedureld_f_milk(p_begin_timeauto_etl_inc_control_dw.begin_time%type,
p_end_timeauto_etl_inc_control_dw.end_time%type,
p_etl_allvarchar2default'N',
p_etl_autovarchar2default'N')
is
--记录数据处理用时
v_use_timedate;
begin
v_use_time:
=sysdate;
ifp_etl_all='Y'then
pkg_fbi_common.Truncate_Table('DW','dw_fact_milk');
pkg_fbi_etl_ctl.write_log('一般',
'【DW】_TRUNCATE原奶收购数据表_['||p_begin_time||'~'||
p_end_time||']'||sql%rowcount,
3,
sysdate-v_use_time);
commit;
else
deletedw.dw_fact_milkt
wheret.fact_value_idin(G_MEASURE50_ID,G_MEASURE51_ID,G_MEASURE55_ID)
andt.time_idbetweenp_begin_timeandp_end_time;
pkg_fbi_etl_ctl.write_log('一般',
'【DW】_删除原奶收购数据表_['||p_begin_time||'~'||
p_end_time||']'||sql%rowcount,
3,
sysdate-v_use_time);
commit;
endif;
--统计原奶收购情况
insertintodw.dw_fact_milk
(
time_id,--时间
orgn_id,--机构ID
whse_id,--仓库ID
whse_code,--仓库编码
item_id,--品项ID
item_no,--品项编码
grade_id,--等级奶
fact_value_id,--指标ID
fact_value--指标值
)
--原奶收购量第一计量单位
select
to_char(tran.trans_date,'yyyymmdd')day_id,--事务日期
nvl(hr.operating_unit,-99999999)orgn_id,--机构ID
nvl(whse.mtl_organization_id,-99999999)whse_id,--仓库ID
tran.whse_codewhse_code,--仓库代码
tran.item_iditem_id,--品项ID
item.item_noitem_no,--品项编码
decode(lots.lot_no,'A+','A+',
'A-','A-',
'A+2','A+2',
'A++','A+2',
'A++','A+2',lots.lot_no)grade_id,--等级ID
G_MEASURE50_IDfact_value_id,--指标ID
nvl(sum(tran.trans_qty),0)/1000fact_value--收购量
fromods.ic_tran_vw1tran,--库存事务表
ods.ic_lots_mstlots,--原辅料批次表
ods.ic_item_mst_bitem,--品项表
ods.ic_whse_mstwhse,--仓库表
ods.inv_organization_info_vhr
wheretran.item_id=lots.item_id
andtran.lot_id=lots.lot_id
andtran.item_id=item.item_id
and(tran.doc_type='CREI'ortran.doc_type='ADJI')
and(tran.line_type=0ortran.line_type=-1)
and(tran.item_id=2996ortran.item_id=56671)
andpleted_ind=1
andtran.whse_code=whse.whse_code
andhr.organization_code(+)=tran.whse_code
andtran.REASON_CODEin(/*液奶*/1163,1263,1300,1301,1942,1060,/*奶粉*/2601)
andlots.lot_noin('A','A+','A-','A+2','A+','A-','A+2','A++','A++')
andtran.TRANS_DATE>=to_date(p_begin_time,'yyyy-mm-dd')
andtran.TRANS_DATEgroupbyto_char(tran.trans_date,'yyyymmdd'),--事务日期
nvl(hr.operating_unit,-99999999),
nvl(whse.mtl_organization_id,-99999999),
tran.whse_code,--仓库代码
tran.item_id,
item.item_no,
lots.lot_no
havingnvl(sum(tran.trans_qty),0)<>0
unionall
--原奶收购量第2计量单位
select
to_char(tran.trans_date,'yyyymmdd')day_id,--事务日期
nvl(hr.operating_unit,-99999999)orgn_id,--机构ID
nvl(whse.mtl_organization_id,-99999999)whse_id,--仓库ID
tran.whse_codewhse_code,--仓库代码
tran.item_iditem_id,--品项ID
item.item_noitem_no,--品项编码
decode(lots.lot_no,'A+','A+',
'A-','A-',
'A+2','A+2',
'A++','A+2',
'A++','A+2',lots.lot_no)grade_id,--等级ID
G_MEASURE51_IDfact_value_id,--指标ID
nvl(sum(tran.trans_qty2),0)/1000fact_value--指标值
fromods.ic_tran_vw1tran,--库存事务表
ods.ic_lots_mstlots,--原辅料批次表
ods.ic_item_mst_bitem,--品项表
ods.ic_whse_mstwhse,
ods.inv_organization_info_vhr
wheretran.item_id=lots.item_id
andtran.lot_id=lots.lot_id
andtran.item_id=item.item_id
and(tran.doc_type='CREI'ortran.doc_type='ADJI')
and(tran.line_type=0ortran.line_type=-1)
--是否可在配置表中配置
and(tran.item_id=2996ortran.item_id=56671)
--是否可在配置表中配置
andpleted_ind=1
andtran.whse_code=whse.whse_code
andhr.organization_code(+)=tran.whse_code
andtran.REASON_CODEin(/*液奶*/1163,1263,1300,1301,1942,1060,/*奶粉*/2601)
andlots.lot_noin('A','A+','A-','A+2','A+','A-','A+2','A++','A++')
andtran.TRANS_DATE>=to_date(p_begin_time,'yyyy-mm-dd')
andtran.TRANS_DATEgroupbyto_char(tran.trans_date,'yyyymmdd'),--事务日期
nvl(hr.operating_unit,-99999999),
nvl(whse.mtl_organization_id,-99999999),
tran.whse_code,--仓库代码
tran.item_id,
item.item_no,
lots.lot_no
havingnvl(sum(tran.trans_qty2),0)/1000<>0
unionall
--原奶库存量
select
a.day_idday_id,--事务日期
nvl(hr.operating_unit,-99999999)orgn_id,--机构ID
nvl(whse.mtl_organization_id,-99999999)whse_id,--仓库ID
tran.whse_codewhse_code,--仓库代码
tran.item_iditem_id,--品项ID
item.item_noitem_no,--品项编码
decode(lots.lot_no,'A+','A+',
'A-','A-',
'A+2','A+2',
'A++','A+2',
'A++','A+2',lots.lot_no)grade_id,--等级ID
G_MEASURE55_IDfact_value_id,--指标ID
sum(casewhento_char(tran.trans_date,'yyyymmdd')<=a.day_idthennvl(tran.trans_qty,0)end)/1000fact_value--指标值
fromods.ic_tran_vw1tran,--库存事务表
ods.ic_lots_mstlots,--原辅料批次表
ods.ic_item_mst_bitem,--品项表
ods.ic_whse_mstwhse,
ods.inv_organization_info_vhr,
ods.i_time_daya
wheretran.item_id=lots.item_id
andtran.lot_id=lots.lot_id
andtran.item_id=item.item_id
and(tran.item_id=2996ortran.item_id=56671)
andtran.whse_code=whse.whse_code
andtran.whse_code=hr.organization_code(+)
andlots.lot_noin('A','A+','A-','A+2','A+','A-','A+2','A++','A++')
anda.day_idbetweento_char(tran.trans_date,'yyyymmdd')anda.day_id
anda.day_idbetweenp_begin_timeandp_end_time
groupbya.day_id,--事务日期
nvl(hr.operating_unit,-99999999),
nvl(whse.mtl_organization_id,-99999999),
tran.whse_code,--仓库代码
tran.item_id,
item.item_no,
lots.lot_no
havingsum(casewhento_char(tran.trans_date,'yyyymmdd')<=a.day_idthennvl(tran.trans_qty,0)end)/1000<>0
;
pkg_fbi_etl_ctl.write_log('一般',
'【DW】_原奶收购