Standart huni analizi tüm kullanıcıları tek bir grup olarak ele alır. Dönüşüm oranlarını il, edinim kanalı veya cihaz türü gibi kullanıcı segmentleri arasında karşılaştırmanız gerektiğinde, huni sonuçlarını bir TEXT boyut alanına göre bölmek için finder_group_funnel işlevini kullanın.
Her kullanıcı, gruplama olayında mevcut olan boyut değerine bağlı olarak tam olarak bir gruba atanır. Gruplama olayına ulaşmayan veya boyut değeri hiçbir grupla eşleşmeyen kullanıcılar, yerleşik unreach grubuna atanır.
İşlev, her kullanıcı ve her grup için BINARY kodlu bir sonuç döndürür. Kullanılabilir verileri çıkarmak için çıktıyı iki yardımcı işlevle çözün:
finder_group_funnel_res— Her kullanıcının adım adım huni ilerlemesini çözer.finder_group_funnel_text_group— Grup etiketini (boyut değeri veyaunreach) çözer.
Kullanıcı başına elde edilen sonuçları grup düzeyindeki dönüşüm sayılarına toplamak için çözülmüş çıktıyı funnel_rep işlevine iletin.
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
Hologres V2.2.32 veya sonraki bir sürüm
Hedef veritabanı için superuser erişimi
Uzantıyı yükleyin
flow_analysis uzantısını yüklemek için aşağıdaki deyimi bir superuser olarak çalıştırın:
CREATE extension flow_analysis; -- Install the extension.
Uzantı veritabanı düzeyinde yüklenir. Her veritabanı için yalnızca bir kez yükleyin.
Varsayılan olarak uzantı public şemasına yüklenir ve diğer şemalara yüklenemez. Farklı bir şemadan işlevleri çağırmak için public.function_name biçimini kullanın; örneğin public.windowFunnel.
Çalışma mantığı
finder_group_funnel olayları üç aşamada işler:
Yuva ataması — Her olay satırı için
server_timestampdeğeri, olayın hangi adım yuvasına (gün, saat veya başka bir aralık) ait olduğunu belirler.Sıralama — Her yuva içinde, sırayı oluşturmak için olaylar
client_timestampdeğerine göre sıralanır.Gruplama ve izleme —
group_event_indexkonumundan başlayarak kullanıcılargroup_dimensiondeğerlerine göre bir gruba atanır. İşlev daha sonrawindowsüresi boyunca sıralıcheck_eventlistesindeki her kullanıcının ilerlemesini izler.
Sonuç, her kullanıcı ve her grup için BINARY kodlu bir değerdir. Huni ilerlemesini ve grup etiketlerini okumak için çıktıyı finder_group_funnel_res ve finder_group_funnel_text_group işlevlerinden geçirin.
finder_group_funnel
Olayları belirtilen boyuta göre gruplar ve kullanıcı başına huni sonuçlarını hesaplar.
Söz dizimi
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, ...
)
Parametreler
| Parametre | Gerekli | Tür | Açıklama |
|---|---|---|---|
window |
Evet | — | Analiz penceresinin boyutu. Birim: milisaniye. |
start_timestamp |
Evet | TIMESTAMP / TIMESTAMPTZ | Analizin başlangıç zamanı. |
step_interval |
Evet | — | Tek bir adımın süresi (dönüşüm analizinin granüleritesi). Birim: saniye. Örneğin, 86400 = bir gün. |
step_numbers |
Evet | — | Analiz edilecek adım sayısı. Örneğin, step_interval=86400 ve step_numbers=7 olması, işlevin start_timestamp değerinden başlayarak 7 gün boyunca günlük huni verilerini analiz ettiği anlamına gelir. |
num_events |
Evet | — | Hunide izlenecek toplam olay sayısı. |
attr_related |
Evet | UINT8 | Hangi olayların ilişkili özelliklere sahip olduğunu belirtir. İkili formda, i nci bit 1 ise (i+1) inci olayın ilişkili özellikleri vardır. prop ifadelerinin sayısı 1-bitlerin sayısına eşit olmalıdır. Hiçbir olayın ilişkili özelliği yoksa 0 olarak ayarlayın. |
group_event_index |
Evet | — | Gruplamanın başladığı olay. 1 olarak ayarlanırsa, kullanıcılar ilk olayı tamamladıkları anda gruplanır. 2 olarak ayarlanırsa, gruplama ikinci olayda başlar; ikinci olaya ulaşmayan kullanıcılar unreach grubuna atanır. |
time_zone |
Evet | TEXT | Giriş zaman damgalarının standart biçimdeki saat dilimi (örneğin Asia/Shanghai). Bu parametre yalnızca is_relative_window değeri true olduğunda çıktıyı etkiler. |
is_relative_window |
Evet | BOOLEAN | Sabit süreli pencere yerine takvim günü sınırlarının kullanılıp kullanılmayacağı. Varsayılan: false. true olarak ayarlandığında: window değeri 86.400.000'in tam katı olmalı ve step_interval değeri 86400 olmalıdır. Ayrıntılar için aşağıdaki Takvim günü penceresi bölümüne bakın. |
server_timestamp |
Evet | TIMESTAMP / TIMESTAMPTZ | Sunucu tarafındaki olay zamanı. Her olayın hangi adım yuvasına ait olduğunu belirlemek için kullanılır. |
client_timestamp |
Evet | TIMESTAMP / TIMESTAMPTZ | İstemci tarafındaki olay zamanı. Veri türü start_timestamp ile aynı olmalıdır. Olayları sıralamak için kullanılır. |
group_dimension |
Evet | TEXT | Gruplama yapılacak alan. Yalnızca TEXT alanları desteklenir. Birden fazla alana göre gruplamak için bunları concat_ws veya concat ile birleştirin. |
prop |
Hayır | — | attr_related bitleri 1 olarak ayarlanmış olaylar için ilişkili özellikler. Tüm prop ifadeleri aynı veri türünde olmalıdır. |
check_event |
Evet | — | Sıralı dönüşüm olayları listesi. window süresi içinde eşleşen olaylar geçerli dönüşüm olarak sayılır. Örnek: event = 'E0001', event = 'E0002', event = 'E0003'. |
Takvim günü penceresi
is_relative_window=true olduğunda, pencere sabit geçen bir süre yerine takvim günü sınırlarını kullanır:
Bir takvim günü
00:00:00ile23:59:59arasında çalışır.İlk gün, olay zamanından aynı günün
23:59:59saatine kadar olan süreyi kapsar.Sonraki her gün tam bir takvim günüdür.
Huni raporlama dönemlerinin ilk olaydan başlayan kayan 24 saatlik aralıklar yerine iş günlerine (gece yarısından gece yarısına) hizalanması gerektiğinde takvim günü pencerelerini kullanın.
Dönüş değeri
BINARY türünde kodlanmış bir sonuç. Çözümlemek için finder_group_funnel_res ve finder_group_funnel_text_group işlevlerini kullanın.
Örnek
Aşağıdaki örnek, 3 günlük bir pencere boyunca huni sonuçlarını ile göre gruplar. Kullanıcı 1111 Beijing'den, kullanıcı 2222 ise Zhejiang'dandır.
Adım 1: Test tablosunu oluşturun ve verileri ekleyin.
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');
Adım 2: Sonuçları 3 günlük bir pencere boyunca ile göre gruplayın.
SELECT
id,
UNNEST(
finder_group_funnel(
86400000 * 3, -- 3-day window
EXTRACT(epoch FROM TIMESTAMP '2024-01-02 00:00:00')::BIGINT,
86400, -- step_interval: 1 day
3, -- step_numbers: 3 days
4, -- num_events: 4 events
0, -- attr_related: no associated properties
1, -- group_event_index: group on first event
'Asia/Shanghai',
FALSE,
event_time,
event_time,
province, -- group_dimension
event = 'registration',
event = 'logon',
event = 'payment',
event = 'exit'
)
) AS result
FROM finder_group_funnel_test
GROUP BY id;
Sonuç BINARY kodludur. Her satır kullanıcı kimliğini ve grup etiketini (il değeri veya unreach) gösterir:
id | result
------+---------
2222 | Zhejiang
2222 | unreach
1111 | Beijing
1111 | unreach
(4 rows)
Her grup için ayrıntılı huni ilerlemesini çözmek üzere finder_group_funnel_res işlevini kullanın.
finder_group_funnel_res
finder_group_funnel işlevinden gelen BINARY sonucunu, her adım için kullanıcı başına huni ayrıntılarına çözer.
Söz dizimi
finder_group_funnel_res(finder_group_funnel(...))
Parametreler
| Parametre | Açıklama |
|---|---|
finder_group_funnel() |
finder_group_funnel işlevinden gelen BINARY sonucu. |
Dönüş değeri
Genel pencerede ve her adım aralığında ulaşılan en uzak olayı gösteren bir tamsayı dizisi.
Örnek
finder_group_funnel örneğindeki tabloyu kullanarak her kullanıcının günlük huni ilerlemesini çözün:
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;
Sonuç:
id | res
------+-----------
1111 | {4,4,3,2}
1111 | {0,0,0,0}
2222 | {3,3,0,0}
2222 | {0,0,0,0}
Sonuç dizisini okuma: Her dizide 1 + step_numbers sayıda öğe bulunur. İlk öğe, tüm pencere genelinde ulaşılan en uzak olaydır; kalan öğeler ise her adım aralığında (bu durumda gün) ulaşılan en uzak olaydır.
Sonucu {4,4,3,2} olan 1111 numaralı kullanıcı için:
| Konum | Değer | Anlamı |
|---|---|---|
| Genel (3 günlük pencere) | 4 | 3 gün içinde 4. olaya (exit) ulaştı |
| 1. Gün | 4 | 1. günde exit olayına ulaştı |
| 2. Gün | 3 | 2. günde 3. olaya (payment) ulaştı |
| 3. Gün | 2 | 3. günde 2. olaya (logon) ulaştı |
finder_group_funnel_text_group
BINARY sonuçtan grup etiketini (boyut değeri veya unreach) çözer. Hem grup adını hem de huni verilerini tek bir sorguda almak için finder_group_funnel_res ile birlikte kullanın.
Söz dizimi
finder_group_funnel_text_group(finder_group_funnel(...))
Parametreler
| Parametre | Açıklama |
|---|---|
finder_group_funnel() |
finder_group_funnel işlevinden gelen BINARY sonucu. |
Dönüş değeri
Çözümlenmiş grup etiketi metin olarak döner — boyut değeri (örneğin Beijing) veya unreach.
Örnek
Aşağıdaki sorgu, hem grup etiketini hem de günlük huni ilerlemesini tek geçişte çözer:
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;
Sonuç:
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)
funnel_rep
Kullanıcı başına huni sonuçlarını (finder_group_funnel_res çıktısı) her huni adımında grup düzeyindeki dönüşüm sayılarına toplar.
Söz dizimi
funnel_rep(step_number, num_events, funnel_res)
Parametreler
| Parametre | Gerekli | Tür | Açıklama |
|---|---|---|---|
step_number |
Evet | UINT | Zaman yuvası sayısı. Genellikle finder_group_funnel içindeki step_numbers değeriyle aynıdır. |
num_events |
Evet | UINT | Hunideki toplam olay sayısı. Genellikle check_event ifadelerinin sayısıyla aynıdır. |
funnel_res |
Evet | — | Her kullanıcı tarafından oluşturulan, kullanıcı başına dönüşüm adım ayrıntıları; finder_group_funnel veya FINDER_FUNNEL çıktısıdır. |
Dönüş değeri
{"overall","step1","step2",...} biçiminde bir dize dizisi. Her öğe, 1'den N'e kadar olan olaylara ulaşan kullanıcı sayılarının virgülle ayrılmış listesidir:
İlk öğe, tam pencere genelindeki toplam sayıdır.
Sonraki her öğe, ilgili adım aralığındaki sayıdır.
Örnek
finder_group_funnel örneğindeki verileri kullanarak, 1 günlük adımlarla 3 günlük bir pencerede kaç kullanıcının her olaya ulaştığını hesaplayın:
-- 3-day window, 1-day step: count users reaching each event per day.
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;
Sonuç:
funnel_rep
-------------------------------------------
{"2,2,2,1","2,2,2,1","1,1,1,0","1,1,0,0"}
(1 row)
Bu sonucu step_numbers=3 ve num_events=4 ile okuyalım:
| Öğe | Değer | Anlamı |
|---|---|---|
| Genel | 2,2,2,1 |
3 gün boyunca: 2 kullanıcı 1. olaya, 2 kullanıcı 2. olaya, 2 kullanıcı 3. olaya, 1 kullanıcı 4. olaya ulaştı |
| 1. Gün | 2,2,2,1 |
1. günde: aynı desen |
| 2. Gün | 1,1,1,0 |
2. günde: 1 kullanıcı 1–3. olaylara ulaştı, hiçbiri 4. olaya ulaşmadı |
| 3. Gün | 1,1,0,0 |
3. günde: 1 kullanıcı 1–2. olaylara ulaştı, hiçbiri 3–4. olaylara ulaşmadı |
Tam örnekler
Senaryo 1: Çok günlük bir pencerede huni sonuçlarını boyuta göre gruplama
Amaç: Bir e-ticaret ekibi, Beijing, Shanghai ve Zhejiang'dan gelen kullanıcıların 3 günlük kayan pencere içinde 4 adımlı bir akış (kayıt → giriş → ödeme → çıkış) üzerinden nasıl dönüştüğünü ve günlük kırılımları karşılaştırmak istiyor. Ekip, Beijing'deki kullanıcıların tüm günlerde en yüksek tamamlama oranını göstereceğini bekliyor.
Adım 1: Test tablosunu oluşturun ve verileri ekleyin.
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');
Adım 2: İl bazında gruplandırılmış günlük huni verilerini sorgulayın.
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;
Sonuç:
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)
Beijing'deki kullanıcı 1. günde tüm 4 olayı tamamladı ve 2. ile 3. günlerde dönüşüm sağlamaya devam etti. Shanghai'deki kullanıcı da tüm 4 olayı tamamladı ancak yalnızca 1. günde (takip eden aktivite yok). Zhejiang'daki kullanıcı 4 olayın yalnızca 3'üne ulaştı.
Senaryo 2: Huni sonuçlarını takvim gününe göre gruplama
Amaç: Aynı ekip, kayan geçen süreli pencere yerine takvim günü sınırlarına (gece yarısından gece yarısına) hizalanmış huni verilerini gözlemlemek istiyor. Bu durum, iş raporlama dönemlerinin genellikle nasıl tanımlandığıyla uyumludur. Kayan pencerede, 2024-01-05 tarihindeki exit olayı ilk olaydan itibaren 3 gün içinde kalabilir; takvim günü sınırlarında ise kalmaz.
Adım 1: Test tablosunu oluşturun ve verileri ekleyin.
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');
Adım 2: Takvim günü sınırlarıyla sorgulayın (is_relative_window=TRUE).
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, -- calendar-day window
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;
Sonuç:
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)
Takvim günü sınırlarıyla, 1111 numaralı kullanıcı (Beijing) 3 günlük pencere içinde 4 olayın yalnızca 3'ünü tamamlar. exit olayı 2024-01-05 tarihinde gerçekleşir ve bu tarih 2024-01-02'den başlayan takvim günü penceresinin (2, 3 ve 4 Ocak'ı kapsar) dışında kalır. Kayan pencerede ise aynı olay, ilk olaydan itibaren 3 × 86.400 saniye içinde kaldığı için yakalanırdı.
Sınırlamalar
| Sınırlama | Ayrıntılar |
|---|---|
| Sürüm gereksinimi | finder_group_funnel işlevi yalnızca Hologres V2.2.32 ve sonraki sürümler tarafından desteklenir. |
group_dimension alan türü |
Yalnızca TEXT alanları desteklenir. Birden fazla alana göre gruplamak için concat_ws veya concat kullanın. |
| Takvim günü penceresi kısıtlamaları | is_relative_window=true olduğunda, window değeri 86.400.000'in tam katı olmalı ve step_interval değeri 86400 olmalıdır. |
| Uzantı şeması | flow_analysis uzantısı yalnızca public şemasına yüklenir ve diğer şemalara yüklenemez. |