首先答案,使用標準的SQL,因爲你的假設:
EVENTS
-----------------------------
SESION_ID , EVENT_NAME , TMST
爲了獲得在某個時間執行步驟#1的對話:
有一個簡單的佈局表活動
-- QUERY 1
SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event1' GROUP BY SESSION_ID;
這裏我假設event1每個會話可能發生多次。結果是一段時間內展示event1的唯一會話列表。
爲了得到第二步第三步和,我可以做相同的:
-- QUERY 2
SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event2' GROUP BY SESSION_ID;
-- QUERY 3
SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event3' GROUP BY SESSION_ID;
現在,你要選擇進行第一步,第二步和第三步的會議 - 按照這個順序。 更準確地說,您需要對執行步驟1的會話進行計數,然後對執行步驟2的會話進行計數,然後對執行步驟3的會話進行計數。 基本上,我們只需要3個左連接以列出進入渠道的會話結合上面的查詢和步驟他們進行:
-- FUNNEL FOR S1/S2/S3
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
-- QUERY 1
(SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event1' GROUP BY SESSION_ID) AS Q1,
LEFT JOIN
-- QUERY 2
(SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event2' GROUP BY SESSION_ID) AS Q2,
LEFT JOIN
-- QUERY 3
(SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event2' GROUP BY SESSION_ID) AS Q3
-- Q2 & Q3
ON Q2.SESSION_ID=Q3.SESSION_ID AND Q2.TMST<Q3.TMST
-- Q1 & Q2
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
(-- QUERY TO COUNT session at each step
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
等voilà!
現在進行討論。 第一點,結果是非常簡單的,因爲你採取「集」(或功能)的思維方式,而不是「程序性」的方法。不要將數據庫可視化爲包含列和行的固定表的集合......這是如何實現的,但它不是與它進行交互的方式。這是所有的設置,你可以按照你需要的方式來安排這些設置!
第二點,如果您正在使用MPP數據庫,查詢將自動優化爲並行運行。您甚至不需要以不同的方式編寫查詢,使用map-reduce或其他任何方法......我在測試數據集上運行了超過1億次事件的相同查詢,並在幾秒鐘內獲得結果。
最後但並非最不重要的是,查詢打開無限的可能性。只需根據引用者的結果,關鍵字,登陸頁面,用戶信息和分析結果進行分組,這些信息提供了最佳轉換率!
那麼你可以在減速器中獲得每個會話ID的所有事件,如果你認爲這使得它更容易。 –