Tüm Ürünler
Search
Belge Merkezi

Hologres:finder_funnel

Son Güncelleme:Oct 06, 2026

finder_funnel işlevi, belirli bir zaman penceresi içinde huni dönüşüm sonuçlarını hesaplar ve paylaşılan bir özellik değeri üzerinden olayları ilişkilendirmeyi destekler. Örneğin, dönüşümün yalnızca kullanıcı kimliğine göre değil, şehir veya ülke bazında adım adım izlenmesini sağlarsınız. Huni sonuçları zamana göre gruplandırılamaz.

Ön koşullar

Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

  • Hologres V2.2.32 veya üzeri, ya da Hologres V3.0.12 veya üzeri sürüm

  • Gerekli uzantıyı yüklemek için superuser erişimi

Kullanım notları

finder_funnel işlevini çalıştırmadan önce superuser olarak flow_analysis uzantısını yükleyin:

CREATE extension flow_analysis; -- Install the extension.
  • Uzantı veritabanı düzeyinde yüklenir. Her veritabanı için yalnızca bir kez yüklemeniz gerekir.

  • Uzantı varsayılan olarak public şemasına yüklenir ve başka şemalara yüklenemez.

Söz dizimi

finder_funnel(
  <window>,
  <start_timestamp>,
  <step_interval>,
  <step_numbers>,
  <num_events>,
  <attr_related>,
  <time_zone>,
  <is_relative_window>,
  <server_timestamp>,
  <client_timestamp>,
  [<prop1>, <prop2>, ...]
  <check_event1>, <check_event2>, ...
)

Parametreler

Tüm parametreler zorunludur.

Parametre Açıklama
<window> Analiz zaman penceresi. Birim: milisaniye.
<start_timestamp> Analizin başlangıç zamanı. TIMESTAMP ve TIMESTAMPTZ türlerini kabul eder.
<step_interval> Dönüşüm hesaplaması için her adımın granülerliği. Birim: saniye. Örneğin, step_interval=86400 değeri her adımın bir gün olduğunu belirtir.
<step_numbers> Analiz edilecek adım sayısı. Örneğin, step_interval=86400, step_numbers=7 ayarı, start_timestamp değerinden başlayarak yedi gün boyunca huni verilerini analiz eder.
<num_events> Analiz edilecek olay sayısı.
<attr_related> Hangi olayların ilişkili özelliklere sahip olduğunu belirten INT değeri. İkili temsili ilişkilendirmeyi tanımlar: Eğer i bit'i 1 ise, i+1 numaralı olayın ilişkili bir özelliği vardır. <prop> ifadelerinin sayısı, 1 bitlerinin sayısına eşit olmalıdır. Hiçbir olayın ilişkili özelliği yoksa 0 olarak ayarlayın. Bkz. attr_related nasıl çalışır.
<time_zone> Giriş zaman damgaları için saat dilimi. Asia/Shanghai gibi standart bir saat dilimi dizesi olmalıdır. Yalnızca is_relative_window değeri true olduğunda etkili olur.
<is_relative_window> Takvim günü penceresinin kullanılıp kullanılmayacağını belirtir. Varsayılan: false. Bkz. Takvim günü penceresi.
<server_timestamp> Olayın gerçekleştiği sunucu tarafı zamanı. TIMESTAMP ve TIMESTAMPTZ türlerini kabul eder. Olayları doğru adıma atamak için kullanılır.
<client_timestamp> Olayın gerçekleştiği istemci tarafı zamanı. TIMESTAMP ve TIMESTAMPTZ türlerini kabul eder. Türü start_timestamp ile aynı olmalıdır. Olayları sıralamak için kullanılır.
<prop> İlişkilendirme için kullanılacak olay özelliği. Tüm <prop> ifadeleri aynı veri türünü döndürmelidir. Yalnızca attr_related sıfırdan farklı olduğunda gereklidir.
<check_event> Her olayı tanımlayan Boolean ifadeleri. <window> süresi içinde bu koşullarla eşleşen olaylar dönüşüm analizine katılır. Örnek: event = 'E0001', event = 'E0002', event = 'E0003'.

attr_related nasıl çalışır

attr_related parametresi, hangi olayların ilişkili özelliklere sahip olduğunu belirtmek için ikili bit maskesi kullanır.

Örneğin, dört olay (E1, E2, E3, E4) için:

**attr_related değeri** İkili İlişkili özelliği olan olaylar
0 0000 Yok — özellik ilişkilendirmesi yok
3 0011 E1 ve E2'nin ilişkili özellikleri var
5 0101 E1 ve E3'ün ilişkili özellikleri var
15 1111 Dört olayın da ilişkili özellikleri var

attr_related=3 (ikili 11) olduğunda, E1 ve E2 olayları özellik üzerinden ilişkilendirilir. Her olay için birer tane olmak üzere iki <prop> ifadesi sağlamanız gerekir. E3 ve E4 ilişkilendirilmediğinden bunlar için <prop> ifadesine gerek yoktur.

Takvim günü penceresi

is_relative_window=true olduğunda, pencere takvim günlerine (her gün 00:00:00 ile 23:59:59 arası) bölünür.

is_relative_window=true olduğunda aşağıdaki kısıtlamalar geçerlidir:
<window> değeri 86,400,000 (gün başına milisaniye) sayısının tam katı olmalıdır.
<step_interval> değeri 86400 olmalıdır (bir adım = bir gün).

İlk takvim günü olay zamanından başlar ve aynı günün 23:59:59 zamanında sona erer. Sonraki her gün tam bir takvim günüdür. Ayrıntılı operasyon analizi için günlük huni verilerini gözlemlemek amacıyla bu modu kullanın.

Dönüş değeri

finder_funnel işlevi, kullanıcı başına aşağıdaki biçimde bir satır döndürür:

{<highest event reached>, <event reached in step 1>, <event reached in step 2>, ...}
  • İlk sayı, kullanıcının tüm adımlar genelinde ulaştığı en yüksek numaralı olaydır.

  • Sonraki her sayı, ilgili adım içinde ulaşılan en yüksek numaralı olayı temsil eder.

Örneğin, {4, 4, 3, 2} değeri kullanıcının nihayetinde 4 numaralı olaya ulaştığını gösterir. 1. adımda 4 numaralı olaya, 2. adımda 3 numaralı olaya, 3. adımda ise 2 numaralı olaya ulaşmıştır.

funnel_rep

Tüm kullanıcılar genelindeki finder_funnel sonuçlarını toplamak için funnel_rep işlevini kullanın. Ayrıntılar için bkz. Boyut gruplandırma huni işlevi (finder_group_funnel).

Örnekler

Aşağıdaki örneklerde şu örnek veri kümesi kullanılmıştır:

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', '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');

Örnek 1: Özellik ilişkilendirmesi olmadan temel huni

3 günlük bir pencere, 3 günlük adıma bölünmüş, 4 olay izleniyor ve özellik ilişkilendirmesi yok (attr_related=0):

SELECT
    id,
    finder_funnel(
        86400000 * 3,                                           -- 3-day window
        EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT,
        86400,                                                  -- 1-day steps
        3,                                                      -- 3 steps
        4,                                                      -- 4 events
        0,                                                      -- no property association
        'Asia/Shanghai',
        FALSE,
        event_time,
        event_time,
        event = 'Registration',
        event = 'Logon',
        event = 'Payment',
        event = 'Exit'
    ) AS funnel_res
FROM
    finder_funnel_test_1
GROUP BY
    id;

Sonuç:

  id  | funnel_res
------+------------
 2222 | {3,3,0,0}
 1111 | {4,4,3,2}
(2 rows)
  • id=1111, {4,4,3,2}: 1111 numaralı kullanıcı nihayetinde 4 numaralı olaya (Exit) ulaşmıştır. 1. adımda (2 Ocak) 4 numaralı olaya, 2. adımda (3 Ocak) 3 numaralı olaya (Payment), 3. adımda (4 Ocak) ise 2 numaralı olaya (Logon) ulaşmıştır.

  • id=2222, {3,3,0,0}: 2222 numaralı kullanıcı 1. adımda 3 numaralı olaya (Payment) ulaşmış, sonrasında ilerleme kaydetmemiştir.

Örnek 2: Özellik ilişkilendirmeli huni

attr_related=3 (ikili 11) ayarlayarak 1 (Registration) ve 2 (Logon) numaralı olayların province özelliği üzerinden ilişkilendirilmesini sağlayın. Bu olaylar arasındaki dönüşüm yalnızca her iki olay da aynı il değerini paylaştığında izlenir.

SELECT
    id,
    finder_funnel(
        86400000 * 3,
        EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT,
        86400,
        3,
        4,
        3,               -- attr_related=3 (binary 11): events 1 and 2 have associated properties
        'Asia/Shanghai',
        FALSE,
        event_time,
        event_time,
        province,        -- prop for event 1 (Registration)
        province,        -- prop for event 2 (Logon)
        event = 'Registration',
        event = 'Logon',
        event = 'Payment',
        event = 'Exit'
    ) AS funnel_res
FROM
    finder_funnel_test_1
GROUP BY
    id;

Sonuç:

  id  | funnel_res
------+------------
 2222 | {3,3,0,0}
 1111 | {4,4,3,2}
(2 rows)

Sonuçlar, özellik ilişkilendirmesi kısıtlaması uygulandıktan sonra her kullanıcının ulaştığı en yüksek olayı ve adım başına ulaşılan en yüksek olayı göstermektedir.

Örnek 3: funnel_rep ile sonuçları toplama

Kullanıcı başına elde edilen finder_funnel sonuçlarını grup düzeyinde bir görünümde toplamak için funnel_rep işlevini kullanın:

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 = 'Registration',
            event = 'Logon',
            event = 'Payment',
            event = 'Exit'
        ) AS funnel_res
    FROM
        finder_funnel_test_1
    GROUP BY
        id
) a;

Sonuç:

                funnel_rep
-------------------------------------------
 {"2,2,2,1","2,2,2,1","1,1,1,0","1,1,0,0"}
(1 row)

Örnek 4: Takvim günü penceresi

Bu örnekte günlük huni verilerini gözlemlemek için 3 takvim günlük bir pencere (is_relative_window=TRUE) kullanılmıştır.

  1. Tabloyu oluşturun ve verileri ekleyin:

    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', '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. Takvim günü penceresiyle sorguyu çalıştırın:

    SELECT
        id,
        finder_funnel(
            86400000 * 3,
            EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT,
            86400,
            3,
            4,
            0,
            'Asia/Shanghai',
            TRUE,           -- calendar day mode
            event_time,
            event_time,
            event = 'Registration',
            event = 'Logon',
            event = 'Payment',
            event = 'Exit'
        ) AS funnel_res
    FROM
        finder_funnel_test_3
    GROUP BY
        id;

    Sonuç:

     id   | funnel_res
    ------+------------
     1111 | {3,3,0,0}
     2222 | {3,3,0,0}
    (2 rows)

    id=1111 için: İlk takvim günü 2024-01-02 00:00:02 zamanından 23:59:59 zamanına kadar sürer. 3 Ocak ve 4 Ocak ikinci ve üçüncü takvim günleridir. 5 Ocak 3 günlük pencerenin dışında kaldığından Exit olayı sayılmaz; 1111 numaralı kullanıcı nihai sonuç olarak 3 numaralı olaya (Payment) ulaşır.