日志服務提供窗口漏斗函數,可用于分析用戶行為、APP流量、產品目標轉化等數據。本文介紹窗口漏斗函數的基本語法和示例。
日志服務支持如下窗口漏斗函數。
函數名稱 | 語法 | 說明 | 支持SQL | 支持SPL |
window_funnel(sliding_window, timestamp, event_id, ARRAY[event_list01, event_list02...]) | 在滑動的時間窗口中搜索事件鏈并計算事件鏈中發生的最大連續的事件數。 如果數據中已定義事件列(event_id),可選擇該語法。 | √ | × | |
window_funnel(sliding_window, timestamp, ARRAY[event_id=event_list01, event_id=event_list02...]) | 在滑動的時間窗口中搜索事件鏈并計算事件鏈中發生的最大連續的事件數。 如果您想要自定義事件的非枚舉值,可選擇該語法,更具有靈活性。 | √ | × |
原理
窗口漏斗函數用于在滑動的時間窗口中搜索事件鏈并計算事件鏈中發生的最大連續的事件數。根據您定義的事件鏈,從第一個事件開始匹配,依次做有序最長的匹配,返回最大連續事件數。
窗口漏斗函數所采用的算法的詳細說明如下:
從事件鏈中的第一個事件開始并將事件計算器設置為1,然后開啟滑動窗口。
在滑動窗口內,如果事件鏈中的后續事件按順序發生,則事件計數器依次遞增。
在滑動窗口內,如果事件序列中斷,則停止本輪搜索,事件計數器不再增加,并開始新一輪的搜索,直到搜索結束。
結束搜索時,如果存在多個搜索結果,則函數將返回最大值,即最長事件鏈的大小。
例如:您定義的滑動時間窗口為100秒,事件鏈及其順序為事件1->事件2->事件3->事件4->事件5,實際發生的事件序列為事件1->事件2->事件4->事件5->事件1->事件3,則函數返回值為2,即表示在100秒內按照您定義的事件鏈發生的最大連續事件數為2(事件1->事件2)。
搜索必須從第一個事件開始。例如實際發生的事件序列為事件2->事件3->事件4,則函數返回值為0。
搜索必須有序,不能跳過事件鏈中的某個事件。例如事件4也在滑動窗口內,但是未發生事件3,因此不計入結果。
語法
日志服務支持如下兩種格式的窗口漏斗函數。
如果數據中已定義事件列(event_id),可選擇如下語法。
window_funnel(sliding_window, timestamp, event_id, ARRAY[event_list01, event_list02...])
如果您想要自定義事件的非枚舉值,可選擇如下語法,更具有靈活性。
window_funnel(sliding_window, timestamp, ARRAY[event_id=event_list01, event_id=event_list02...])
參數說明
參數 | 說明 |
sliding_window | 滑動的時間窗口,單位為秒。參數值為bigint類型。 |
timestamp | 時間戳,單位為秒。參數值為bigint類型。推薦使用日志服務內置的時間字段__time__。 |
event_id | 日志字段名,該字段值表示事件,例如:A、B、C。參數值為varchar類型。 |
event_list | 自定義的事件鏈,最多支持32個事件。參數值為array類型。例如:
|
示例
某電商店鋪舉行了一次推廣活動,現通過窗口漏斗函數分析本次推廣活動的轉化效果(轉化路徑為瀏覽商品、加入購物車、購買商品)。日志服務采集到的日志樣例如下:
日志字段 | 說明 |
behavior_type | 用戶行為類型。包括
|
category_id | 商品類目ID。 |
item_id | 商品ID。 |
timestamp | 用戶行為發生的時間點。 |
user_id | 用戶ID。 |
示例1
分析用戶在24小時內的購買行為。
查詢和分析語句
* | SELECT user_id, window_funnel( 86400, timestamp, ARRAY [behavior_type='pv', behavior_type='cart',behavior_type='buy'] ) AS levels GROUP BY user_id ORDER BY user_id LIMIT 1000
查詢和分析結果
例如用戶24的levels值為3,表示該用戶按照瀏覽商品、將商品加入購物車、購買商品的順序,完成了購買。
例如用戶14的levels值為2,表示該用戶瀏覽了商品以及將商品加入購物車,但是未購買。
示例2
分析不同用戶行動對應的人數。
查詢和分析語句
* | SELECT levels, count, sum(count) over( ORDER BY levels DESC ) AS total FROM ( SELECT levels, count(1) AS count FROM ( SELECT user_id, window_funnel( 86400, timestamp, ARRAY [behavior_type='pv', behavior_type='cart',behavior_type='buy'] ) AS levels FROM log GROUP BY user_id ) GROUP BY levels ORDER BY levels )
查詢和分析結果
瀏覽了商品的人數為513194,其中瀏覽商品后就離開的人數為138491。
將商品加入購物車的人數為374703,其中加入購物車后離開的人數為198642人。
購買商品的人數為176061。
示例3
計算本次推廣活動的轉化率。
絕對轉化率:每步用戶行為的人數占總人數的比例。
相對轉化率:每步用戶行為的人數占上一步人數的比例。
查詢和分析語句
* | SELECT *, 100.0 * total /(sum(count) over()) AS "絕對轉化率", if( lag(total, 1, 0) over() = 0, 100, (100.0 * total / lag(total, 1, 0) over()) ) AS "相對轉化率" FROM ( SELECT levels, count, sum(count) over( ORDER BY levels DESC ) AS total FROM ( SELECT levels, count(1) AS count FROM ( SELECT user_id, window_funnel( 86400, timestamp, ARRAY [behavior_type='pv', behavior_type='cart',behavior_type='buy'] ) AS levels FROM log GROUP BY user_id ) GROUP BY levels ) ORDER BY levels )
查詢和分析結果
表格
漏斗圖