页面回访指标开发(次日回访、7日回访)

回访数据组成部分:页面、用户、次数、次日是否访问、七日是否访问、日期

page_id页面id
user_id用户id
visit_cnt访问次数
has_return_visit_2d次日有回访
has_return_visit_7d7日有回访
pt_date日期

指标定义1:当日用户a 访问页面001,次日该用户又访问001页面,那么有次日回访行为;

当日访问过001页面,次日访问过001页面,同时7日访问过001页面,那么7日有回访行为;

次日回访、7日回访、N日回访(N>7),数据成递减趋势。

周期:最高回访7日为例,每次需要更新7天的数据

思路:拿当日 group by user_id ,page_id数据,关联次日group by user_id ,page_id数据,拿次日处理后数据,接着关联7日 group by user_id ,page_id 数据。

代码:

-- 开启动态分区
set hive.exec.dynamic.partition=TRUE;
set hive.exec.dynamic.partition.mode=nonstrict;

-- 业务逻辑
WITH upv as( -- user page visit
SELECT 
    page_id, -- 页面
	user_id, -- 用户
	pt_date, -- 日期
	count(1) visit_cnt --次数
FROM
    tmp.user_page_log
WHERE 
    pt_date BETWEEN '${date_ymd}' AND date_add('${date_ymd}',6)
GROUP BY
    page_id,
    user_id,
    pt_date)
SELECT 
    a.page_id,
    a.user_id,
    a.visit_cnt,
    IF(b.visit_cnt IS NULL, 0, 1) has_visit_2d, -- 次日回访
	IF(c.visit_cnt IS NULL, 0, 1) has_visit_7d, -- 7日回访
	a.pt_date
FROM 
    upv  a
LEFT JOIN -- 当日数据关联次日数据
    upv  b
ON DATE_SUB(b.pt_date, 1) = a.pt_date
    AND a.page_id = b.page_id
    AND a.user_id = b.user_id
LEFT JOIN
    upv  c
ON DATE_SUB(c.pt_date, 5) = b.pt_date -- 次日数据关联7日数据
    AND b.page_id = c.page_id
    AND b.user_id = c.user_id;

 

指标定义2:当日用户a 访问页面001,次日该用户又访问001页面,那么有次日回访行为;

次日到7日内该用户访问了001页面,那么称为7日回访(相当于7日回访包含次日回访)

WITH t1 as( -- page visit
SELECT page_id         page_id
       ,user_id        user_id
       ,pt_date        pt_date
       ,count(1)       visit_cnt
FROM dwd.dwd_fact_at_user_page_visit_inc_d
WHERE pt_date BETWEEN '${date_ymd}' AND date_add('${date_ymd}',6)
      AND user_id <> ''
      AND page_id IS NOT NULL
      AND page_id <> ''
GROUP BY page_id
         ,user_id
         ,pt_date
),
t2 AS 
(SELECT LAG(pt_date,1)OVER(
            PARTITION BY user_id,page_id 
            ORDER BY pt_date DESC) next_date
       ,pt_date                    pt_date
       ,user_id                    user_id
       ,page_id                    page_id
       ,visit_cnt                  visit_cnt
FROM t1)
SELECT user_id                                  user_id
       ,page_id                                 page_id
       ,visit_cnt                               visit_cnt
       ,pt_date                                 pt_date
       ,next_date                               next_date
       ,IF(DATEDIFF(next_date,pt_date) = 1,1,0) has_visit_2d
       ,IF(next_date IS NULL,0,1)               has_visit_7d
FROM t2;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值