页面回访指标开发(次日回访、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 --次数
FROMtmp.user_page_log
WHERE pt_date BETWEEN '${date_ymd}' AND date_add('${date_ymd}',6)
GROUP BYpage_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_dateAND a.page_id = b.page_idAND a.user_id = b.user_id
LEFT JOINupv  c
ON DATE_SUB(c.pt_date, 5) = b.pt_date -- 次日数据关联7日数据AND b.page_id = c.page_idAND 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 NULLAND 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;


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部