Date de sortie
15/10/2024
Auteur
U
Untitled“On m’a demandé de faire une segmentation client basée sur le nombre d’achat sur un an glissant. Je fais avec un CASE WHEN mais ça fait chargé. Il n’y a pas mieux ?”
Tout va dépendre du besoin en sortie, mais pour classer les données en différentes tranches sur BigQuery il y a la fonction RANGE_BUCKET().
Syntaxe
RANGE_BUCKET(la_valeur_à_classer, les_différentes_tranches)
Un exemple étant toujours plus parlant, en voici un.
Obtenir la classification des clients selon le nombre d’achat
On veut appliquer les règles suivantes :
- Client en base mais pas d’achat sur un an glissant → Classification 0
- Entre 1 et 4 achats → Classification 1
- Entre 5 et 9 achats → Classification 2
- A partir de 10 achats → Classification 3
Voici ce que cela pourrait donner avec l’utilisation de RANGE_BUCKET() :
WITH cte_agg_sales_by_customer AS (
SELECT
custId,
nbSales
FROM
UNNEST([
STRUCT(1 AS custId, 4 AS nbSales),
STRUCT(2 AS custId, 21 AS nbSales),
STRUCT(3 AS custId, 9 AS nbSales),
STRUCT(4 AS custId, 5 AS nbSales),
STRUCT(5 AS custId, 0 AS nbSales)
]) AS sales
)
SELECT
custId,
nbSales,
RANGE_BUCKET(nbSales, [1, 5, 10]) AS custCategory
FROM
cte_agg_sales_by_customer;
Le résultat :
custId | nbSales | custCategory |
1 | 4 | 1 |
2 | 21 | 3 |
3 | 9 | 2 |
4 | 5 | 2 |
5 | 0 | 0 |
Dans un moindre effort, nous avons classé les différents clients en 4 catégories de 0 à 3.
Sachant que 0 signifie que le client n’a pas effectué d’achat sur les 12 derniers mois et 3 le client a un certain niveau d’achat.
Merci de votre lecture !