[TOC]
需要如何分析
参考研究了数数科技thinkingdata后台,梳理我们常规分析数据,进行抽象成几种我认为必要的核心分析模板。
- 实时分析
- 路径分析
- 事件分析
- 留存分析
以往我们做数据统计做法,是运营同学需要什么样,技术就开始编写代码统计出结果,然后制作后台页面把数据呈现出来。而且每个产品都有不同玩法数据需要统计展示。长期下去只会增加技术人员冗余工作,重复代码多,维护成本高。所以必须要对这块进行抽象,整个分析过程都应该由使用者进行操作,使用者需要哪些数据,需要如何分析,通过抽象出来的几个模板配置完毕,利用阿里云日志服务的实时查询分析把结果呈现出来。做到数据能实时统计呈现,使用者自由度,又彻底解放技术同学。
实时分析
用于实时查看某事件发生详情。例如我要查看当天内,充值成功事件,大于300元的所有订单情况。
- 分析时间:今天
- 分析对象:充值成功
- 分析条件:充值金额 大于 300
计算出结果
日志上报时间 | 订单创建时间 | 用户id | 订单号 | 充值金额 | 充值商品 |
---|---|---|---|---|---|
2020-07-09 16:22:00 | 2020-07-09 16:20:15 | 10001001 | wx202007090003 | 648 | 10002 |
2020-07-09 16:21:00 | 2020-07-09 16:19:15 | 10001001 | wx202007090002 | 328 | 10001 |
2020-07-09 16:20:00 | 2020-07-09 16:18:15 | 10001001 | wx202007090001 | 328 | 10001 |
_event_id_:1002 | SELECT * WHERE amount > 300
路径分析
指定分析条件,无需规定分析对象,进行升序检索。通常用于检索某角色在某段时间的行为动作。排查角色异常。例如我要查看1001这个用户在今天16点后做了哪些操作。
- 分析时间:今天
- 分析条件:用户id 等于 1001
- 分析条件:事件创建时间 大于 2020-07-09 16:00
计算出结果
日志上报时间 | 创建时间 | 事件id | 事件名称 | 操作详情 |
---|---|---|---|---|
2020-07-09 16:20:00 | 2020-07-09 16:18:15 | 1001 | 登录游戏 | {role_id:1001} |
2020-07-09 16:21:00 | 2020-07-09 16:19:15 | 1002 | 聊天 | {role_id:1001, msg:'你什么时候进团的?'} |
2020-07-09 16:22:00 | 2020-07-09 16:20:15 | 1003 | 登出游戏 | {role_id:1001} |
* | SELECT * WHERE role_id=1001 AND ctime>=1594281600 ORDER BY ctime asc
事件分析
事件分析分为以下几种
- 事件发生总次数
- 事件下某个属性发生的总次数、去重数、最大值、最小值
- A事件属性发生的总次数、去重数、最大值、最小值
+-*/
B事件属性发生的总次数、去重数、最大值、最小值、总和
统计每天注册用户数
分析对象: 用户注册
分析属性: 总次数
分组项: 总体
_event_id_ :1002 |
select date_format(_create_time_, '%Y-%m-%d') as cday, count(1) as num from log
group by cday
order by cday desc
统计每天注册并升级的用户数
分析对象: 用户注册
分析属性: role_id.去重数
分析条件: 且事件
- 分析对象: 用户升级
- 属性关联: role_id
- 分析条件: level>=2
分组项: 总体
_event_id_ :1002 or _event_id_ :1007 |
select cday,count(1) as num from (
(select date_format(_create_time_, '%Y-%m-%d') as cday, role_id from log where _event_id_=1002 group by cday,role_id) as reg
join
(select date_format(_create_time_, '%Y-%m-%d') as cday1, role_id as role_id1 from log where _event_id_=1007 and role_level>=2 group by cday1,role_id1) as level
on reg.cday=level.cday1 and reg.role_id = level.role_id1
)
group by cday
order by cday desc
活跃ARPU:付费金额 / 活跃用户
分析别名: ARPU
分析类型: 编辑公式
分析对象: 用户充值
分析属性: amount.总和
分析条件: 无
除于
分析对象: 用户登录
分析属性: role_id.去重数
分析条件: 无
交集方式: join
分组项: 分游戏服server_id
注意,涉及多事件运算,默认只会取交集部分进行,即 inner join 。我们可以手动修改交集方式 left join 、 right join 、 full join
_event_id_ :1023 or _event_id_ :1004 |
select cday1, cday2, server_id1, server_id2, amount1, num2, round(amount1/num2, 2) as arpu from (
(select date_format(ctime, '%Y-%m-%d') as cday1,server_id as server_id1,sum(amount) as amount1 from log where _event_id_=1023 group by cday1,server_id1) as tbl1
join
(select date_format(ctime, '%Y-%m-%d') as cday2, server_id as server_id2, count(distinct role_id) as num2 from log where _event_id_=1004 group by cday2, server_id2) as tbl2
on tbl1.cday1=tbl2.cday2 and tbl1.server_id1=tbl2.server_id2
)
统计每天活跃
分析对象: 用户登录
分析属性: role_id.去重数
分析条件: 且事件
- 分析对象: 用户升级
- 属性关联: role_id
- 分析条件: level>=2
分组项: 总体
_event_id_ :1002 or _event_id_ :1007 |
select cday,count(1) as num from (
(select date_format(_create_time_, '%Y-%m-%d') as cday, role_id from log where _event_id_=1002 group by cday,role_id) as reg
join
(select date_format(_create_time_, '%Y-%m-%d') as cday1, role_id as role_id1 from log where _event_id_=1007 and role_level>=2 group by cday1,role_id1) as level
on reg.cday=level.cday1 and reg.role_id = level.role_id1
)
group by cday
order by cday desc
留存分析
_event_id_:1002 or _event_id_:1004 |
select register_day, login_day, (date_diff('day', register_day,login_day)+1) AS dayn, count(*) as num
from (
(select date_format(ctime, '%Y-%m-%d') as register_day,role_id from log where _event_id_=1002) as reg
join
(select date_format(ctime, '%Y-%m-%d') as login_day,role_id from log where _event_id_=1004 group by login_day,role_id) as login
on reg.role_id = login.role_id
)
group by register_day, login_day
order by register_day,dayn asc
limit 1000