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ğeri86,400,000(gün başına milisaniye) sayısının tam katı olmalıdır.
<step_interval>değeri86400olmalı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.
-
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'); -
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=1111için: İlk takvim günü2024-01-02 00:00:02zamanından23:59:59zamanı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.