全部产品
Search
文档中心

Hologres:Fungsi funnel pengelompokan dimensi (finder_group_funnel)

更新时间:Dec 18, 2025

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=7 menunjukkan 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-i bernilai 1, artinya event ke-(i+1) memiliki properti terkait. Biasanya, `attr_related` digunakan bersama `prop`. Jika attr_related diatur 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_index ke 1, pengelompokan dimulai segera setelah event pertama tercapai. Jika Anda mengatur group_event_index ke 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 ketika is_relative_window diatur 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.

    Catatan

    Hari kalender mengacu pada periode waktu dari pukul 00:00:00 hingga 23:59:59 setiap hari. Hari kalender pertama berkisar dari waktu 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_id untuk pengelompokan dimensi, data yang dikelompokkan ditampilkan berdasarkan nilai channel_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.

  1. 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');
  2. 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_numbers dalam fungsi `finder_funnel`.

    Misalnya, step_numbers=7 menunjukkan 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_event dalam 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.

  1. 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');
  2. 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

  1. 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');
  2. 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)