屬性關聯漏鬥函數持在特定的視窗期內計算事件的漏鬥結果,且可以指定事件關聯屬性,但不能按照時間進行分組。本文為您介紹屬性關聯漏鬥函數的使用。
背景資訊
屬性關聯漏鬥函數支援對任意事件的屬性進行關聯,例如遊戲情境中,設定的漏鬥為“登入帳號>進入遊戲>遊戲操作>關卡結算>帳號退出”等,並為每個事件設定了“國家”的屬性,此時就可以將該屬性作為關聯ID,保證每個步驟轉化都是按照同一個屬性值進行轉化。漏鬥不同步驟關聯的屬性可以是相同屬性,也可以是不同屬性,但是要求屬性的類型必須一致。
使用限制
僅支援Hologres V2.2.32及以上版本的執行個體使用該函數。
注意事項
漏鬥函數均需要由具備Superuser許可權的帳號執行以下語句開啟Extension。
CREATE extension flow_analysis; --開啟Extension
Extension是資料庫層級的函數,一個資料庫只需開啟一次即可。
Extension預設載入到public Schema下,且不支援載入到其他Schema。
屬性關聯漏鬥(finder_funnel)
計算每個使用者在一段時間視窗內的表現,支援指定事件維度關聯分析。
函數文法:
finder_funnel(window, start_timestamp, step_interval, step_numbers, num_events, attr_realted, time_zone, is_relative_window, server_timestamp, client_timestamp, prop1, prop2, ..., check_event1, check_event2...)
參數說明
參數名
是否必填
描述
window
是
分析統計的視窗時間大小,單位為毫秒。
start_timestamp
是
分析開始的時間,支援TIMESTAMP和TIMESTAMPTZ類型。
step_interval
是
一個步長的期間,指多大粒度內來計算轉化分析,單位為秒。
step_numbers
是
需要分析的步長數。例如:
step_interval=86400(1 天),step_numbers=7
表示從start_timestamp開始分析7天內,每天的漏鬥情況。num_events
是
需要分析的事件數目。
attr_realted
是
表示事件是否具備關聯屬性。INT類型數字,用二進位表示後,第
i
位為1,表示第i+1
個事件具備關聯屬性。通常情況下,attr_realted需要與prop聯合使用,轉換後的二進位中包含多少個1,就需要填寫多少個prop運算式。說明當attr_realted參數值為0時,表示不具備關聯屬性。
time_zone
是
TEXT類型,表示輸入時間對應的時區,必須採用標準的時區格式,例如
Asia/Shanghai
。僅當is_relative_window
設定為true時,才會對輸出結果產生影響(即按照時區展示結果)。is_relative_window
是
表示是否為多自然日視窗,預設值為false,若設定為true,對其他參數有以下幾個限制:
window:參數值必須為86400000的整數倍。
step_interval
:參數值必須為86400,即一個觀察步長是一天。
說明自然日是指每天的
00:00:00~23:59:59
,其中第一個自然日是事件發生時間~23:59:59
,後面的自然日是整天。通常按照自然日作為視窗可以用來觀察每天的漏鬥情況,以實現業務的進一步精細化營運。server_timestamp
是
事件發生的伺服器時間,支援TIMESTAMP和TIMESTAMPTZ類型,用於函數運行時,計算事件所屬的事件槽位/步進。
client_timestamp
是
事件發生的用戶端時間,支援TIMESTAMP和TIMESTAMPTZ類型,其類型需要和start_timestamp保持一致,用於函數運行時對資料進行排序。
prop
是
表示事件的關聯屬性,每個prop類型必須相同,否則無法進行比較。
check_event
是
需要分析的轉化事件列表,在window定義的時間長度範圍內,滿足條件的事件將會被認為有效事件,參與轉化分析。如有3個事件,則輸入
EventName = 'E0001', EventName = 'E0002', EventName = 'E0003'
。返回結果
該函數返回的結果是
{<最終到達的第幾個事件>, <每個步長內最終到達的第幾個事件>}
。說明結果中最終到達的第幾個事件,是指每個步長結果中取最長的事件數目。
漏鬥結果集合(funnel_rep)
funnel_rep支援對finder_funnel計算的明細漏鬥結果進行彙總計算,使用詳情請參見維度分組漏鬥函數(finder_group_funnel)。
樣本資料
您需要先執行以下命令完成資料準備。
CREATE TABLE finder_funnel_test_1(id INT, event_time TIMESTAMP, event TEXT, province TEXT,city TEXT);
INSERT INTO finder_funnel_test_1 VALUES
(1111, '2024-01-02 00:00:00', '註冊', '北京','北京'),
(1111, '2024-01-02 00:00:01', '登陸', '北京','北京'),
(1111, '2024-01-02 00:00:02', '付費', '北京','北京'),
(1111, '2024-01-02 00:00:03', '退出', '北京','北京'),
(1111, '2024-01-03 00:00:00', '註冊', '北京','北京'),
(1111, '2024-01-03 00:00:01', '登陸', '北京','北京'),
(1111, '2024-01-03 00:00:02', '付費', '北京','北京'),
(1111, '2024-01-04 00:00:00', '註冊', '北京','北京'),
(1111, '2024-01-04 00:00:01', '登陸', '北京','北京'),
(2222, '2024-01-02 00:00:00', '註冊', '浙江','杭州'),
(2222, '2024-01-02 00:00:00', '登陸', '浙江','杭州'),
(2222, '2024-01-02 00:00:01', '付費', '浙江','杭州'),
(2222, '2024-01-02 00:00:03', '付費', '浙江','杭州');
使用樣本
情境1:計算每個使用者在每個步長內到達的事件,不指定屬性關聯
本樣本基於樣本資料為您示範屬性關聯漏鬥函數的使用。
查詢時段期為3天,步長為3,按天拆分步長,共4個事件參與轉化的結果。命令如下:
--視窗期為3天,步長為3,按天拆分步長,共4個事件參與轉化。
SELECT
id,
finder_funnel (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 0, 'Asia/Shanghai', FALSE, event_time, event_time, event = '註冊', event = '登陸', event = '付費', event = '退出') AS funnel_res
FROM
finder_funnel_test_1
GROUP BY
id;
返回結果如下:
id | funnel_res
------+------------
2222 | {3,3,0,0}
1111 | {4,4,3,2}
(2 rows)
funnel_res的結果解讀:第一個數字代表該使用者最終到達的第幾個事件,後面數字代表在每個步長內到達的第幾個事件,例如id=1111, funnel_res={4,4,3,2}
表示該使用者最終到達的事件是第4個事件,其中第一個步長內到達了第4個事件,第二個步長內到達了第3個事件,第3個步長內到達了第2個事件。
情境2:指定事件屬性關聯
本樣本基於樣本資料為您示範屬性關聯漏鬥函數的使用。
其中attr_realted=3,轉換為二進位是11,表示第一個和第二個事件有關聯屬性。prop='province',表示兩個事件的分析維度為province。
SELECT
id,
finder_funnel (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 3, 'Asia/Shanghai', FALSE, event_time, event_time, province, province, event = '註冊', event = '登陸', event = '付費', event = '退出') AS funnel_res
FROM
finder_funnel_test_1
GROUP BY
id;
返回結果如下:
id | funnel_res
------+------------
2222 | {3,3,0,0}
1111 | {4,4,3,2}
(2 rows)
funnel_res的結果解讀:按照屬性關聯後展示每個使用者到達的最終事件和每個步長內到達的最終事件。
情境3:指定事件屬性關聯後彙總計算
本樣本基於樣本資料為您示範屬性關聯漏鬥函數的使用。
SELECT
funnel_rep (3, 4, funnel_res)
FROM (
SELECT
id,
finder_funnel (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 3, 'Asia/Shanghai', FALSE, event_time, event_time, province, province, event = '註冊', event = '登陸', event = '付費', event = '退出') AS funnel_res
FROM
finder_funnel_test_1
GROUP BY
id) a;
返回結果如下:
funnel_rep
-------------------------------------------
{"2,2,2,1","2,2,2,1","1,1,1,0","1,1,0,0"}
(1 row)
情境4:多個自然日作為視窗
以多個自然日作為視窗,展示每個自然日的漏鬥情況。本樣本為您展示3個自然日內4個事件的漏鬥結果。
建立表並插入資料。
CREATE TABLE finder_funnel_test_3(id INT, event_time TIMESTAMP, event TEXT, province TEXT,city TEXT); INSERT INTO finder_funnel_test_3 VALUES (1111, '2024-01-02 00:00:02', '註冊', '北京','北京'), (1111, '2024-01-02 00:00:03', '登陸', '北京','北京'), (1111, '2024-01-03 00:00:04', '付費', '北京','北京'), (1111, '2024-01-05 00:00:01', '退出', '北京','北京'), (2222, '2024-01-02 00:00:00', '註冊', '浙江','杭州'), (2222, '2024-01-02 00:00:00', '登陸', '浙江','杭州'), (2222, '2024-01-02 00:00:01', '付費', '浙江','杭州'), (2222, '2024-01-02 00:00:03', '付費', '浙江','杭州');
按照3個自然日計算,2024-01-02日
id=1111
時,00:00:02~23:59:59
為1個自然日,後面2024-01-03、2024-01-04分別為2個自然日,2024-01-05不在視窗期內,因此按照自然日觀察的最終結果為id=1111
時到達了第三個事件。SELECT id, finder_funnel (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 0, 'Asia/Shanghai', TRUE, event_time, event_time, event = '註冊', event = '登陸', event = '付費', event = '退出') AS funnel_res FROM finder_funnel_test_3 GROUP BY id;
返回結果如下:
id | funnel_res ------+------------ 1111 | {3,3,0,0} 2222 | {3,3,0,0} (2 rows)