在核心交易分析中完成如下指标的计算

163 阅读2分钟

为了计算方便在dws层生产一张每日销售数据 -- 创建一张日期维度表,存放日期相关维度

-- 在订单宽表上增加日期对应维度信息如。订单日,订单周,订单周开始时间,订单月,订单季度,订单年

DROP TABLE IF EXISTS dws.dws_trade_orders_w;

create table if not exists dws.dws_trade_orders_w(

orderid string, -- 订单id

cat_3rd_id string, -- 商品三级分类id

thirdname string, -- 商品三级分类名称

secondname string, -- 商品二级分类名称

firstname string, -- 商品一级分类名称

shopid string, -- 店铺id

shopname string, -- 店铺名

regionname string, -- 店铺所在大区

cityname string, -- 店铺所在城市

paymethod tinyint, -- 支付方式

productsnum bigint, -- 商品数量

paymoney double, -- 订单明细金额

paytime string, -- 订单时间

pay_wek string,-- 订单所在周

pay_mon string,-- 订单所在月

pay_quarter string,-- 订单所在季

pay_year string,-- 订单所在年

is_hol_day int,-- 是否节假日

is_wek_day -- 是否休息日

) p

artitioned by (dt string)

STORED AS PARQUET;

统计 2020 年每个季度的销售订单笔数、订单总额****

select

         pay_quarter, --季度

         count(distinct orderid),-- 订单数

         sum(paymoney*productsnum) -- 订单金额

from

         dws.dws_trade_orders_w

         where dt='$do_date'

         group by pay_quarter

统计 2020 年每个月的销售订单笔数、订单总额****

select

         pay_mon, --月度

         count(distinct orderid),-- 订单数

         sum(paymoney*productsnum) -- 订单金额

from

         dws.dws_trade_orders_w

         where dt='$do_date'

         group by pay_mon

统计 2020 年每周(周一到周日)的销售订单笔数、订单总额****

select

         pay_wek, --周

         count(distinct orderid),-- 订单数

         sum(paymoney*productsnum) -- 订单金额

from

         dws.dws_trade_orders_w

         where dt='$do_date'

         group by pay_wek

统计 2020 年国家法定节假日、休息日、工作日的订单笔数、订单总额****

select

         count(distinct case when is_hol_day =1 then orderid end ), -- 国家法定节假日订单笔数

         sum(case when is_hol_day =1 then paymoney*productsnum end),--  国家法定节假日订单总额

         count(distinct case when is_wek_day =1 then orderid end ), -- 休息日订单笔数

         sum(case when is_hol_day =1 then paymoney*productsnum end), -- 休息日订单总额

         --工作日订单笔数

         count(distinct case when is_hol_day =0 and is_wek_day=0 then orderid end),

         -- 工作日订单总额

         sum(case when is_hol_day =0 and is_wek_day=0 then paymoney*productsnum end)

from

         dws.dws_trade_orders_w

         where year(dt)='2020'