La fonction window funnel analyse le comportement des utilisateurs, le trafic des applications et les conversions d'objectifs produits en suivant des événements séquentiels au sein d'une fenêtre temporelle glissante.
La fonction window funnel prend en charge les deux syntaxes suivantes.
Si vous souhaitez utiliser des chaînes de caractères dans les instructions d'analyse, vous devez les entourer de guillemets simples (''). Les chaînes non entourées de guillemets ou entourées de guillemets doubles ("") indiquent des noms de champs ou de colonnes. Par exemple,
'status'
indique la chaîne de caractères « status », tandis que
status
ou
"status"
indique le champ de journal « status ».
|
Fonction |
Syntaxe |
Description |
Prise en charge SQL |
Prise en charge SPL |
|
window_funnel(sliding_window, timestamp, event_id, ARRAY[event_list01, event_list02...]) |
Recherche une chaîne d'événements au sein d'une fenêtre temporelle glissante et calcule le nombre maximal d'événements consécutifs dans cette chaîne. Utilisez cette syntaxe si une colonne d'événement (event_id) est déjà définie dans vos données. |
√ |
× |
|
|
window_funnel(sliding_window, timestamp, ARRAY[event_id=event_list01, event_id=event_list02...]) |
Recherche une chaîne d'événements au sein d'une fenêtre temporelle glissante et calcule le nombre maximal d'événements consécutifs dans cette chaîne. Utilisez cette syntaxe pour définir des valeurs d'événement personnalisées et non énumérées, offrant ainsi une plus grande flexibilité. |
√ |
× |
Fonctionnement
La fonction window funnel recherche une chaîne d'événements au sein d'une fenêtre temporelle glissante, identifie la séquence correspondante la plus longue à partir du début de la chaîne et renvoie la longueur de cette séquence.
La fonction utilise l'algorithme suivant :
Elle commence par le premier événement de la chaîne définie, initialise le compteur d'événements à 1 et ouvre la fenêtre glissante.
Au sein de la fenêtre glissante, si les événements suivants se produisent dans l'ordre correct, le compteur s'incrémente.
Si la séquence est interrompue, la recherche actuelle se termine, le compteur d'événements cesse de s'incrémenter et une nouvelle recherche débute.
Une fois toutes les recherches terminées, si plusieurs correspondances ont été trouvées, la fonction renvoie la valeur la plus élevée du compteur, qui représente la longueur de la chaîne d'événements correspondante la plus longue.
Par exemple, supposons une fenêtre temporelle glissante de 100 secondes et une chaîne d'événements Événement 1 -> Événement 2 -> Événement 3 -> Événement 4 -> Événement 5. Si la séquence réelle est Événement 1 -> Événement 2 -> Événement 4 -> Événement 5 -> Événement 1 -> Événement 3, la fonction renvoie 2, car la séquence correspondante la plus longue commençant par l'Événement 1 est Événement 1 -> Événement 2.
La recherche doit commencer par le premier événement de la chaîne définie. Par exemple, si la séquence d'événements réelle est Événement 2 -> Événement 3 -> Événement 4, la fonction renvoie 0.
La recherche requiert un ordre strict et ne permet pas d'ignorer des événements. Par exemple, dans la séquence Événement 1 -> Événement 2 -> Événement 4, la correspondance s'arrête après l'Événement 2 car l'Événement 3 a été ignoré. Par conséquent, l'Événement 4 n'est pas pris en compte.

Syntaxe
La fonction window funnel prend en charge les deux syntaxes suivantes.
-
Si une colonne d'événement (event_id) est déjà définie dans vos données, utilisez la syntaxe suivante :
window_funnel(sliding_window, timestamp, event_id, ARRAY[event_list01, event_list02...]) -
Pour définir des valeurs d'événement personnalisées et non énumérées, utilisez la syntaxe suivante :
window_funnel(sliding_window, timestamp, ARRAY[event_id=event_list01, event_id=event_list02...])
Paramètres
|
Paramètre |
Description |
|
sliding_window |
La fenêtre temporelle glissante, en secondes. La valeur doit être de type bigint. |
|
timestamp |
L'horodatage, en secondes. La valeur doit être de type bigint. Nous recommandons d'utiliser le champ de journal intégré __time__. |
|
event_id |
Le champ de journal représentant un événement, tel que A, B ou C. La valeur doit être de type varchar. |
|
event_list |
La chaîne d'événements personnalisée à faire correspondre, pouvant contenir jusqu'à 32 événements. La valeur doit être de type array. Exemples :
|
Exemples
Un magasin de commerce électronique lance une promotion et utilise la fonction window funnel pour analyser les performances de conversion. Le parcours de conversion comprend trois étapes : parcourir un produit, l'ajouter au panier et l'acheter. Simple Log Service collecte les journaux de ces événements.
L'exemple suivant présente les champs d'une entrée de journal : behavior_type:pv, category_id:149192, item_id:2073959, timestamp:1511860012 et user_id:137617.
|
Champ de journal |
Description |
|
behavior_type |
Le type de comportement de l'utilisateur. Valeurs possibles :
|
|
category_id |
L'ID de catégorie du produit. |
|
item_id |
L'ID du produit. |
|
timestamp |
L'heure à laquelle le comportement de l'utilisateur s'est produit. |
|
user_id |
L'ID de l'utilisateur. |
Exemple 1
Analysez le comportement d'achat des utilisateurs sur une fenêtre de 24 heures.
-
Instruction de requête
* | 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 -
Résultats
La valeur
levelspour l'utilisateur 24 est de 3, ce qui indique que l'utilisateur a suivi le parcours complet : il a parcouru un produit, l'a ajouté au panier et l'a acheté.La valeur
levelspour l'utilisateur 14 est de 2, ce qui indique que l'utilisateur a parcouru un produit et l'a ajouté au panier, mais n'a pas finalisé l'achat.
La requête renvoie 1 000 enregistrements dans un tableau comportant deux colonnes : user_id et levels.
Exemple 2
Analysez le nombre d'utilisateurs ayant terminé chaque étape du funnel.
-
Instruction de requête
* | 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 ) -
Résultats
513 194 utilisateurs ont parcouru un produit, et 138 491 d'entre eux ont quitté le site après cette étape.
374 703 utilisateurs ont ajouté un produit au panier, et 198 642 d'entre eux ont quitté le site après cette étape.
176 061 utilisateurs ont acheté un produit.
Exemple 3
Calculez les taux de conversion pour la promotion.
Taux de conversion absolu : pourcentage d'utilisateurs totaux ayant terminé une étape spécifique.
Taux de conversion relatif : pourcentage d'utilisateurs ayant terminé une étape spécifique par rapport à ceux ayant terminé l'étape précédente.
-
Instruction de requête
* | 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 ) -
Résultats
La requête renvoie un tableau comportant cinq colonnes : levels, count, total, absolute conversion rate et relative conversion rate. Par exemple, au niveau 2, le taux de conversion absolu est d'environ 72,72 %. Au niveau 3, dernière étape, le taux de conversion absolu est d'environ 34,17 % et le taux de conversion relatif est d'environ 46,99 %.
Graphique en funnel
