在刚刚踏足零售业的第一个工作需求,解决目前补货遇到的痛点。
诉求:因人工无法在相应时间内剔除有问题的数据,所以借助于大数据平台。
小白练手项目:耗时1周了解业务逻辑与现有数据源,再耗时2周同步目前缺失的数据至hive平台,耗时1周写逻辑&出结果解决痛点;
论一个小白如何一步步搭建零售数据库。
- 同步daily库存表【原先仅weekly,联系大数据IT同步至Hive】
- 构建区域销售表 【零售单 匹配 店铺信息】
需求:解决区域补货收到非本区域买货的款的问题
- 前提条件:区域补货是区域上周有过销售才会补出
- 提问业务:为什么区域买货无订单但是会有销售?
- 可以从APP下单
- 首次分货下到店分错
零售单:sold_rpt
sku | store | soldqty |
---|---|---|
s1 | sto1 | 1 |
s1 | sto2 | 1 |
s1 | sto3 | 1 |
店铺信息:store_info
area | store |
---|---|
east | sto1 |
north | sto2 |
south | sto3 |
west | sto4 |
fr | sto5 |
构建区域销售表
CREATE TABLE sold_tb as
select sku,area,sum(soldqty) as soldqty
from sold_rpt a
left join store_info b
on a.store=b.store
group by sku,area
;
理想解决方案: 区域销售表 匹配 区域订单表 =>剔除无区域买货记录的数据
区域销售表:sold_tb
sku | area | soldqty |
---|---|---|
s1 | east | 1 |
s1 | north | 1 |
s1 | south | 1 |
区域买货表:order_tb
sku | area | order |
---|---|---|
s1 | east | 10 |
s1 | north | 10 |
剔除无区域买货记录的数据:
select sku,area,soldqty
from sold_tb a
left join order_tb b on a.sku=b.sku and a.area=b.area
where b.order is not null
;
限制条件:区域订单表-无【暂时未能从业务那拿到这份订单信息,文件/数据源也未全部熟悉】
=>暂不考虑 首次分货分错的问题
现实解决方案:若区域某sku上周有销售但前3个月无库存记录,则剔除;
库存表:soh_tb
sku | area | soh | daily |
---|---|---|---|
s1 | east | 10 | 2024-01-01 |
s1 | north | 10 | 2024-01-01 |
with ct1 as (--前3个月的库存记录
select sku,area,max(soh) from soh_tb
where daily>='2024-01-01'
group by sku,area)
--剔除无库存记录的数据--因库存数据量过大,所以暂定前3个月的库存
select sku,area,soldqty
from sold_tb a
left join ct1 b on a.sku=b.sku and a.area=b.area
where b.soh is not null
;
结果表:用于补货匹配的区域销售表
sku | area | soldqty |
---|---|---|
s1 | east | 1 |
s1 | north | 1 |
第一个练手项目完成(耗时1月),进入正式解决零售补货难题的大项目(耗时半年,不断完善耗时1年,直至新系统上线被替换);
有空会不断更新ETL搭建的逻辑及难易点;