数据转换故事分享一

本次问题根源是前后端数据处理的机制差异

1、问题描述:

在某次会员活动中,需要汇总以下数据:

1、总访问次数:统计某活动首页PV   --  (visit_counts)
2、总访问人数:统计某活动首页UV   --  (visit_persion_counts)
3、总参与人数:统计某活动参与抽奖的人数,去重   -- (participate_counts)
4、总分享数:某活动首页分享次数    --  (share_counts)

2、问题分析:

1、总访问次数、总分享数都是全量统计,包括重复操作;总访问人数、总参与人数都是人员统计,要去重操作;

2、前端H5开发人员,提供了三个关键标识字段:

访问eventKey:wheelVisitCnt
抽奖eventKey: wheelDrawPrize
分享eventKey: wheelShare

2.1 错误想法(被H5人称为面向对象想法):

1、通过eventKey=‘wheelDrawPrize’,区分出抽奖的;通过eventKey=‘wheelShare’,区分出分享的;(这个没有问题)

2、由于总访问人既包括抽奖的、分享的、既没抽奖又没分享的三种,所以认为对于一个参与抽奖、分享的人来说他应该有两个eventkey来标记;(理解上没有毛病,但实际上是错误的)

2.2 错误原因:

这个你不要用面向对象的思想去想,首先这个统计针对的某个动作做的统计,这个动作被执行多少次;然后这个动作又有多少人;最后得到统计的参与抽奖人数,分享次数,总访问人数结果。

所以eventKey=‘wheelVisitCnt’得到的就是所有的访问量;eventKey=‘wheelDrawPrize’得到的就是所有的参与抽奖量;通过eventKey=‘wheelShare’得到的就是所有的分享量。

3、问题处理:

 visit_counts BIGINT comment "总访问次数",
 sum(case when eventkey='wheelVisitCnt' then 1 else 0 end),
 
 visit_persion_counts BIGINT comment "总访问人数",
 count(distinct open_id case when eventkey='wheelVisitCnt') as visit_persion_counts,
 -- count(distinct openid) as visit_persion_counts,
 -- count(distinct case when eventkey='wheelVisitCnt' then open_id else null end) as visit_persion_counts,
 
 participate_counts BIGINT comment "总参与人数",
 count(distinct open_id case when eventkey='wheelDrawPrize') as participate_counts,
 --count(distinct case when eventkey='wheelDrawPrize' then open_id else null end) as participate_counts,
 
 share_counts BIGINT comment "总分享数",
 sum(case when eventkey='wheelShare' then 1 else 0 end) as share_counts,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值