项目二 电商

了解业务,本次是电商的业务,从各种表去获取关系。

字典表
1.和订单详情表的关联,只能从orderid来关联,因为一个用户会有多个订单,如果你直接左关联会出问题的。
2.用户地址和订单主表的收货地址可能不一样,比如说我在背景下单买了个东西到天津
。所以关联的时候不能直接拿用户地址来做订单地址。
3.在用户地址表内,有用户重复出现,但内容一致,所以要用这种方法来连接进行去重
在这里插入图片描述

项目开始

1.新建数据库
开始–找到这个绿色的,点它
在这里插入图片描述
然后一直点下去,其中
新建资源库的名称为BI,
所有口令用同一密码 口令123456,
不要启动维护。
在这里插入图片描述
完成 关闭。

2.kettle抽数

九个表格都抽完

3.建数据字典

4.找表关系

做完dw层 做dm层
注意:在做DM层的时候,以orderinfo为主表,其余表格进行左关联
中间有的变量的类型会发生变化,但是为什么我却不明白,将错就错先

5.建立DW,DM层

DW层

--sp_dw_userinfo 代码如下
create or replace procedure sp_dw_userinfo is begin

delete from dw_userinfo;

insert into dw_userinfo
  (userid,
   username,
   sex,
   usermoney,
   frozenmoney,
   regtime,
   lastlogin,
   district,
   city,
   province,
   country)



select
ui.userid,
ui.username,
decode(ui.sex,'0','女','1','男') as sex,
ui.usermoney,
ui.frozenmoney,
ui.regtime,
ui.lastlogin,
a.district,
a.city,
a.province,
a.country

from ods.ods_userinfo ui
left join (
                select *
                from ods.ods_useraddress
                where addressid in(
                                              select max(addressid)
                                              from ods.ods_useraddress    group by userid   )
)  ua on ui.userid = ua.userid
left join
(
select m.regionid,m.regionname district,
n.regionname city,
o.regionname province,
p.regionname country
---自关联部分
from ods.ods_regioninfo  m --地区表
join  ods.ods_regioninfo n on m.parentid = n.regionid --城市表
join  ods.ods_regioninfo o on n.parentid = o.regionid --省份表
join  ods.ods_regioninfo p on o.parentid = p.regionid --国家表
) a  on ua.district = a.regionid;

commit;
end;
--------------------------------------------------------
sp_dw_orderinfo 代码如下
create or replace procedure sp_dw_orderinfo is begin
delete from dw_orderinfo;
insert into dw_orderinfo
  (orderid,
   userid,
   orderstate,
   paystate,
   allotstatus,
   consignee,
   district,
   city,
   province,
   country,
   address,
   goodsamount,
   orderamount,
   shippingfee,
   realshippingfee,
   paytool,
   isbalancepay,
   balancepay,
   otherpay,
   paytime,
   addtime,
   specialid,
   goodsid,
   goodsprice,
   colornote,
   sizenote,
   amount)

select
o.orderid,--订单ID
o.userid,--用户ID
o.orderstate,--订单状态
decode(o.paystate,1,'支付',0,'未支付') as paystate,--1--支付,0--未支付
o.allotstatus,--回货状态
o.consignee,--收货人
m.regionname district,
n.regionname city,
oo.regionname province,
p.regionname country,
o.address,--订单的收货地址
o.goodsamount,--商品的总金额
o.orderamount,--实际订单金额:包含服务费、以及用券金额
o.shippingfee, --运费
o.realshippingfee,--实际运费
o.paytool, --支付共计
o.isbalancepay, --是否用券
o.balancepay,--用券折扣额
o.otherpay,--orderamount-balancepay
o.paytime,--支付时间
o.addtime,--订单产生时间
od.specialid,--专场ID
od.goodsid,--商品ID
od.goodsprice,--售价
gc.colornote,--颜色注释(对应商品主表的商品属性)
gs.sizenote, --尺码注释(对应商品主表的商品属性)
od.amount--购买数量


from ods.ods_orderinfo o
left join ods.ods_regioninfo  m on o.district = m.regionid --地区表
left join ods.ods_regioninfo n on m.parentid = n.regionid --城市表
left join ods.ods_regioninfo oo on n.parentid = oo.regionid --省份表
left join ods.ods_regioninfo p on oo.parentid = p.regionid --国家表
left join ods.ods_orderdetail od on o.orderid = od.orderid
left join ods.ods_goodscolor gc on od.colorid = gc.colorid
left join ods.ods_goodssize gs on od.sizeid = gs.sizeid;


commit;
end;
---------------------------------------
sp_dw_goodsinfo 代码如下
create or replace procedure sp_dw_goodsinfo is begin

delete from dw_goodsinfo;


insert into dw_goodsinfo
  (goodsid,
   goodsname,
   brandtype,
   marketprice,
   shopprice,
   isonsale,
   clickcount,
   realsales)

select
gi.goodsid,
gi.goodsname,
gb.brandtype,
gi.marketprice,
gi.shopprice,
gi.isonsale,
gi.clickcount,
gi.realsales

from ods.ods_goodsinfo gi
left join ods.ods_goodsbrand gb on gi.typeid = gb.supplierid;
commit;
end;

DM层

sp_dm_userinfo 代码如下
create or replace procedure sp_dm_userinfo is begin
delete from dm_userinfo;

commit;

insert into dm_userinfo
  (userid,
   username,
   sex,
   COUNTRY,
   PROVINCE,
   CITY,
   DISTRICT,
   USERMONEY,
   FROZENMONEY,
   REGTIME,
   LASTLOGIN)



select
userid,
username,
decode(sex,'0','女','1','男') as sex,
country,
province,
city,
district,
usermoney,
frozenmoney,
regtime,
lastlogin


from dw.dw_userinfo ;
commit;
end;
---------------------------------------------
sp_dm_usergoodsorder 代码如下
create or replace procedure sp_dm_usergoodsorder is begin
delete from dm_usergoodsorder;

insert into dm_usergoodsorder
  (userid,
   username,
   sex,
   orderid,
   orderstate,
   paystate,
   goodsamount,
   goodsid,
   goodsname,
   brandtype,
   goodsprice,
   colornote,
   sizenote,
   amount,
   addtime)

select
ui.USERID,
ui.USERNAME,
ui.SEX,
oi.ORDERID,
oi.ORDERSTATE,
oi.PAYSTATE,
oi.GOODSAMOUNT,
oi.GOODSID,
gi.GOODSNAME,
gi.BRANDTYPE,
oi.GOODSPRICE,
oi.COLORNOTE,
oi.SIZENOTE,
oi.AMOUNT,
oi.ADDTIME

from dw.dw_orderinfo oi
 left join dw.dw_userinfo  ui on ui.userid = oi.userid
left join dw.dw_goodsinfo gi on  oi.goodsid = gi.goodsid;
commit;
end;
------------------------------------------------
sp_dm_orderinfo 代码如下
create or replace procedure sp_dm_orderinfo as begin
delete from dm_orderinfo;
insert into dm_orderinfo
  (orderid,
   country,
   province,
   city,
   district,
   orderstate,
   paystate,
   allotstatus,
   goodsamount,
   orderamount,
   shippingfee,
   realshippingfee,
   paytool,
   isbalancepay,
   balancepay,
   otherpay,
   paytime,
   addtime)

select
ORDERID,
COUNTRY,
PROVINCE,
CITY,
DISTRICT,
ORDERSTATE,
PAYSTATE,
ALLOTSTATUS,
GOODSAMOUNT,
ORDERAMOUNT,
SHIPPINGFEE,
REALSHIPPINGFEE,
PAYTOOL,
ISBALANCEPAY,
BALANCEPAY,
OTHERPAY,
PAYTIME,
ADDTIME

from dw.dw_orderinfo ;
commit;
end;
----------------------------------------------------
sp_DM_goodsinfo 代码如下
create or replace procedure sp_DM_goodsinfo as begin
delete from dm_goodsinfo ;
insert into dm_goodsinfo
  (goodsid,
   goodsname,
   brandtype,
   marketprice,
   shopprice,
   isonsale,
   clickcount,
   realsales)

select distinct
GOODSID,
GOODSNAME,
BRANDTYPE,
MARKETPRICE,
SHOPPRICE,
ISONSALE,
CLICKCOUNT,
REALSALES


from dw.dw_goodsinfo ;
commit;
end;

1.在kettle创建DW,DM层的DB存储过程。
在这里,出现了一个问题,我在PLSQL内执行的代码并没有任何的报错,可是在kettle内执行时却出现了bug,找了半天,我才发现是性别字段,用decode函数的时候,本来描述内的字段类型是varchar2,而我直接用数字了,这导致plsql的隐式转换让代码编译成功,而kettle内却不能够成功执行调用DB过程。这一问题在给数字加上引号后解决。
2.解决用户相关统计需求时,发现性别字段内容消失了,原因是创建DM——userinfo表格的时候,用了ods层到dw层的代码,decode(sex,‘0’,‘女’,‘1’,‘男’)as sex 此处应改为sex
3.在帆软制作报表部分,在这里插入图片描述
切换BI库的时候是在这个地方切换的,找了半天。

最后的报表平台:
服务器–报表平台管理,用户名,自己设置–选择内置数据库
就进入到了界面。
左侧工具栏的管理系统–点击目录管理–添加目录–输入我的报表,就建完了一个文件夹。然后再回到目录管理,添加链接,复制已制作好的报表的链接即可。

备注
传入带参数的db存储过程
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值