美文网首页大数据开发
[最近7/30日各品牌复购率] Spark 指标实战(5)

[最近7/30日各品牌复购率] Spark 指标实战(5)

作者: 坨坨的大数据 | 来源:发表于2022-02-25 15:19 被阅读0次

需求说明如下

统计周期 统计粒度 指标 说明
最近7、30日 品牌 复购率 重复购买人数占购买人数比例

建表语句

CREATE EXTERNAL TABLE ads_repeat_purchase_by_tm
(
    `dt`                STRING COMMENT '统计日期',
    `recent_days`       BIGINT COMMENT '最近天数,7:最近7天,30:最近30天',
    `tm_id`             STRING COMMENT '品牌ID',
    `tm_name`           STRING COMMENT '品牌名称',
    `order_repeat_rate` DECIMAL(16, 2) COMMENT '复购率'
) COMMENT '各品牌复购率统计'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    LOCATION '/warehouse/gmall/ads/ads_repeat_purchase_by_tm/';

前提

今天是 2020-06-14
dws_trade_user_sku_order_nd:交易域用户商品粒度订单最近n日汇总事实表

user_id tm_id tm_name order_count_7d order_count_30d
用户id 品牌id 品牌名称 最近7日下单次数 最近30日下单次数
1001 22 七匹狼 5 15
1002 14 柒牌 12 30
1003 23 鸿星尔克 0 5
1005 24 匡威 15 55

完整sql

insert overwrite table ads_repeat_purchase_by_tm
select * from ads_repeat_purchase_by_tm
union
select
        '2020-06-14' dt,
        -- 根据购买过一个品牌,所有人下的单数,来判断他是否是购买过多次的人数
        recent_days, tm_id, tm_name,
       -- 无法通过count(*) 统计购买过的人数
       -- 因为可能存在 一个人在最近30天下单了,但是在最近7天没有下单
       cast( sum(`if`(order_count > 1, 1,0)) / sum(`if`(order_count > 0, 1,0)) * 100 as decimal(16,2)) order_repeat_rate

from (
         select recent_days,
                tm_id,
                tm_name,
                user_id,
                sum(`if`(recent_days = 7, order_count_7d, order_count_30d)) order_count

-- 统计的是用户截止到6-14日,对所有商品的最近7,30日的下单情况统计
-- 每天每个用户购买的每个商品是一行
         from dws_trade_user_sku_order_nd
                  lateral view explode(`array`(7, 30)) tmp as recent_days
         where dt = '2020-06-14'
-- 统计每个用户购买了每个品牌多少次(下过多少单)
         group by recent_days, tm_id, tm_name, user_id
     ) t1
group by recent_days, tm_id, tm_name;

思考步骤

  1. 计算 一个人 买 一个商品 买了多少单(7 30 天内)



    结果:

user_id tm_id order_count recent_days
用户id 品牌id 下单次数 计算天数
1001 22 5 7
1001 22 22 30
1003 23 20 7
1003 23 60 30
  1. 如果 某用户 下单次数 >1 则认定为 复购。
    复购 计为1 否则 0
`if`(order_count > 1, 1,0)

进行聚合

sum(`if`(order_count > 1, 1,0))
  1. 统计 总下单人数
    下单次数 >0 则 计为 有效下单
`if`(order_count > 0, 1,0)

进行聚合

sum(`if`(order_count > 0, 1,0))
  1. 计算复购率
    将 2 3 相除
 sum(`if`(order_count > 1, 1,0)) / sum(`if`(order_count > 0, 1,0))

相关文章

网友评论

    本文标题:[最近7/30日各品牌复购率] Spark 指标实战(5)

    本文链接:https://www.haomeiwen.com/subject/xzjnlrtx.html