Fungsi funnel pengelompokan dimensi memungkinkan Anda mengelompokkan dan menampilkan hasil berdasarkan dimensi tertentu serta menentukan properti terkait event. Misalnya, Anda dapat mengelompokkan hasil berdasarkan hari, negara, atau alamat IP untuk mendapatkan analisis funnel yang lebih terperinci. Setiap pengguna hanya dapat termasuk dalam satu kelompok. Jika pengguna tidak termasuk dalam kelompok mana pun, pengguna tersebut akan ditempatkan ke dalam kelompok `unreach`.
Batasan
Hanya Hologres V2.2.32 dan versi yang lebih baru yang mendukung fungsi funnel pengelompokan dimensi.
Perhatian
Untuk menggunakan fungsi funnel, Anda harus menjalankan pernyataan berikut sebagai superuser untuk menginstal ekstensi:
CREATE extension flow_analysis; --Install the extension.Ekstensi diinstal pada level database. Untuk setiap database, Anda hanya perlu menginstal ekstensi sekali.
Secara default, ekstensi dimuat ke skema public. Ekstensi tidak dapat dimuat ke skema lain. Untuk menggunakan ekstensi di skema lain, Anda harus menentukan nama fungsi dalam format public.function, seperti
public.windowFunnel.
finder_group_funnel
Fungsi ini digunakan untuk mengelompokkan event tertentu berdasarkan dimensi yang dipilih dan menghitung hasil funnel.
Sintaksis fungsi
Sintaksis
finder_group_funnel(window, start_timestamp, step_interval, step_numbers, num_events, attr_related, group_event_index,time_zone,is_relative_window, server_timestamp, client_timestamp, group_dimension, prop1, prop2, ..., check_event1, check_event2...)Parameter
Parameter
Required
Deskripsi
window
Yes
Jendela untuk analisis statistik. Satuan: milidetik.
start_timestamp
Yes
Waktu mulai analisis statistik. Tipe TIMESTAMP dan TIMESTAMPTZ didukung.
step_interval
Yes
Durasi ukuran langkah, yaitu granularitas untuk perhitungan dan analisis konversi. Satuan: detik.
step_numbers
Yes
Jumlah langkah yang akan dianalisis. Misalnya,
step_interval=86400 (1 hari), step_number=7menunjukkan bahwa status funnel dianalisis setiap hari selama tujuh hari, dimulai dari waktu yang ditentukan oleh `start_timestamp`.num_events
Yes
Jumlah event yang perlu dianalisis.
attr_related
Yes
Menentukan apakah suatu event memiliki properti terkait. Parameter ini menerima angka UINT8. Dalam representasi biner, jika bit ke-
ibernilai 1, artinya event ke-(i+1)memiliki properti terkait. Biasanya, `attr_related` digunakan bersama `prop`. Jikaattr_relateddiatur ke 1, jumlah ekspresi `prop` yang harus Anda masukkan sama dengan jumlah bit 1 yang Anda tetapkan.group_event_index
Yes
Event yang menjadi dasar pengelompokan.
Misalnya, jika Anda mengatur
group_event_indexke 1, pengelompokan dimulai segera setelah event pertama tercapai. Jika Anda mengaturgroup_event_indexke 2, pengelompokan hanya dimulai ketika event kedua tercapai. Konversi yang tidak mencapai event kedua akan ditempatkan ke dalam kelompok `unreach`.time_zone
Yes
Zona waktu untuk waktu input. Nilainya harus bertipe TEXT dan dalam format zona waktu standar, seperti
Asia/Shanghai. Parameter ini hanya memengaruhi hasil output ketikais_relative_windowdiatur ke true. Dalam kasus ini, hasil ditampilkan berdasarkan zona waktu tersebut.is_relative_window
Yes
Menentukan apakah jendela merupakan jendela multi-hari kalender. Nilai default adalah false. Jika Anda mengatur parameter ini ke true, batasan berikut berlaku untuk parameter lain:
window: Nilai parameter harus merupakan kelipatan bulat dari 86.400.000.
step_interval: Nilai parameter harus 86400, yang berarti satu langkah pengamatan setara dengan satu hari.
CatatanHari kalender mengacu pada periode waktu
dari pukul 00:00:00 hingga 23:59:59setiap hari. Hari kalender pertama berkisar dariwaktu event hingga pukul 23:59:59, sedangkan hari-hari kalender berikutnya merupakan hari penuh. Dalam kebanyakan kasus, Anda dapat menggunakan hari kalender sebagai jendela untuk mengamati data funnel harian guna mendukung operasi bisnis yang lebih terperinci.server_timestamp
Yes
Waktu server saat event terjadi. Tipe TIMESTAMP dan TIMESTAMPTZ didukung. Parameter ini digunakan untuk menghitung slot atau langkah event tempat event tersebut termasuk saat fungsi dijalankan.
client_timestamp
Yes
Waktu klien saat event terjadi. Tipe TIMESTAMP dan TIMESTAMPTZ didukung. Tipe data parameter ini harus sama dengan tipe data parameter start_timestamp. Parameter ini digunakan untuk mengurutkan data saat fungsi dijalankan.
group_dimension
Yes
Dimensi yang digunakan untuk pengelompokan. Misalnya, jika Anda memilih bidang
channel_iduntuk pengelompokan dimensi, data yang dikelompokkan ditampilkan berdasarkan nilaichannel_id. Untuk menggunakan beberapa dimensi, gabungkan menggunakan `concat_ws` atau `concat`. Saat ini, hanya bidang bertipe TEXT yang dapat digunakan untuk pengelompokan.prop
No
Properti terkait event. Tipe data semua properti harus sama. Jika tidak, perbandingan tidak dapat dilakukan.
check_event
Yes
Daftar event konversi yang akan dianalisis. Event yang memenuhi kondisi dalam durasi yang ditentukan oleh `window` dianggap valid dan dimasukkan dalam analisis konversi. Misalnya, jika terdapat tiga event, masukkan
EventName = 'E0001', EventName = 'E0002', EventName = 'E0003'.Hasil yang dikembalikan
Fungsi ini mengembalikan hasil terenkripsi bertipe BINARY. Anda harus menggunakan fungsi finder_group_funnel_res untuk mendekripsi hasil tersebut.
Contoh
Contoh ini menjelaskan cara menggunakan fungsi finder_group_funnel.
Persiapkan tabel finder_group_funnel_test dan masukkan data ke dalam tabel tersebut.
CREATE TABLE finder_group_funnel_test(id INT, event_time TIMESTAMP, event TEXT, province TEXT,city TEXT); INSERT INTO finder_group_funnel_test VALUES (1111, '2024-01-02 00:00:00', 'registration', 'Beijing','Beijing'), (1111, '2024-01-02 00:00:01', 'logon', 'Beijing','Beijing'), (1111, '2024-01-02 00:00:02', 'payment', 'Beijing','Beijing'), (1111, '2024-01-02 00:00:03', 'exit', 'Beijing','Beijing'), (1111, '2024-01-03 00:00:00', 'registration', 'Beijing','Beijing'), (1111, '2024-01-03 00:00:01', 'logon', 'Beijing','Beijing'), (1111, '2024-01-03 00:00:02', 'payment', 'Beijing','Beijing'), (1111, '2024-01-04 00:00:00', 'registration', 'Beijing','Beijing'), (1111, '2024-01-04 00:00:01', 'logon', 'Beijing','Beijing'), (2222, '2024-01-02 00:00:00', 'registration', 'Zhejiang','Hangzhou'), (2222, '2024-01-02 00:00:00', 'logon', 'Zhejiang','Hangzhou'), (2222, '2024-01-02 00:00:01', 'payment', 'Zhejiang','Hangzhou'), (2222, '2024-01-02 00:00:03', 'payment', 'Zhejiang','Hangzhou');Untuk mengelompokkan dan menampilkan hasil berdasarkan bidang province, jalankan perintah berikut:
SELECT id, UNNEST(finder_group_funnel (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 0, 1, 'Asia/Shanghai', FALSE, event_time, event_time, province, event = 'registration', event = 'logon', event = 'payment', event = 'exit')) AS result FROM finder_group_funnel_test GROUP BY id;Hasil berikut dikembalikan: Nilai result adalah hasil terenkripsi. Anda harus menggunakan fungsi finder_group_funnel_res untuk mendekripsi hasil tersebut. Untuk informasi lebih lanjut, lihat finder_group_funnel_res.
id | result ------+----------------- 2222 | Zhejiang 2222 | unreach 1111 | Beijing 1111 | unreach (4 rows)
finder_group_funnel_res
Fungsi ini digunakan untuk mendekripsi detail funnel dalam hasil BINARY yang dikembalikan oleh fungsi finder_group_funnel.
Sintaksis fungsi
Sintaksis
finder_group_funnel_res(finder_group_funnel())Parameter
finder_group_funnel(): Fungsi ini digunakan untuk mengelompokkan event tertentu berdasarkan dimensi yang dipilih dan menghitung hasil funnel. Untuk informasi lebih lanjut, lihat finder_group_funnel.
Hasil yang dikembalikan
Fungsi ini mengembalikan hasil yang telah didekripsi.
Contoh
Contoh ini mendekripsi hasil dari contoh finder_group_funnel untuk menampilkan funnel terperinci untuk setiap pengguna.
Jalankan perintah berikut:
SELECT id, finder_group_funnel_res (result) AS res FROM ( SELECT id, UNNEST(finder_group_funnel (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 0, 1, 'Asia/Shanghai', FALSE, event_time, event_time, province, event = 'register', event = 'logon', event = 'pay', event = 'exit')) AS result FROM finder_group_funnel_test GROUP BY id) a;Hasil berikut dikembalikan:
id | res ------+----------- 1111 | {4,4,3,2} 1111 | {0,0,0,0} 2222 | {3,3,0,0} 2222 | {0,0,0,0}Menginterpretasikan hasil yang didekripsi: Anda dapat mendekripsi hasil `finder_group_funnel` untuk menampilkan funnel terperinci untuk setiap pengguna. Misalnya, pertimbangkan hasil `{4,4,3,2}` untuk ID pengguna 1111:
4: Event terakhir yang dicapai pengguna dalam 3 hari adalah event keempat, `exit`.
4: Event keempat pengguna pada hari pertama adalah Exit.
3: Event terakhir yang dicapai pengguna pada hari kedua adalah event ketiga, `payment`.
2: Event terakhir yang dicapai pengguna pada hari ketiga adalah event kedua, `logon`.
finder_group_funnel_text_group
Fungsi ini digunakan untuk mendekripsi field pengelompokan dalam hasil BINARY yang dikembalikan oleh fungsi finder_group_funnel. Fungsi ini biasanya digunakan bersama fungsi finder_group_funnel_res.
Deskripsi fungsi
Sintaksis
finder_group_funnel_text_group(finder_group_funnel())Parameter
finder_group_funnel(): Fungsi ini digunakan untuk mengelompokkan event tertentu berdasarkan dimensi yang dipilih dan menghitung hasil funnel. Untuk informasi lebih lanjut, lihat finder_group_funnel.
Hasil yang dikembalikan
Fungsi ini mengembalikan hasil yang telah didekripsi.
Contoh
Pada contoh ini, hasil dari contoh untuk finder_group_funnel didekripsi untuk menampilkan hasil funnel, event terakhir yang dicapai, dan event terakhir yang dicapai dalam setiap ukuran langkah untuk setiap pengguna yang dikelompokkan. Jalankan perintah berikut:
SELECT
id,
finder_group_funnel_text_group (result) AS key,
finder_group_funnel_res (result) AS res
FROM (
SELECT
id,
UNNEST(finder_group_funnel (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 0, 1, 'Asia/Shanghai', FALSE, event_time, event_time, province, event = 'registration', event = 'logon', event = 'payment', event = 'exit')) AS result
FROM
finder_group_funnel_test
GROUP BY
id) a;Hasil berikut dikembalikan:
id | key | res
------+---------+-----------
2222 | Zhejiang | {3,3,0,0}
2222 | unreach | {0,0,0,0}
1111 | Beijing | {4,4,3,2}
1111 | unreach | {0,0,0,0}
(4 rows)Fungsi agregasi untuk hasil funnel (funnel_rep)
Fungsi ini digunakan untuk mengagregasi hasil perhitungan FINDER_FUNNEL dan finder_group_funnel guna menghasilkan hasil agregasi semua pengguna pada setiap lapisan funnel.
Deskripsi fungsi
Sintaksis
funnel_rep(step_number, num_events, funnel_res)Parameter
Parameter
Required
Deskripsi
step_number
Yes
Nilai UINT yang menentukan jumlah slot waktu. Nilai ini biasanya sama dengan nilai
step_numbersdalam fungsi `finder_funnel`.Misalnya,
step_numbers=7menunjukkan bahwa tujuh slot waktu diamati.num_events
Yes
Nilai UINT yang menentukan jumlah total event yang berpartisipasi dalam konversi. Nilai ini biasanya sama dengan jumlah event dalam
check_eventdalam fungsi `finder_funnel`.funnel_res
Yes
Detail semua langkah konversi yang dihasilkan oleh setiap pengguna, yaitu output dari finder_tunnel.
Hasil yang dikembalikan
Fungsi ini mengembalikan array satu dimensi berupa string dalam format
{"n1,...,nn","m1,...,mn"}. Array ini merepresentasikan status funnel keseluruhan (jumlah pengguna yang sesuai dengan event 1 hingga N) dan status funnel dalam setiap ukuran langkah (jumlah pengguna yang sesuai dengan event 1 hingga N).
Contoh
Contoh ini menjelaskan cara menghitung event yang dicapai setiap pengguna ketika periode jendela adalah tiga hari dan ukuran langkah adalah tiga hari. Data dari contoh untuk finder_group_funnel digunakan. Jalankan perintah berikut:
-- With a 3-day window and a 3-day step size, calculate the event reached by each user.
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, 0, 'Asia/Shanghai', FALSE, event_time, event_time, event = 'registration', event = 'logon', event = 'payment', event = 'exit') AS funnel_res
FROM
finder_group_funnel_test
GROUP BY
id) a;Hasil berikut dikembalikan:
funnel_rep
-------------------------------------------
{"2,2,2,1","2,2,2,1","1,1,1,0","1,1,0,0"}
(1 row)Contoh penggunaan lengkap
Skenario 1: Mengelompokkan dan menampilkan hasil funnel pengguna menggunakan jendela multi-hari
Analisis data funnel dalam 3 hari dan data funnel setiap hari berdasarkan dimensi province ketika empat event terjadi secara berurutan.
Untuk mempersiapkan data, jalankan perintah berikut:
CREATE TABLE finder_group_funnel_test_1(id INT, event_time TIMESTAMP, event TEXT, province TEXT,city TEXT); INSERT INTO finder_group_funnel_test_1 VALUES (1111, '2024-01-02 00:00:00', 'registration', 'Beijing','Beijing'), (1111, '2024-01-02 00:00:01', 'logon', 'Beijing','Beijing'), (1111, '2024-01-02 00:00:02', 'payment', 'Beijing','Beijing'), (1111, '2024-01-02 00:00:03', 'exit', 'Beijing','Beijing'), (1111, '2024-01-03 00:00:00', 'registration', 'Beijing','Beijing'), (1111, '2024-01-03 00:00:01', 'logon', 'Beijing','Beijing'), (1111, '2024-01-03 00:00:02', 'payment', 'Beijing','Beijing'), (1111, '2024-01-04 00:00:00', 'registration', 'Beijing','Beijing'), (1111, '2024-01-04 00:00:01', 'logon', 'Beijing','Beijing'), (2222, '2024-01-02 00:00:00', 'registration', 'Zhejiang','Hangzhou'), (2222, '2024-01-02 00:00:00', 'logon', 'Zhejiang','Hangzhou'), (2222, '2024-01-02 00:00:01', 'payment', 'Zhejiang','Hangzhou'), (2222, '2024-01-02 00:00:03', 'payment', 'Zhejiang','Hangzhou'), (3333, '2024-01-02 00:00:00', 'registration', 'Shanghai','Shanghai'), (3333, '2024-01-02 00:00:00', 'logon', 'Shanghai','Shanghai'), (3333, '2024-01-02 00:00:01', 'payment', 'Shanghai','Shanghai'), (3333, '2024-01-02 00:00:03', 'payment', 'Shanghai','Shanghai'), (3333, '2024-01-02 00:00:04', 'exit', 'Shanghai','Shanghai');Analisis data funnel dalam 3 hari dan data funnel setiap hari berdasarkan dimensi province ketika empat event terjadi secara berurutan. Jalankan perintah berikut:
SELECT key, funnel_rep (3, 4, res) AS ans FROM ( SELECT id, finder_group_funnel_text_group (result) AS key, finder_group_funnel_res (result) AS res FROM ( SELECT id, UNNEST(finder_group_funnel (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 0, 1, 'Asia/Shanghai', FALSE, event_time, event_time, province, event = 'Register', event = 'Log on', event = 'Payment', event = 'Exit')) AS result FROM finder_group_funnel_test_1 GROUP BY id) a) b GROUP BY key;Hasil berikut dikembalikan:
key | ans ---------+------------------------------------------- Beijing | {"1,1,1,1","1,1,1,1","1,1,1,0","1,1,0,0"} unreach | {"0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0"} Shanghai | {"1,1,1,1","1,1,1,1","0,0,0,0","0,0,0,0"} Zhejiang | {"1,1,1,0","1,1,1,0","0,0,0,0","0,0,0,0"} (4 rows)
Skenario 2: Menampilkan hasil funnel pengguna yang dikelompokkan berdasarkan hari kalender menggunakan jendela multi-hari kalender
Untuk mempersiapkan data, jalankan perintah berikut:
CREATE TABLE finder_group_funnel_test_2(id INT, event_time TIMESTAMP, event TEXT, province TEXT,city TEXT); INSERT INTO finder_group_funnel_test_2 VALUES (1111, '2024-01-02 00:00:02', 'registration', 'Beijing','Beijing'), (1111, '2024-01-02 00:00:03', 'logon', 'Beijing','Beijing'), (1111, '2024-01-03 00:00:04', 'payment', 'Beijing','Beijing'), (1111, '2024-01-05 00:00:01', 'exit', 'Beijing','Beijing'), (2222, '2024-01-02 00:00:00', 'registration', 'Zhejiang','Hangzhou'), (2222, '2024-01-02 00:00:00', 'logon', 'Zhejiang','Hangzhou'), (2222, '2024-01-02 00:00:01', 'payment', 'Zhejiang','Hangzhou'), (2222, '2024-01-02 00:00:03', 'payment', 'Zhejiang','Hangzhou');Analisis data funnel dalam 3 hari dan data funnel setiap hari kalender berdasarkan dimensi province ketika empat event terjadi secara berurutan. Jalankan perintah berikut:
SELECT key, funnel_rep (3, 4, res) AS ans FROM ( SELECT id, finder_group_funnel_text_group (result) AS key, finder_group_funnel_res (result) AS res FROM ( SELECT id, UNNEST(finder_group_funnel (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 0, 1, 'Asia/Shanghai', TRUE, event_time, event_time, province, event = 'register', event = 'logon', event = 'pay', event = 'exit')) AS result FROM finder_group_funnel_test_2 GROUP BY id) a) b GROUP BY key;Hasil berikut dikembalikan:
key | ans ---------+------------------------------------------- unreach | {"0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0"} Zhejiang | {"1,1,1,0","1,1,1,0","0,0,0,0","0,0,0,0"} Beijing | {"1,1,1,0","1,1,1,0","0,0,0,0","0,0,0,0"} (3 rows)