Aller au contenu

Exporter une analyse de similarité produit vers Google Sheets

Ce use case illustre une utilisation concrète du plugin Biron dans Zapier. Si vous n’êtes pas encore familier avec son fonctionnement (authentification, structure d’une requête, gestion des variables), consultez d’abord le guide Biron × Zapier avant de continuer.


Un Zap qui se déclenche chaque trimestre, exécute une analyse de similarité produit sur le trimestre écoulé et alimente automatiquement un Google Sheet avec les résultats.

L’objectif : identifier les paires de produits achetées ensemble plus souvent que le hasard — pour améliorer les recommandations produit ou construire des offres bundle.


Schedule → Calcul des dates → Requête similarité produits → Google Sheets

Configurez un bloc Schedule by Zapier :

  • Frequency : Custom Frequency
  • Frequency Type : Monthly
  • Interval : 3

Les requêtes Biron nécessitent des dates explicites. Ce bloc génère dynamiquement les bornes du trimestre précédent à chaque exécution.

Ajoutez un bloc Code by Zapier (Python). Utilisez le prompt suivant pour générer le code, puis collez le résultat dans le bloc :

Rôle : Expert Python pour Zapier.
Objectif : Créer un script de calcul de dates relatives.
Calculer les dates suivantes en gérant les spécificités du calendrier
(années bissextiles, fins de mois) :
- Hier
- Début du trimestre précédent
Sortie : retourner un dictionnaire "output" avec toutes les dates au format YYYY-MM-DD.

Cette étape exécute une analyse de similarité produit en NexusQL. Elle identifie les paires de SKUs les plus fréquemment achetées ensemble sur le trimestre écoulé et calcule leur Lift.

Contrairement aux autres use cases, la requête NexusQL ici n’est pas générée depuis un chart Biron — elle est construite manuellement avec vos connaissances SQL, assistées d’un LLM. Une fois la requête prête, collez-la dans le bloc Biron Query de Zapier et remplacez les dates statiques par les variables produites à l’étape précédente.

Requeête Similarité
-- ============================================================
-- ANALYSE DE CO-ACHAT PRODUITS — Market Basket Analysis
-- Période : 2024-01-01 → 2025-03-17
--
-- Objectif : identifier les paires de produits fréquemment
-- achetées ensemble et mesurer la force de leur association
-- via le lift.
--
-- Lift = (P(A∩B)) / (P(A) × P(B))
-- = co_achats(A,B) × total_commandes / (commandes(A) × commandes(B))
-- Lift > 1 → association positive (au-delà du hasard)
-- Lift = 1 → indépendance
-- Lift < 1 → association négative
-- ============================================================
SELECT
t1.product_1,
t1.product_2,
t1.co_achats AS n_orders_A_B, -- Nb commandes contenant A et B
t2.transaction AS n_orders_A, -- Nb commandes contenant A
t3.transaction AS n_orders_B, -- Nb commandes contenant B
t4.transaction AS n_orders_total, -- Nb total de commandes
n_orders_A_B / n_orders_A / n_orders_B * n_orders_total AS lift, -- Force de l'association (> 1 = affinité réelle),
n_orders_A_B / n_orders_total AS support_A_B,
n_orders_A / n_orders_total AS support_A,
n_orders_B / n_orders_total AS support_B
FROM
-- --------------------------------------------------------
-- BLOC 1 : Paires de produits co-achetés (self-join)
-- Chaque commande est jointe avec elle-même pour générer
-- toutes les combinaisons de produits possibles.
-- La condition t1.product < t2.product garantit que chaque
-- paire (A, B) n'apparaît qu'une fois (évite (A,B) et (B,A))
-- --------------------------------------------------------
( SELECT
t1.product AS product_1,
t2.product AS product_2,
COUNT( ) AS co_achats
FROM
( SELECT
DIMENSION( 'order_id' ) AS order_id,
DIMENSION( 'product_name' ) AS product,
METRIC( 'transactions_order_date.billing_n_orders' ) AS trasaction
FROM
datamodel
WHERE
refDate BETWEEN '2024-01-01' AND '2025-03-17'
AND product != 'na' -- exclut les lignes sans produit identifié
GROUP BY
order_id,
product ) AS t1
LEFT JOIN ( SELECT
DIMENSION( 'order_id' ) AS order_id,
DIMENSION( 'product_name' ) AS product,
METRIC( 'transactions_order_date.billing_n_orders' ) AS trasaction
FROM
datamodel
WHERE
refDate BETWEEN '2024-01-01' AND '2025-03-17'
AND product != 'na'
GROUP BY
order_id,
product ) AS t2
ON t1.order_id = t2.order_id
WHERE
t1.product < t2.product -- déduplique les paires (A,B) sans DISTINCT
GROUP BY
t1.product,
t2.product ) AS t1
-- --------------------------------------------------------
-- BLOC 2 : Fréquence individuelle de product_1
-- Utilisé pour calculer P(A) dans la formule du lift
-- --------------------------------------------------------
LEFT JOIN ( SELECT
DIMENSION( 'product_name' ) AS product,
METRIC( 'transactions_order_date.billing_n_orders' ) AS transaction
FROM
datamodel
WHERE
refDate BETWEEN '2024-01-01' AND '2025-03-17'
AND product != 'na'
GROUP BY
product ) AS t2
ON t1.product_1 = t2.product
-- --------------------------------------------------------
-- BLOC 3 : Fréquence individuelle de product_2
-- Utilisé pour calculer P(B) dans la formule du lift
-- Identique au bloc 2, jointure sur product_2
-- --------------------------------------------------------
LEFT JOIN ( SELECT
DIMENSION( 'product_name' ) AS product,
METRIC( 'transactions_order_date.billing_n_orders' ) AS transaction
FROM
datamodel
WHERE
refDate BETWEEN '2024-01-01' AND '2025-03-17'
AND product != 'na'
GROUP BY
product ) AS t3
ON t1.product_2 = t3.product
-- --------------------------------------------------------
-- BLOC 4 : Volume total de commandes (scalaire)
-- CROSS JOIN car c'est une valeur unique à propager
-- sur toutes les lignes — dénominateur commun du lift
-- --------------------------------------------------------
CROSS JOIN ( SELECT
METRIC( 'transactions_order_date.billing_n_orders' ) AS transaction
FROM
datamodel
WHERE
refDate BETWEEN '2024-01-01' AND '2025-03-17'
AND DIMENSION( 'product_name' ) != 'na' ) AS t4
-- --------------------------------------------------------
-- FILTRE : seuil de support minimum à 10%
-- Élimine les associations anecdotiques qui feraient
-- exploser le lift sur des produits très peu achetés.
-- Ajuster selon le besoin (0.01 = 1%, 0.001 = 0.1%)
-- ---------------------------------------------------------
WHERE
support_A_B > 0.01
AND support_A > 0.01
AND support_B > 0.01
ORDER BY
n_orders_A_B DESC

Les données retournées couvrent :

ColonneDescription
Produit APremier SKU de la paire
Produit BSecond SKU de la paire
LiftScore d’association entre les deux produits
Commandes communesNombre de commandes contenant les deux produits

Avant de configurer le bloc Zapier, préparez votre fichier :

  1. Créez un nouveau Google Sheet dans votre Drive
  2. Sur la première ligne, renseignez les en-têtes de colonnes : Produit A, Produit B, Lift, Commandes Communes

Ajoutez ensuite un bloc Create Multiple Spreadsheet Rows dans Zapier et configurez :

  • Spreadsheet : sélectionnez le fichier créé ci-dessus
  • Worksheet : la feuille cible
  • Colonnes : liez chaque colonne aux champs correspondants issus de la requête Biron

Chaque trimestre, votre Google Sheet est automatiquement alimenté avec les paires de produits les plus associées sur la période écoulée. Vous disposez d’une base prête à l’emploi pour alimenter vos décisions de merchandising, vos recommandations produit ou la construction de bundles.