All Products
Search
Document Center

Hologres:Fungsi analisis jalur

Last Updated:Jun 22, 2026

Hologres menyediakan serangkaian fungsi analisis jalur, termasuk fungsi detail jalur dan fungsi penguraian jalur. Fungsi-fungsi ini memproses tugas komputasi jalur secara efisien, menghitung detail jalur, serta mengurai hasilnya. Anda dapat menggunakan data yang direkam untuk menghasilkan Diagram Sankey, yang membantu memahami dan memvisualisasikan informasi jalur yang kompleks. Topik ini menjelaskan cara menggunakan fungsi detail jalur dan fungsi penguraian jalur.

Latar Belakang

Analisis jalur mencatat distribusi jalur pengguna dan urutan aksi dalam setiap session saat pengguna berinteraksi dengan Produk atau fitur Anda. Analisis ini menghasilkan Diagram Sankey perilaku pengguna yang intuitif. Diagram Sankey menampilkan setiap node kunci dalam alur pengguna dan traffic antar node tersebut, sehingga memungkinkan analisis bisnis secara granular. Dengan analisis jalur, Anda dapat memahami secara jelas keterlibatan pengguna dengan setiap fitur kunci Produk Anda, membantu tim operasional dan produk mengoptimalkan strategi bisnis serta melakukan iterasi Produk guna mendorong pertumbuhan bisnis. Hologres mendukung fungsi detail jalur untuk komputasi jalur terperinci dan fungsi penguraian jalur untuk analisis hasil. Output-nya dapat langsung digunakan untuk membuat Diagram Sankey.

Bagian atas antarmuka Diagram Sankey analisis jalur menyediakan time zone selector, time range selector, pengaturan maximum number of nodes per layer, dan tombol Export. Diagram Sankey dimulai dari event awal (misalnya $AppStart) dan secara bertahap menampilkan aksi pengguna berikutnya (seperti $AppEnd, AppPageview, Search, CheckIn, dan AllPayments). Setiap node diberi label berupa nama event dan jumlah pemicunya, sedangkan lebar aliran antar node mencerminkan volume traffic.

Catatan Penggunaan

  • Fungsi analisis jalur tersedia di Hologres V2.2 ke atas. Jika instans Anda menggunakan V2.1 atau versi sebelumnya, hubungi dukungan teknis Hologres untuk melakukan upgrade instans Anda.

  • Untuk menggunakan fungsi analisis jalur, Anda harus membuat ekstensi. Secara default, ekstensi dimuat ke dalam skema public dan tidak dapat dimuat ke skema lain.

     --Buat ekstensi.
    CREATE extension flow_analysis;
    Catatan

    Ekstensi bersifat tingkat database dan hanya perlu dibuat satu kali per database.

Fungsi detail jalur

Fungsi detail jalur (path_analysis_detail)

Fungsi path_analysis_detail menganalisis data event tertentu dan menyajikannya sebagai struktur jalur terperinci. Output-nya berupa array serialisasi yang berisi informasi lengkap, termasuk urutan jalur lengkap, hubungan induk-anak antar node dalam jalur, serta durasi setiap langkah.

  • Sintaks

    path_analysis_detail(
      event, 
    	event_time, 
    	start_event, 
    	session_interval_sec, 
    	path_depth, 
    	path_offset, 
    	is_reverse,
    split_session_by_event)
  • Parameter

    Parameter

    Tipe

    Deskripsi

    event

    text (data)

    Event yang akan dianalisis.

    event_time

    timestamp, timestamptz, bigint (data)

    Timestamp setiap event.

    start_event

    text (literal)

    Event awal atau akhir yang ditentukan.

    session_interval_sec

    bigint (literal)

    Interval session dalam detik (s).

    Jika selang waktu antar event berdekatan dalam satu session melebihi interval session yang ditentukan, sistem akan membaginya menjadi dua session. Misalnya, jika Anda mengatur interval menjadi 30 detik dan selang waktu antara dua event lebih dari 30 detik, kedua event tersebut dianggap sebagai bagian dari dua session berbeda.

    path_depth

    bigint (literal)

    Jumlah event yang diambil dalam urutan, dimulai dari event awal atau akhir yang ditentukan.

    path_offset

    bigint (literal)

    Offset event dari event awal atau akhir. Nilai 0 berarti tanpa offset.

    Misalnya, untuk rangkaian event a, b, dan c, jika a adalah event awal dan offset-nya 1, pencocokan dimulai dari event b.

    is_reverse

    bool (literal)

    Urutan output rangkaian event. Nilai yang valid:

    • false: Menentukan event awal. Rangkaian event dikembalikan dalam urutan kronologis.

    • true: Menentukan event akhir. Rangkaian event dikembalikan dalam urutan kronologis terbalik.

    split_session_by_event

    bool (literal)

    Metode pemisahan session. Nilai yang valid:

    • true: Session baru dimulai setiap kali event awal atau akhir yang ditentukan ditemui dalam rangkaian event.

    • false (Default): Session hanya dipisahkan berdasarkan nilai parameter session_interval_sec.

      Catatan

      Jika session_interval_sec diatur ke -1, session dipisahkan berdasarkan event, bukan waktu.

    Misalnya, jika jalur seperti abcabc...abc diulang 10 kali dalam satu session yang sama, mekanisme pencocokan fungsi hanya mencatat satu konversi. Jika Anda ingin memperlakukan setiap pengulangan jalur sebagai session baru untuk menghitung setiap konversi secara independen, Anda dapat mengatur parameter ini ke true. Hal ini memungkinkan setiap operasi baru dicatat dan dihitung secara terpisah.

  • Nilai kembalian

    path_analysis_detail: Mengembalikan nilai bertipe data text. Contoh: {"",\x01a\x01b<,\x01b\x01c<,""}.

    Catatan

    Untuk membaca hasilnya, Anda harus menggunakan fungsi penguraian jalur yang sesuai.

Fungsi pad_funnel

Fungsi pad_funnel mengambil informasi subjalur untuk kombinasi event tertentu.

  • Sintaks

    pad_funnel(path_analysis_detail(), target_path)
  • Parameter

    Parameter

    Tipe

    Deskripsi

    path_analysis_detail()

    text (data)

    Hasil yang dikembalikan oleh fungsi path_analysis_detail.

    target_path

    text (literal)

    Rangkaian event yang ditentukan.

  • Nilai kembalian

    pad_funnel: Mengembalikan nilai text. Contoh: text []{"",\x01a\x01b<,\x01b\x01c<,""}.

    Catatan

    Untuk membaca hasilnya, Anda harus menggunakan fungsi penguraian jalur yang sesuai.

Fungsi penguraian jalur

Fungsi pad_full_path

Fungsi pad_full_path mengurai hasil path_analysis_detail menjadi jalur induk, subjalur, dan durasi setiap langkah.

  • Sintaks

    pad_full_path(path_analysis_detail())
  • Parameter

    path_analysis_detail(): Hasil yang dikembalikan oleh fungsi path_analysis_detail.

  • Nilai kembalian

    • Fungsi pad_full_path mengembalikan konten berikut.

      pad_sub_path_left(unnested_pad_result)
      pad_sub_path_right(unnested_pad_result)
      pad_sub_index_left(unnested_pad_result)
      pad_sub_index_right(unnested_pad_result)
      pad_sub_cost(unnested_pad_result)
      pad_sub_session(unnested_pad_result)
    • Tabel berikut menjelaskan parameter kembalian.

      Fungsi

      Tipe

      Deskripsi

      pad_sub_path_left

      text

      Event awal subjalur.

      pad_sub_path_right

      text

      Event akhir subjalur.

      pad_sub_index_left

      bigint

      Indeks event awal subjalur dalam jalur lengkap session.

      pad_sub_index_right

      bigint

      Indeks event akhir subjalur dalam jalur lengkap session.

      pad_sub_cost

      bigint

      Durasi transisi untuk subjalur, dalam detik (s).

      pad_sub_session

      bigint

      Indeks session valid tempat subjalur tersebut berada.

Fungsi pad_session_path_array

Fungsi pad_session_path_array mengekstraksi rangkaian event untuk ID session tertentu sebagai array.

  • Sintaks

    pad_session_path_array(path_analysis_detail(), session_idx)
  • Parameter

    • path_analysis_detail(): Hasil yang dikembalikan oleh fungsi path_analysis_detail.

    • session_idx: Indeks session yang ditentukan.

  • Nilai kembalian

    Mengembalikan data bertipe array.

Contoh

Menyiapkan data

--Buat ekstensi jika belum ada.
CREATE extension flow_analysis;
--Siapkan data.
CREATE TABLE path_demo( 
    uid text,
    event text,
    event_time timestamptz
);
INSERT INTO path_demo VALUES
('1','Register','2023-11-24 16:01:23+08'),
('1','Log on','2023-11-24 16:02:10+08'),
('1','Browse','2023-11-24 16:02:15+08'),
('1','View live streams','2023-11-24 16:03:10+08'),
('1','Browse','2023-11-24 16:03:15+08'),
('1','Add to favorites','2023-11-24 16:04:20+08'),
('1','Browse','2023-11-24 16:07:21+08'),
('1','Purchase','2023-11-24 16:08:23+08'),
('1','Exit','2023-11-24 16:09:05+08'),
('2','Log on','2023-11-24 16:10:23+08'),
('2','Purchase','2023-11-24 16:12:23+08'),
('3','Log on','2023-11-24 16:02:23+08'),
('3','Browse','2023-11-24 16:02:23+08'),
('3','Add to favorites','2023-11-24 16:03:53+08'),
('3','View live streams','2023-11-24 16:04:53+08'),
('4','Log on','2023-11-24 16:02:23+08'),
('4','Browse','2023-11-24 16:03:53+08'),
('4','Purchase','2023-11-24 16:04:23+08'),
('4','View live streams','2023-11-24 16:05:53+08'),
('4','Cancel the order','2023-11-24 16:06:53+08');

Contoh 1: Mencatat semua jalur event

  • Pisahkan session berdasarkan waktu.

    --Pisahkan berdasarkan waktu: Tentukan 'Log on' sebagai event awal, atur interval session menjadi 180 detik, dan atur panjang urutan pencocokan menjadi 7. Lalu, gunakan fungsi pad_full_path untuk mengurai hasilnya.
    SELECT uid, pad_full_path(path_analysis_detail(event, event_time, 'Log on', 180, 7, 0, false)) AS ret FROM path_demo GROUP BY uid;

    Hasil berikut dikembalikan.

     uid |                        ret
    -----+---------------------------------------------------
     3   | {Log on->Add to favorites->View live streams}
     4   | {Log on->Browse->Purchase->View live streams->Cancel the order}
     1   | {Log on->Browse->View live streams->Browse->Add to favorites}
     2   | {Log on->Purchase}
    (4 rows)
  • Pisahkan session berdasarkan waktu dan event.

    --Pisahkan berdasarkan waktu dan event: Tentukan 'Browse' sebagai event awal, atur interval menjadi 180 detik, dan atur panjang urutan menjadi 7. Lalu, gunakan fungsi pad_full_path untuk mengurai hasilnya.
    SELECT uid, pad_full_path(path_analysis_detail(event, event_time, 'Browse', 180, 7, 0, false,TRUE)) AS ret FROM path_demo GROUP BY uid;

    Hasil berikut dikembalikan.

     uid |                            ret
    -----+-----------------------------------------------------------
     1   | {Browse->View live streams,Browse->Add to favorites,Browse->Purchase->Exit}
     2   | {}
     4   | {Browse->Purchase->View live streams->Cancel the order}
     3   | {Browse->Log on->Add to favorites->View live streams}

Contoh 2: Memperluas hasil jalur

--Perluas jalur.
SELECT uid, unnest(pad_full_path(path_analysis_detail(event, event_time, 'Log on', 180, 7, 0, false))) AS ret FROM path_demo GROUP BY uid;
Catatan

Untuk informasi lebih lanjut tentang fungsi UNNEST, lihat Klausa UNNEST.

Hasil berikut dikembalikan.

 uid |                       ret
-----+-------------------------------------------------
 3   | Log on->Add to favorites->View live streams
 1   | Log on->Browse->View live streams->Browse->Add to favorites
 2   | Log on->Purchase
 4   | Log on->Browse->Purchase->View live streams->Cancel the order
(4 rows)

Contoh 3: Perluas detail subjalur

--Perluas subjalur.
SELECT
    uid,
    pad_sub_session (ret) AS session_id,
    pad_sub_path_left (ret) AS sub_path_left,
    pad_sub_path_right (ret) AS sub_path_right,
    pad_sub_index_left (ret) AS sub_index_left,
    pad_sub_index_right (ret) AS sub_index_right,
    pad_sub_cost (ret) AS sub_cost
FROM (
    SELECT
        uid,
        unnest( path_analysis_detail (event, event_time, 'Log on', 180, 7, 0, FALSE)) AS ret
    FROM
        path_demo 
    GROUP BY
        uid) a ;

Hasil berikut dikembalikan.

  uid | session_id | sub_path_left | sub_path_right | sub_index_left | sub_index_right | sub_cost
-----+------------+---------------+----------------+----------------+-----------------+----------
 1   |          0 |               | Log on         |             -1 |               0 |        0
 1   |          0 | Log on        | Browse         |              0 |               1 |        5
 1   |          0 | Browse        | View live streams      |              1 |               2 |       55
 1   |          0 | View live streams     | Browse         |              2 |               3 |        5
 1   |          0 | Browse        | Add to favorites         |              3 |               4 |       65
 2   |          0 |               | Log on         |             -1 |               0 |        0
 2   |          0 | Log on        | Purchase         |              0 |               1 |      120
 3   |          0 |               | Log on         |             -1 |               0 |        0
 3   |          0 | Log on        | Add to favorites         |              0 |               1 |       90
 3   |          0 | Add to favorites        | View live streams      |              1 |               2 |       60
 4   |          0 |               | Log on         |             -1 |               0 |        0
 4   |          0 | Log on        | Browse         |              0 |               1 |       90
 4   |          0 | Browse        | Purchase         |              1 |               2 |       30
 4   |          0 | Purchase        | View live streams      |              2 |               3 |       90
 4   |          0 | View live streams     | Cancel the order   |              3 |               4 |       60
(15 rows)

Contoh 4: Dapatkan rangkaian event session

SELECT
    uid,
    pad_session_path_array (path_analysis_detail (event, event_time, 'Log on', 180, 7, 0,FALSE), 0) AS ret
FROM
    path_demo
GROUP BY
    uid;

Hasil berikut dikembalikan.

 uid |                      ret
-----+-----------------------------------------------
 1   | {Log on,Browse,View live streams,Browse,Add to favorites}
 2   | {Log on,Purchase}
 3   | {Log on,Add to favorites,View live streams}
 4   | {Log on,Browse,Purchase,View live streams,Cancel the order}
(4 rows)

Contoh 5: Hitung PV dan UV subjalur

--Hitung page view (PV) dan unique visitor (UV) untuk setiap subjalur tanpa deduplikasi. Jika Anda perlu menghapus duplikat hasilnya, Anda dapat melakukan deduplikasi berdasarkan uid.
SELECT
    sub_index,
    sub_path_left,
    sub_path_right,
    count(uid)
FROM (
    SELECT
        uid,
        pad_sub_path_left (ret) AS sub_path_left,
        pad_sub_path_right (ret) AS sub_path_right,
        pad_sub_index_right (ret) AS sub_index
    FROM (
        SELECT
            uid,
            unnest(path_analysis_detail (event, event_time, 'Log on', 180, 7, 0, FALSE)) AS ret
        FROM
            path_demo
        GROUP BY
            uid) a) a
GROUP BY
    sub_index,
    sub_path_left,
    sub_path_right
ORDER BY
    sub_index,
    sub_path_left,
    sub_path_right;

Hasil berikut dikembalikan.

 sub_index | sub_path_left | sub_path_right | count
-----------+---------------+----------------+-------
         0 |               | Log on         |     4
         1 | Log on        | Add to favorites         |     1
         1 | Log on        | Browse         |     2
         1 | Log on        | Purchase         |     1
         2 | Add to favorites        | View live streams      |     1
         2 | Browse        | View live streams      |     1
         2 | Browse        | Purchase         |     1
         3 | View live streams     | Browse         |     1
         3 | Purchase        | View live streams      |     1
         4 | Browse        | Add to favorites         |     1
         4 | View live streams     | Cancel the order   |     1
(11 rows)

Contoh 6: Hitung durasi rata-rata subjalur

--Hitung durasi rata-rata untuk setiap subjalur.
SELECT
    sub_path_left,
    sub_path_right,
    avg(sub_cost)
FROM (
    SELECT
        uid,
        pad_sub_path_left (ret) AS sub_path_left,
        pad_sub_path_right (ret) AS sub_path_right,
        pad_sub_cost (ret) AS sub_cost
    FROM (
        SELECT
            uid,
            unnest(path_analysis_detail (event, event_time, 'Log on', 180, 7, 0, FALSE)) AS ret
        FROM
            path_demo
        GROUP BY
            uid) a) a
GROUP BY
    sub_path_left,
    sub_path_right
ORDER BY
    sub_path_left,
    sub_path_right;

Hasil berikut dikembalikan.

 sub_path_left | sub_path_right |    avg
---------------+----------------+------------
 Add to favorites        | View live streams      |  60.000000
 Browse        | Add to favorites         |  65.000000
 Browse        | View live streams      |  55.000000
 Browse        | Purchase         |  30.000000
 Log on        | Add to favorites         |  90.000000
 Log on        | Browse         |  47.500000
 Log on        | Purchase         | 120.000000
 View live streams     | Cancel the order   |  60.000000
 View live streams     | Browse         |   5.000000
 Purchase        | View live streams      |  90.000000
               | Log on         |   0.000000
(11 rows)

Contoh 7: Mengaitkan jalur session dengan detail subjalur

--Kaitkan jalur session dengan subjalur.
select
    uid,
    pad_sub_session(item) as session_id,
    full_path [pad_sub_session(item)+1] as full_path,
    pad_sub_path_left(item) as sub_path_left,
    pad_sub_path_right(item) as sub_path_right,
    pad_sub_index_right(item) as sub_idx,
    pad_sub_cost(item) as sub_cost
from
    (
        select
            uid,
            unnest(ret) as item,
            pad_full_path(ret) as full_path
        from
            (
                select
                    uid,
                    path_analysis_detail(event, event_time, 'Log on', 180, 7, 0, false) as ret
                from
                    path_demo
                group by
                    uid
            ) a
    ) a;

Hasil berikut dikembalikan.

uid | session_id |                    full_path                    | sub_path_left | sub_path_right | sub_idx | sub_cost
-----+------------+-------------------------------------------------+---------------+----------------+---------+----------
 3   |          0 | Log on->Add to favorites->View live streams                       |               | Log on         |       0 |        0
 3   |          0 | Log on->Add to favorites->View live streams                       | Log on        | Add to favorites         |       1 |       90
 3   |          0 | Log on->Add to favorites->View live streams                       | Add to favorites        | View live streams      |       2 |       60
 1   |          0 | Log on->Browse->View live streams->Browse->Add to favorites       |               | Log on         |       0 |        0
 1   |          0 | Log on->Browse->View live streams->Browse->Add to favorites       | Log on        | Browse         |       1 |        5
 1   |          0 | Log on->Browse->View live streams->Browse->Add to favorites       | Browse        | View live streams      |       2 |       55
 1   |          0 | Log on->Browse->View live streams->Browse->Add to favorites       | View live streams     | Browse         |       3 |        5
 1   |          0 | Log on->Browse->View live streams->Browse->Add to favorites       | Browse        | Add to favorites         |       4 |       65
 2   |          0 | Log on->Purchase                                  |               | Log on         |       0 |        0
 2   |          0 | Log on->Purchase                                  | Log on        | Purchase         |       1 |      120
 4   |          0 | Log on->Browse->Purchase->View live streams->Cancel the order |               | Log on         |       0 |        0
 4   |          0 | Log on->Browse->Purchase->View live streams->Cancel the order | Log on        | Browse         |       1 |       90
 4   |          0 | Log on->Browse->Purchase->View live streams->Cancel the order | Browse        | Purchase         |       2 |       30
 4   |          0 | Log on->Browse->Purchase->View live streams->Cancel the order | Purchase        | View live streams      |       3 |       90
 4   |          0 | Log on->Browse->Purchase->View live streams->Cancel the order | View live streams     | Cancel the order   |       4 |       60
(15 rows)

Contoh 8: Lihat detail jalur sebagian

--Lihat detail konversi untuk jalur tertentu ('Log on' ke 'Purchase') menggunakan fungsi pad_funnel.
SELECT uid, pad_full_path(pad_funnel(path_analysis_detail(event, event_time, 'Log on', 180, 7, 0, false), array['Log on', 'Purchase'])) AS ret FROM path_demo GROUP BY uid;

Hasil berikut dikembalikan.

 uid |       ret
-----+------------------
 3   | {Log on}
 4   | {Log on->Purchase}
 1   | {Log on}
 2   | {Log on->Purchase}
(4 rows)