java编一个漏斗_java – 漏斗分析计算,你如何计算漏斗?
首先,使用標(biāo)準(zhǔn)SQL,給出您的假設(shè):
有一個(gè)簡單布局的表EVENTS:
EVENTS
-----------------------------
SESION_ID , EVENT_NAME , TMST
要在某個(gè)時(shí)間獲得執(zhí)行步驟#1的會話:
-- QUERY 1
SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event1' GROUP BY SESSION_ID;
在這里,我假設(shè)event1可以在每個(gè)會話中發(fā)生一次以上.結(jié)果是一個(gè)在某個(gè)時(shí)間演示了event1的唯一會話列表.
為了獲得step2和step3,我可以這樣做:
-- 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;
現(xiàn)在,您要按順序選擇執(zhí)行step1,step2和step3的會話.
更準(zhǔn)確地說,您需要計(jì)算執(zhí)行步驟1的會話,然后計(jì)算執(zhí)行步驟2的會話,然后計(jì)算執(zhí)行步驟3的會話.
基本上我們只需要將上面的3個(gè)查詢與左連接組合在一起,列出進(jìn)入漏斗的會話以及它們執(zhí)行的步驟:
-- 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
-- Q1 & Q2
ON Q1.SESSION_ID=Q2.SESSION_ID AND Q1.TMST
結(jié)果是在步驟1進(jìn)入漏斗的唯一會話列表,并且可能繼續(xù)到step2和step3 ……例如:
SESSION_ID_1,TRUE,TRUE,TRUE
SESSION_ID_2,TRUE,TRUE,FALSE
SESSION_ID_3,TRUE,FALSE,FALSE
...
現(xiàn)在我們只需要計(jì)算一些統(tǒng)計(jì)數(shù)據(jù),例如:
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
Etvoilà!
現(xiàn)在進(jìn)行討論.
第一點(diǎn),考慮到你采用“集合”(或功能)思維方式而不是“程序化”方法,結(jié)果非常簡單.不要將數(shù)據(jù)庫可視化為具有列和行的固定表的集合……這是它的實(shí)現(xiàn)方式,但它不是您與它交互的方式.這是所有套裝,您可以按照您需要的方式安排套裝!
第二點(diǎn),如果您使用MPP數(shù)據(jù)庫,查詢將自動優(yōu)化為并行運(yùn)行.您甚至不需要以不同方式編寫查詢,使用map-reduce或其他…我在我的測試數(shù)據(jù)集上運(yùn)行了相同的查詢,其中包含超過1億個(gè)事件,并在幾秒鐘內(nèi)獲得結(jié)果.
最后但并非最不重要的是,查詢打開了無限可能.只需按引用,關(guān)鍵字,登錄頁面,用戶信息和分析的結(jié)果進(jìn)行分組,例如提供最佳轉(zhuǎn)換率!
總結(jié)
以上是生活随笔為你收集整理的java编一个漏斗_java – 漏斗分析计算,你如何计算漏斗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐几本学习Go语言的书
- 下一篇: 斜率优化专题