全部产品
云市场

漏斗分析

更新时间:2019-12-17 14:54:13

背景信息

DLA漏斗分析旨在帮助运营人员分析一个多步骤操作过程中每一步的转化与流失情况。假设购买商品过程中,需要触发一系列事件:启动 > 登陆 > 搜索商品 > 查看商品 > 生成订单等。运营人员分析某段时间内(例如,2017年1月5号~2017年2月5号)所有依次触发启动 > 登陆 > 搜索商品 > 查看商品 > 生成订单事件的人群的转化流失情况,即计算所有用户中触发登陆事件的总人数A、A中触发搜索商品事件的总人数B、B中触发查看商品事件的总人数C以及C中触发生成订单事件的总人数D。

漏斗分析展现效果

漏斗分析中包含时间窗口的概念,即需要保证所有事件在同一个窗口期内触发。例如时间窗口为1天,用户001触发搜索商品事件的时间和触发登陆事件的时间间隔在一天内,搜索商品事件才有效,否则视为无效。同理,用户001触发查看商品事件的时间和触发登陆事件的时间间隔也必须在一天内。时间窗口可以为1天、3天、7天或者1小时、6小时等任意长时间段。

前提条件

本文示例中的测试数据存储在OSS中,您可以按照以下步骤将您的测试数据存储在OSS中。

  1. 开通OSS服务

  2. 创建存储空间

  3. 新建目录

    您可以根据业务需要创建目录,将源数据上传到指定目录。

  4. 上传文件

    本文示例中将以下测试数据上传到OSS的funnel_data目录。

    1. 1000002 1483258815538 收藏商品 {} 20170101
    2. 1000002 1483274981790 启动 {} 20170101
    3. 1000002 1483223087508 搜索商品 {"content": "computer", "page_num": 1} 20170101
    4. 1000002 1483232016805 搜索商品 {"content": "Apple", "page_num": 2} 20170101
    5. 1000002 1483200895552 订单付款 {} 20170101
    6. 1000003 1483218002826 搜索商品 {"content": "computer", "page_num": 2} 20170101
    7. 1000003 1483206471681 加入购物车 {} 20170101
    8. 1000003 1483284553531 加入购物车 {} 20170101
    9. 1000003 1483279891663 浏览商品 {"brand": "Apple", "price": 9500} 20170101
    10. 1000003 1483259182702 加入购物车 {} 20170101
    11. 1000004 1483260505099 登陆 {} 20170101
    12. 1000004 1483231995064 收藏商品 {} 20170101
    13. 1000004 1483206318588 加入购物车 {} 20170101
    14. 1000004 1483241973408 登陆 {} 20170101
    15. 1000004 1483202785557 收藏商品 {} 20170101
    16. 1000005 1483214265416 收藏商品 {} 20170101
    17. 1000005 1483206343383 收藏商品 {} 20170101
    18. 1000005 1483229265488 浏览商品 {"brand": "HuaW", "price": 9500} 20170101
    19. 1000005 1483244294552 生成订单 {"price_all": 5000} 20170101
    20. 1000005 1483246988534 登陆 {} 20170101
    21. 1000006 1483207838307 收藏商品 {} 20170101

    原始数据

开始使用漏斗分析之前,您需要在DLA中完成以下准备工作。

  1. 开通DLA服务

  2. 初始化DLA数据库主账号密码

实施步骤

步骤一:创建OSS Schema

  1. CREATE Schema funnel_test_schema
  2. WITH DBPROPERTIES (
  3. catalog = 'oss',
  4. location = 'oss://bucket-name/'
  5. )

步骤二:创建表

  1. CREATE EXTERNAL TABLE IF NOT EXISTS funnel_test (
  2. user_id bigint NOT NULL COMMENT '',
  3. event_time bigint NOT NULL COMMENT '',
  4. event_id int NOT NULL COMMENT '',
  5. event_name varchar NOT NULL COMMENT '',
  6. event_attr varchar NOT NULL COMMENT '',
  7. event_date date NOT NULL COMMENT ''
  8. )
  9. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
  10. STORED AS TEXTFILE
  11. LOCATION 'oss://bucket-name/funnel_data/';

步骤三:使用漏斗分析函数进行数据分析

按照启动 > 登陆 > 搜索商品 > 查看商品 > 生成订单的事件触发顺序,对应的事件ID为10001 > 10002 > 10003 > 10004 > 10007。

  • 以下示例通过funnel_count函数,查询1月1号到20号一共20天、时间窗口为7天(单位毫秒)、事件个数为5个的漏斗,同时能够保存路径各节点的人群。

    1. SELECT user_id,
    2. funnel_count(event_time,7 * 86400000,event_id,
    3. '10001,10002,10003,10004,10007') AS xwho_state
    4. FROM funnel_test
    5. WHERE event_id IN (10001, 10002, 10003, 10004, 10007)
    6. AND event_date BETWEEN '2017-01-01' AND '2019-01-20'
    7. GROUP BY user_id;
  • 以下示例在funnel_count函数的基础上使用funnel_sum函数,得出定义转化路径的总体转化率。

    1. SELECT funnel_sum(xwho_state, 5)
    2. FROM (
    3. SELECT user_id,funnel_count(event_time,7 * 86400000, event_id,
    4. '10001,10002,10003,10004,10007') AS xwho_state
    5. FROM funnel_test
    6. WHERE event_id IN (10001, 10002, 10003, 10004, 10007)
    7. AND event_date BETWEEN '2017-01-01' AND '2019-01-20'
    8. GROUP BY user_id
    9. );
  • 如果需要对事件对应的JSON属性列event_attr的某个属性进行过滤,例如对10004类事件中price在3500到5000之间的数据进行过滤。

    1. SELECT funnel_sum(xwho_state, 5)
    2. FROM (
    3. SELECT user_id,funnel_count(event_time, 7 * 86400000,event_id,
    4. '10001,10002,10003,10004,10007') AS xwho_state
    5. FROM funnel_test
    6. WHERE event_id IN (10001, 10002, 10003, 10004, 10007)
    7. AND event_date BETWEEN '2017-01-01' AND '2019-01-20'
    8. OR (event_id = 10004 AND
    9. json_extract_scalar(event_attr, '$.price') BETWEEN 3500 AND 5000)
    10. GROUP BY user_id
    11. );

上述路径和事件通过id进行表征,实际场景中可能只有事件的名称,而没有事件对应的id,目前DLA也支持直接使用事件名称(本例中的event_name列)进行路径事件的表征。

  1. SELECT funnel_sum(xwho_state, 7) AS funnel
  2. FROM (SELECT user_id,funnel_count(event_time, 7 * 86400000,event_name,'启动,登陆,搜索商品,浏览商品,生成订单,订单付款,评价商品') AS xwho_state FROM funnel_test
  3. WHERE event_name IN
  4. ('启动', '登陆', '搜索商品', '浏览商品', '生成订单', '订单付款', '评价商品')
  5. GROUP BY user_id);