BI项目1 酒店相关

流程概览:

从来源抽取数据(用kettle)(全量抽取,增量抽取【一般以时间为增量】)本项目使用全量抽取,
(ODS)存储到数据仓库,
对数据整合(先放在DW层),
整合成两类表,事实表,维度表。
然后可能再整合到 DM层(数据集市)整合成宽表。
做成报表(报表工具:帆软,tableau)

数据仓库包括好几部分 ODS(性能,数据备份),DW
命名叫做ODS :贴源层(最贴近来源的层),具有数据同构性(来源内什么样抽过来基本就什么样)

为了不影响来源的完整性,抽取速度要越快越好,否则可能会丢失数据。
数据放到DW层内。

前置操作

创建普通用户,用户名命名为ODS(ODS层)

CREATE USER ODS IDENTIFIED BY ODSTEST;
--给用户授权,授权后才可以登录连接
GRANT CREATE SESSION TO ODS;(授权创建会话)
GRANT connect,resource,dba TO ODS;(授权连接,资源,资源管理员权限)
GRANT SELECT ANY TABLE TO ODS;(查询任何表格的权限)

(能登录就可以了)

在kettle创建了新的文件资源库
右上角+新建一个文件资源库,然后用户名为project1
如果右上角消失了 就去C盘 --user–edz–.kettle–找到repositories,右键noteoad++编辑,把乱码改成project1

在这里插入图片描述
查询IP的方式

在这里插入图片描述

抽取com_brand,com_brand_ype 这两张表

建表方式

抽取表的修改操作:
1.在表输入处,增加,NOW() ETL_DATE,更改表名为ODS_com_brand
2.在表输出处sql里更改time step 为DATE,更改表名为ODS_com_brand
3.新建保存目录,新建子目录project1 ,再在里面新建子目录trans,两个表都存入这个目录中
4.执行即可
5.其他表也按照上述步骤执行即可.

各种表的修改
com_area表:
在这里插入图片描述

store表:
表输入处改为
, FROM_UNIXTIME(signed_time,’%Y-%m-%d’) signed_time
, FROM_UNIXTIME(created_time,’%Y-%m-%d’) created_time
, FROM_UNIXTIME(closed_time,’%Y-%m-%d’) closed_time
, FROM_UNIXTIME(business_time,’%Y-%m-%d’) business_time
并且删除,tpye_id

(有一些忘记了)

创建作业,保证每次都能够快速抽取

新建–作业 --通用里拖出start,成功和9个转换,然后记得保存先–把这些按钮连起来–然后点开转换,在project1上创建子目录,命名job,一个个复制名字,按下图一个个操作,九个都要操作完成 ,保存
在这里插入图片描述

在这里插入图片描述
至此,从来源处抽取数据的步骤就完成了。

相关知识点

主键非空且唯一(表的字段内不重复)

项目开始

首先,要找到每张表的关联关系,将其保存在数据字典–表关系表内,
(这样,在后续关联的时候才能够快速关联,提高效率)
在这里插入图片描述
各表的内容名称
在这里插入图片描述在这里插入图片描述

DW层相关

1.DW 门店维度表

根据DW层整合结构表结构整合出一份DW门店维度表

—DW层整合结构表–门店维度表
在这里插入图片描述
—DW门店维度表
在这里插入图片描述

在plsql里创建DW层

CREATE USER DW IDENTIFIED BY 123456;
GRANT CREATE SESSION TO DW;
GRANT CONNECT,RESOURCE,DBA TO DW;
GRANT SELECT ANY TABLE TO DW;

在DW层内创建 门店维度表
下为代码

creat table DW(
SELECT S.ID store_id,S.PROJECT_ID,S.STORE_NAME,
          A.brand_name,A.group_name,
          B.type_name brand_type_name ,B.category_name,
          CASE WHEN ship_flag =0 then '异常店'
                  WHEN ship_flag =1 then '普通店'
                  WHEN ship_flag =2 then '插旗店' 
                  ELSE '旗舰店' END  AS ship_name, 
                  C.area_name,C.province,C.CITY_NAME,
                  D.name district_name,
                  S.room_open, S.OPEN_DATE,S.SIGNED_TIME,S.CLOSED_TIME,
                  E.NAME status_name
                    

FROM ODS.ods_t_store S
LEFT JOIN ODS.ODS_COM_BRAND A ON A.brand_id = S.brand_id
LEFT JOIN ODS.ods_com_brand_type B ON B.type_id = S.BRAND_TYPE_ID
LEFT JOIN (
                SELECT s1.id,S1.NAME city_name , s2.name province,s3.name area_name
                FROM ODS.ods_com_area S1--city表
                JOIN ODS.ods_com_area S2 ON S1.PID = S2.ID --省份表
                JOIN ODS.ods_com_area S3 ON S2.PID = S3.ID --区域表
                ) C ON  C.ID = S.CITY_ID
LEFT JOIN ODS.ods_com_area_district D ON D.ID = S.district_id
LEFT JOIN ODS.ods_com_store_status E ON E.id = S.flag );

DW层的表就存入账户DW了 ,即放入DW层了。

DW层内的门店维度表就做完了,
接下来是DW-房间售出明细表

2.DW 房间售出明细表
根据DW层整合结构表结构整合出一份DW房间售出明细表

DW层整合结构表–房间售出明细表
在这里插入图片描述

DW房间售出明细表
在这里插入图片描述
建立DW层内的DW_ROOM_DETAIL表 命名为DW_ROOM_DETAIL

CREATE TABLE DW_ROOM_DETAIL AS 
SELECT A.datekey,A.YEARSS date_year,A.MONTHSS date_month,

           B.CHAINID chainid,
           SUM(C.statusrmng) status_rmng,
           SUM(C.statusrmng+c.roomday+c.roomhalfday+c.roomhourday) status_rm,
           SUM(B.AMOUNTRMNG) AmountRmNg,
           SUM(NVL(AmountRmNg,0)+NVL(AmountRmAllDay,0)+NVL(AmountRmOther,0)+NVL(AmountRmDiscount,0)) RoomAmount,
           SUM(NVL(AmountRmNg,0)+NVL(AmountRmAllDay,0)+NVL(AmountRmOther,0)+NVL(AmountRmDiscount,0)  +NVL(B.AmountOther,0))  revenue
           
           
FROM ODS.ODS_T_DATE A
JOIN ODS.ods_roomammount_detail B ON A.datekey = to_date(B.datekey,'yyyy/mm/dd')

JOIN ODS.ods_roomcount_detaiL C ON  B.datekey = C.datekey
  where B.chainid = C.chainid
  and B.roomtypeid = C.roomtypeid


GROUP BY  A.datekey,A.YEARSS,A.MONTHSS ,
           B.CHAINID


到此DW层内操作完成。

DM层相关

整合上面的DW_ROOM_DETAIL,DW_STORE两表

在这里插入图片描述
在这里插入图片描述

创建DM层的代码

CREATE TABLE DM IDENTIFIED BY 123456;
GRANT CONNECT,RESOURCE,DBA TO DM;
GRANT CREATE SESSION TO DM;
GRANT SELECT ANY TABLE TO DM;

在DM层内创建DM_STORE_DETAIL表代码



CREATE TABLE DM_STORE_DETAIL AS 

SELECT S.store_id,
       S.project_id,
       S.store_name,
       S.brand_name,
       S.group_name,
       S.brand_type_name,
       S.category_name,
       S.ship_name,
       S.area_name,
       S.province,
       S.city_name,
       S.district_name,
       S.room_open,
       S.open_date,
       S.signed_time,
       S.closed_time,
       S.status_name,
       D.datekey,
       D.date_year,
       D.date_month,
       D.status_rmng,
       D.status_rm,
       D.amountrmng,
       D.roomamount,
       D.revenue
FROM DW.DW_ROOM_DETAIL D
JOIN DW.DW_STORE S ON D.CHAINID =S.STORE_ID

随后发现 数据内的area_name字段,内部信息全为中国,是错误字段,发现是来源的信息错误,故重新抽取,顺序仍然是按照来源,ODS抽取到DW,DW抽取到DM的顺序。
利用DELETE FROM 表名来删除表内数据,但表格式仍然存在,
拖拽表格进入编辑框,点击插入,会出现
在这里插入图片描述
删除values后半部分,用下述文件内的代码代替values的内容
在这里插入图片描述

       --DW_STORE表
       DELETE FROM dw_store--删除表内容
       insert into dw_store --加载表内容
  (store_id, project_id, store_name, brand_name, group_name, brand_type_name, category_name, ship_name, area_name, province, city_name, district_name, room_open, open_date, signed_time, closed_time, status_name)

       
       SELECT S.ID store_id,S.PROJECT_ID,S.STORE_NAME,
          A.brand_name,A.group_name,
          B.type_name brand_type_name ,B.category_name,
          CASE WHEN ship_flag =0 then '异常店'
                  WHEN ship_flag =1 then '普通店'
                  WHEN ship_flag =2 then '插旗店' 
                  ELSE '旗舰店' END  AS ship_name, 
                  C.area_name,C.province,C.CITY_NAME,
                  D.name district_name,
                  S.room_open, S.OPEN_DATE,S.SIGNED_TIME,S.CLOSED_TIME,
                  E.NAME status_name
                    

FROM ODS.ods_t_store S
LEFT JOIN ODS.ODS_COM_BRAND A ON A.brand_id = S.brand_id
LEFT JOIN ODS.ods_com_brand_type B ON B.type_id = S.BRAND_TYPE_ID
LEFT JOIN (
                SELECT s1.id,S1.NAME city_name , s2.name province,s3.name area_name
                FROM ODS.ods_com_area S1--city表
                JOIN ODS.ods_com_area S2 ON S1.PID = S2.ID --省份表
                JOIN ODS.ods_com_area S3 ON S2.PID = S3.ID --区域表
                ) C ON  C.ID = S.CITY_ID
LEFT JOIN ODS.ods_com_area_district D ON D.ID = S.district_id
LEFT JOIN ODS.ods_com_store_status E ON E.id = S.flag ;
commit;
---------------------------------------------
--DW_ROOM_DETAIL表
DELETE FROM dw_room_detail --删除表内容
insert into dw_room_detail --加载表内容
  (datekey, date_year, date_month, chainid, status_rmng, status_rm, amountrmng, roomamount, revenue)


SELECT A.datekey,A.YEARSS date_year,A.MONTHSS date_month,

           B.CHAINID chainid,
           SUM(C.statusrmng) status_rmng,
           SUM(C.statusrmng+c.roomday+c.roomhalfday+c.roomhourday) status_rm,
           SUM(B.AMOUNTRMNG) AmountRmNg,
           SUM(NVL(AmountRmNg,0)+NVL(AmountRmAllDay,0)+NVL(AmountRmOther,0)+NVL(AmountRmDiscount,0)) RoomAmount,
           SUM(NVL(AmountRmNg,0)+NVL(AmountRmAllDay,0)+NVL(AmountRmOther,0)+NVL(AmountRmDiscount,0)  +NVL(B.AmountOther,0))  revenue
           
           
FROM ODS.ODS_T_DATE A
JOIN ODS.ods_roomammount_detail B ON A.datekey = to_date(B.datekey,'yyyy/mm/dd')

JOIN ODS.ods_roomcount_detaiL C ON  B.datekey = C.datekey
  where B.chainid = C.chainid
  and B.roomtypeid = C.roomtypeid


GROUP BY  A.datekey,A.YEARSS,A.MONTHSS ,
           B.CHAINID
commit;

在这里插入图片描述

DELETE FROM dm_store_detail --删除表内容

insert into dm_store_detail --加载表内容
  (store_id,
   project_id,
   store_name,
   brand_name,
   group_name,
   brand_type_name,
   category_name,
   ship_name,
   area_name,
   province,
   city_name,
   district_name,
   room_open,
   open_date,
   signed_time,
   closed_time,
   status_name,
   datekey,
   date_year,
   date_month,
   status_rmng,
   status_rm,
   amountrmng,
   roomamount,
   revenue)

SELECT S.store_id,
       S.project_id,
       S.store_name,
       S.brand_name,
       S.group_name,
       S.brand_type_name,
       S.category_name,
       S.ship_name,
       S.area_name,
       S.province,
       S.city_name,
       S.district_name,
       S.room_open,
       S.open_date,
       S.signed_time,
       S.closed_time,
       S.status_name,
       D.datekey,
       D.date_year,
       D.date_month,
       D.status_rmng,
       D.status_rm,
       D.amountrmng,
       D.roomamount,
       D.revenue
FROM DW.DW_ROOM_DETAIL D
JOIN DW.DW_STORE S ON D.CHAINID =S.STORE_ID
commit;

(注)

拖拽表格进入编辑框,点击选择,会出现查询该表格全部字段的样式,
然后点击窗工具栏部分的美化SQL
在这里插入图片描述
代码会转变成
在这里插入图片描述

至此ODS,DW,DM层内各表数据抽取完毕

创建存储过程(封装代码)

create or replace procedure 存储过程名 is/as begin

–过程体
end

–存储过程的命名 , 必须以SP_开头

create or replace procedure SP_DW_STORE is/as(任选一个) begin

--过程体(过程体内必须要有commit;)
end;---END要加分号!!!!!!!!!!!!!!!!!!!!
例:

```sql
CREATE OR REPLACE PROCEDURE SP_dw_store IS BEGIN
delete from DW_STORE;
commit; --删除
insert into dw_store --插入数据
  (store_id,
   project_id,
   store_name,
   brand_name,
   group_name,
   brand_type_name,
   category_name,
   ship_name,
   area_name,
   province,
   city_name,
   district_name,
   room_open,
   open_date,
   signed_time,
   closed_time,
   status_name)

       SELECT S.ID store_id,S.PROJECT_ID,S.STORE_NAME,--整体插入数据
          A.brand_name,A.group_name,
          B.type_name brand_type_name ,B.category_name,
          CASE WHEN ship_flag =0 then '异常店'
                  WHEN ship_flag =1 then '普通店'
                  WHEN ship_flag =2 then '插旗店'
                  ELSE '旗舰店' END  AS ship_name,
                  C.area_name,C.province,C.CITY_NAME,
                  D.name district_name,
                  S.room_open, S.OPEN_DATE,S.SIGNED_TIME,S.CLOSED_TIME,
                  E.NAME status_name


FROM ODS.ods_t_store S
LEFT JOIN ODS.ODS_COM_BRAND A ON A.brand_id = S.brand_id
LEFT JOIN ODS.ods_com_brand_type B ON B.type_id = S.BRAND_TYPE_ID
LEFT JOIN (
                SELECT s1.id,S1.NAME city_name , s2.name province,s3.name area_name
                FROM ODS.ods_com_area S1--city表
                JOIN ODS.ods_com_area S2 ON S1.PID = S2.ID --省份表
                JOIN ODS.ods_com_area S3 ON S2.PID = S3.ID --区域表
                ) C ON  C.ID = S.CITY_ID
LEFT JOIN ODS.ods_com_area_district D ON D.ID = S.district_id
LEFT JOIN ODS.ods_com_store_status E ON E.id = S.flag ; --要有分号
COMMIT; --要有commit;

END;--要有分号

**存储过程的调用:**

BEGIN 
存储过程名;
END

```sql
begin
 SP_DW_STORE;
 END;
 (注意,都要加分号!)

既然存储了,在帆软内也能调用来使用
首先要连接数据库,因为要调用oracleDM ,DW里面的SP文件代码,所以要连接这些库,所以在资源库内添加DW,DM两个库。

然后创建转换,在转换内找到查询–调用DB过程,然后三个表都是点开方块 ,按下表输入,
在这里插入图片描述
(返回值删除,名称复制,保存的时候也是一样,保存在project1,trans内)

最终链路连接过程


在这里插入图片描述
在这里插入图片描述
点开方块查看

在这里插入图片描述

记得先保存再浏览!
记得先保存再浏览!
记得先保存再浏览!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值