Date de sortie
October 15, 2024
Auteur
Bertrand Fabre
“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 !