首先,根据您的假设,使用标准SQL查询语句得出答案:
假设有一个名为EVENTS的表格,其布局简单:
EVENTS
SESION_ID , EVENT_NAME , TMST
获取在某个时间执行步骤#1的会话:
SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event1' GROUP BY SESSION_ID;
在这里,我假设事件1可以在一个会话中发生多次。结果是列出了一些在某个时间展示了事件1的唯一会话列表。
为了获得步骤2和步骤3,我只需要做同样的事情:
SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event2' GROUP BY SESSION_ID;
SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event3' GROUP BY SESSION_ID;
现在,你想选择按顺序执行了step1、step2和step3的会话。
更准确地说,您需要计算执行了step 1的会话数量,然后计算执行了step2的会话数量,最后计算执行step3的会话数量。
基本上,我们只需要将上述三个查询与左连接组合起来,以列出进入漏斗的会话以及它们执行的步骤:
SELECT
SESSION_ID,
Q1.TMST IS NOT NULL AS PERFORMED_STEP1,
Q2.TMST IS NOT NULL AS PERFORMED_STEP2,
Q3.TMST IS NOT NULL AS PERFORMED_STEP3
FROM
(SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event1' GROUP BY SESSION_ID) AS Q1,
LEFT JOIN
(SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event2' GROUP BY SESSION_ID) AS Q2,
LEFT JOIN
(SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event2' GROUP BY SESSION_ID) AS Q3
ON Q2.SESSION_ID=Q3.SESSION_ID AND Q2.TMST<Q3.TMST
ON Q1.SESSION_ID=Q2.SESSION_ID AND Q1.TMST<Q2.TMST
结果是在第一步进入漏斗的独特会话列表,可能已经继续到第二步和第三步... 例如:
SESSION_ID_1,TRUE,TRUE,TRUE
SESSION_ID_2,TRUE,TRUE,FALSE
SESSION_ID_3,TRUE,FALSE,FALSE
...
现在我们只需要计算一些统计数据,例如:
SELECT
STEP1_COUNT,
STEP1_COUNT-STEP2_COUNT AS EXIT_AFTER_STEP1,
STEP2_COUNT*100.0/STEP1_COUNT AS PERCENTAGE_TO_STEP2,
STEP2_COUNT-STEP3_COUNT AS EXIT_AFTER_STEP2,
STEP3_COUNT*100.0/STEP2_COUNT AS PERCENTAGE_TO_STEP3,
STEP3_COUNT*100.0/STEP1_COUNT AS COMPLETION_RATE
FROM
(
SELECT
SUM(CASE WHEN PERFORMED_STEP1 THEN 1 ELSE 0 END) AS STEP1_COUNT,
SUM(CASE WHEN PERFORMED_STEP2 THEN 1 ELSE 0 END) AS STEP2_COUNT,
SUM(CASE WHEN PERFORMED_STEP3 THEN 1 ELSE 0 END) AS STEP3_COUNT
FROM
[... insert the funnel query here ...]
) AS COMPUTE_STEPS
Et voilà!
现在开始讨论。首先,如果你采用“集合”(或者函数)思考方式而不是“过程式”方法,那么结果就非常简单明了。不要将数据库视为一组固定的有列和行的表格...虽然它是这样实现的,但这并不是你与之交互的方式。它都是集合,你可以按照需要排列集合。
其次,如果你使用MPP数据库,那么查询将自动优化以并行运行。你甚至不需要以不同方式编写查询,使用map-reduce或其他方式...我在测试数据集上运行了相同的查询,其中包含超过1亿个事件,并在几秒钟内获得了结果。
最后但并非最不重要的是,查询打开了无限的可能性。只需按引荐人、关键字、着陆页面、用户信息等对结果进行分组,并分析哪些提供了最佳转化率即可!