Pencere hunisi işlevi, kayan bir zaman penceresi içindeki ardışık olayları izleyerek kullanıcı davranışını, uygulama trafiğini ve ürün hedefi dönüşümlerini analiz eder.
Pencere hunisi işlevi aşağıdaki iki sözdizimini destekler.
Analitik deyimlerde dizeler kullanmak istiyorsanız dizeleri tek tırnak içine ('') almanız gerekir. Tırnak içine alınmayan veya çift tırnak ("") içine alınan dizeler alan adlarını veya sütun adlarını belirtir. Örneğin,
'status'
durum dizesini belirtirken;
status
veya
"status"
durum günlük alanını belirtir.
|
İşlev |
Sözdizimi |
Açıklama |
SQL desteği |
SPL desteği |
|
window_funnel(sliding_window, timestamp, event_id, ARRAY[event_list01, event_list02...]) |
Kayan bir zaman penceresi içinde bir olay zinciri arar ve zincirdeki ardışık olayların maksimum sayısını hesaplar. Verilerinizde zaten bir olay sütunu (event_id) tanımlıysa bu sözdizimini kullanın. |
√ |
× |
|
|
window_funnel(sliding_window, timestamp, ARRAY[event_id=event_list01, event_id=event_list02...]) |
Kayan bir zaman penceresi içinde bir olay zinciri arar ve zincirdeki ardışık olayların maksimum sayısını hesaplar. Daha fazla esneklik sağlamak amacıyla özel, numaralandırılmamış olay değerlerini tanımlamak için bu sözdizimini kullanın. |
√ |
× |
Çalışma mantığı
Pencere hunisi işlevi, kayan bir zaman penceresi içinde bir olay zinciri arar, zincirin başlangıcından itibaren en uzun eşleşen diziyi belirler ve bu dizinin uzunluğunu döndürür.
İşlev aşağıdaki algoritmayı kullanır:
Tanımlanan zincirdeki ilk olaydan başlayarak olay sayacını 1 olarak ayarlar ve kayan pencereyi açar.
Kayan pencere içinde, sonraki olaylar doğru sırada gerçekleşirse sayaç artar.
Dizi kesintiye uğrarsa mevcut arama sonlanır, olay sayacı artmayı durdurur ve yeni bir arama başlar.
Tüm aramalar tamamlandıktan sonra birden fazla eşleşme bulunursa işlev, en uzun eşleşen olay zincirinin uzunluğunu temsil eden en yüksek sayaç değerini döndürür.
Örneğin, 100 saniyelik bir kayan zaman penceresi ve Olay 1 -> Olay 2 -> Olay 3 -> Olay 4 -> Olay 5 şeklinde bir olay zinciri olduğunu varsayalım. Gerçek sıra Olay 1 -> Olay 2 -> Olay 4 -> Olay 5 -> Olay 1 -> Olay 3 ise işlev 2 değerini döndürür çünkü Olay 1'den başlayan en uzun eşleşen dizi Olay 1 -> Olay 2'dir.
Arama, tanımlanan zincirdeki ilk olayla başlamalıdır. Örneğin, gerçek olay sırası Olay 2 -> Olay 3 -> Olay 4 ise işlev 0 değerini döndürür.
Arama sıkı bir sıra gerektirir ve olaylar atlanamaz. Örneğin, Olay 1 -> Olay 2 -> Olay 4 dizisinde eşleşme, Olay 3 atlandığı için Olay 2'den sonra durur. Bu nedenle Olay 4 sayılmaz.

Sözdizimi
Pencere hunisi işlevi aşağıdaki iki sözdizimini destekler.
-
Verilerinizde zaten bir olay sütunu (event_id) tanımlıysa aşağıdaki sözdizimini kullanın:
window_funnel(sliding_window, timestamp, event_id, ARRAY[event_list01, event_list02...]) -
Özel, numaralandırılmamış olay değerlerini tanımlamak için aşağıdaki sözdizimini kullanın:
window_funnel(sliding_window, timestamp, ARRAY[event_id=event_list01, event_id=event_list02...])
Parametreler
|
Parametre |
Açıklama |
|
sliding_window |
Saniye cinsinden kayan zaman penceresi. Değer bigint türünde olmalıdır. |
|
timestamp |
Saniye cinsinden zaman damgası. Değer bigint türünde olmalıdır. Yerleşik __time__ günlük alanını kullanmanızı öneririz. |
|
event_id |
A, B veya C gibi bir olayı temsil eden günlük alanı. Değer varchar türünde olmalıdır. |
|
event_list |
En fazla 32 olay içerebilen, eşleştirilecek özel olay zinciri. Değer array türünde olmalıdır. Örnekler:
|
Örnekler
Bir e-ticaret mağazası promosyon düzenler ve dönüşüm performansını analiz etmek için pencere hunisi işlevini kullanır. Dönüşüm yolu üç adımdan oluşur: ürüne göz atma, sepete ekleme ve ürünü satın alma. Simple Log Service bu olaylara ilişkin günlükleri toplar.
Aşağıdaki örnekte bir günlük girdisindeki alanlar gösterilmektedir: behavior_type:pv, category_id:149192, item_id:2073959, timestamp:1511860012 ve user_id:137617.
|
Günlük alanı |
Açıklama |
|
behavior_type |
Kullanıcı davranışı türü. Geçerli değerler:
|
|
category_id |
Ürünün kategori kimliği. |
|
item_id |
Ürünün kimliği. |
|
timestamp |
Kullanıcı davranışının gerçekleştiği zaman. |
|
user_id |
Kullanıcının kimliği. |
Example 1
24 saatlik bir pencere içindeki kullanıcı satın alma davranışını analiz edin.
-
Sorgu deyimi
* | SELECT user_id, window_funnel( 86400, timestamp, ARRAY [behavior_type='pv', behavior_type='cart',behavior_type='buy'] ) AS levels GROUP BY user_id ORDER BY user_id LIMIT 1000 -
Sonuçlar
24 numaralı kullanıcı için
levelsdeğeri 3'tür; bu, kullanıcının tam yolu tamamladığını gösterir: bir ürüne göz attı, sepete ekledi ve satın aldı.14 numaralı kullanıcı için
levelsdeğeri 2'dir; bu, kullanıcının bir ürüne göz attığını ve sepete eklediğini ancak satın alma işlemini tamamlamadığını gösterir.
Sorgu, user_id ve levels olmak üzere iki sütundan oluşan bir tabloda 1.000 kayıt döndürür.
Example 2
Huninin her adımını kaç kullanıcının tamamladığını analiz edin.
-
Sorgu deyimi
* | SELECT levels, count, sum(count) over( ORDER BY levels DESC ) AS total FROM ( SELECT levels, count(1) AS count FROM ( SELECT user_id, window_funnel( 86400, timestamp, ARRAY [behavior_type='pv', behavior_type='cart',behavior_type='buy'] ) AS levels FROM log GROUP BY user_id ) GROUP BY levels ORDER BY levels ) -
Sonuçlar
513.194 kullanıcı bir ürüne göz attı ve bunlardan 138.491'i bu adımdan sonra ayrıldı.
374.703 kullanıcı bir ürünü sepete ekledi ve bunlardan 198.642'si bu adımdan sonra ayrıldı.
176.061 kullanıcı bir ürün satın aldı.
Example 3
Promosyon için dönüşüm oranlarını hesaplayın.
Mutlak dönüşüm oranı: Belirli bir adımı tamamlayan toplam kullanıcı yüzdesi.
Göreli dönüşüm oranı: Belirli bir adımı tamamlayan kullanıcıların, önceki adımı tamamlayanlara göre yüzdesi.
-
Sorgu deyimi
* | SELECT *, 100.0 * total /(sum(count) over()) AS "absolute conversion rate", if( lag(total, 1, 0) over() = 0, 100, (100.0 * total / lag(total, 1, 0) over()) ) AS "relative conversion rate" FROM ( SELECT levels, count, sum(count) over( ORDER BY levels DESC ) AS total FROM ( SELECT levels, count(1) AS count FROM ( SELECT user_id, window_funnel( 86400, timestamp, ARRAY [behavior_type='pv', behavior_type='cart',behavior_type='buy'] ) AS levels FROM log GROUP BY user_id ) GROUP BY levels ) ORDER BY levels ) -
Sonuçlar
Sorgu, levels, count, total, absolute conversion rate ve relative conversion rate olmak üzere beş sütundan oluşan bir tablo döndürür. Örneğin, 2. seviyede mutlak dönüşüm oranı yaklaşık %72,72'dir. Son adım olan 3. seviyede mutlak dönüşüm oranı yaklaşık %34,17, göreli dönüşüm oranı ise yaklaşık %46,99'dur.
huni grafiği
