DLA漏斗分析旨在帮助运营人员分析一个多步骤操作过程中每一步的转化与流失情况。假设购买商品过程中,需要触发一系列事件:启动 > 登录 > 搜索商品 > 查看商品 > 生成订单等。运营人员分析某段时间内(例如,2017年01月05号~2017年02月05号)所有依次触发启动 > 登录 > 搜索商品 > 查看商品 > 生成订单事件的人群的转化流失情况,即计算所有用户中触发登录事件的总人数A、A中触发搜索商品事件的总人数B、B中触发查看商品事件的总人数C以及C中触发生成订单事件的总人数D。
漏斗分析中包含时间窗口的概念,即需要保证所有事件在同一个窗口期内触发。例如时间窗口为1天,用户001触发搜索商品事件的时间和触发登录事件的时间间隔在一天内,搜索商品事件才有效,否则视为无效。同理,用户001触发查看商品事件的时间和触发登录事件的时间间隔也必须在一天内。时间窗口可以为1天、3天、7天或者1小时、6小时等任意长时间段。
前提条件
本文示例中的测试数据存储在OSS中,您可以按照以下步骤将您的测试数据存储在OSS中。
- 开通OSS服务。
- 创建存储空间。
- 上传文件。
本文示例中将以下测试数据上传到OSS的
funnel_data
目录。 1000002 1483258815538 收藏商品 {} 20170101 1000002 1483274981790 启动 {} 20170101 1000002 1483223087508 搜索商品 {"content": "computer", "page_num": 1} 20170101 1000002 1483232016805 搜索商品 {"content": "Apple", "page_num": 2} 20170101 1000002 1483200895552 订单付款 {} 20170101 1000003 1483218002826 搜索商品 {"content": "computer", "page_num": 2} 20170101 1000003 1483206471681 加入购物车 {} 20170101 1000003 1483284553531 加入购物车 {} 20170101 1000003 1483279891663 浏览商品 {"brand": "Apple", "price": 9500} 20170101 1000003 1483259182702 加入购物车 {} 20170101 1000004 1483260505099 登录 {} 20170101 1000004 1483231995064 收藏商品 {} 20170101 1000004 1483206318588 加入购物车 {} 20170101 1000004 1483241973408 登录 {} 20170101 1000004 1483202785557 收藏商品 {} 20170101 1000005 1483214265416 收藏商品 {} 20170101 1000005 1483206343383 收藏商品 {} 20170101 1000005 1483229265488 浏览商品 {"brand": "HuaW", "price": 9500} 20170101 1000005 1483244294552 生成订单 {"price_all": 5000} 20170101 1000005 1483246988534 登录 {} 20170101 1000006 1483207838307 收藏商品 {} 20170101
开始使用漏斗分析之前,您需要在DLA中完成以下准备工作。
步骤一:创建OSS Schema
CREATE Schema funnel_test_schema
WITH DBPROPERTIES (
catalog = 'oss',
location = 'oss://bucket-name/'
)
步骤二:创建表
CREATE EXTERNAL TABLE IF NOT EXISTS funnel_test (
user_id bigint NOT NULL COMMENT '',
event_time bigint NOT NULL COMMENT '',
event_id int NOT NULL COMMENT '',
event_name varchar NOT NULL COMMENT '',
event_attr varchar NOT NULL COMMENT '',
event_date date NOT NULL COMMENT ''
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 'oss://bucket-name/funnel_data/';
步骤三:使用漏斗分析函数进行数据分析
按照启动 > 登录 > 搜索商品 > 查看商品 > 生成订单的事件触发顺序,对应的事件ID为10001 > 10002 > 10003 > 10004 > 10007。
-
以下示例通过
funnel_count
函数,查询1月1号到20号一共20天、时间窗口为7天(单位毫秒)、事件个数为5个的漏斗,同时能够保存路径各节点的人群。 SELECT user_id, funnel_count(event_time,7 * 86400000,event_id, '10001,10002,10003,10004,10007') AS xwho_state FROM funnel_test WHERE event_id IN (10001, 10002, 10003, 10004, 10007) AND event_date BETWEEN '2017-01-01' AND '2017-01-20' GROUP BY user_id;
-
以下示例在
funnel_count
函数的基础上使用funnel_sum
函数,得出定义转化路径的总体转化率。 SELECT funnel_sum(xwho_state, 5) FROM ( SELECT user_id,funnel_count(event_time,7 * 86400000, event_id, '10001,10002,10003,10004,10007') AS xwho_state FROM funnel_test WHERE event_id IN (10001, 10002, 10003, 10004, 10007) AND event_date BETWEEN '2017-01-01' AND '2017-01-20' GROUP BY user_id );
-
如果需要对事件对应的JSON属性列
event_attr
的某个属性进行过滤,例如对10004类事件中price在3500到5000之间的数据进行过滤。 SELECT funnel_sum(xwho_state, 5) FROM ( SELECT user_id,funnel_count(event_time, 7 * 86400000,event_id, '10001,10002,10003,10004,10007') AS xwho_state FROM funnel_test WHERE event_id IN (10001, 10002, 10003, 10004, 10007) AND event_date BETWEEN '2017-01-01' AND '2017-01-20' OR (event_id = 10004 AND json_extract_scalar(event_attr, '$.price') BETWEEN 3500 AND 5000) GROUP BY user_id );
上述路径和事件通过ID进行表征,实际场景中可能只有事件的名称,而没有事件对应的ID,目前DLA也支持直接使用事件名称(本例中的event_name
列)进行路径事件的表征。
SELECT funnel_sum(xwho_state, 7) AS funnel
FROM (SELECT user_id,funnel_count(event_time, 7 * 86400000,event_name,'启动,登录,搜索商品,浏览商品,生成订单,订单付款,评价商品') AS xwho_state FROM funnel_test
WHERE event_name IN
('启动', '登录', '搜索商品', '浏览商品', '生成订单', '订单付款', '评价商品')
GROUP BY user_id);