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.
Ce qu’on construit
Section intitulée « Ce qu’on construit »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.
Architecture du Zap
Section intitulée « Architecture du Zap »Schedule → Calcul des dates → Requête similarité produits → Google SheetsTrigger — Schedule by Zapier
Section intitulée « Trigger — Schedule by Zapier »Configurez un bloc Schedule by Zapier :
- Frequency : Custom Frequency
- Frequency Type : Monthly
- Interval : 3
Calcul des dates
Section intitulée « Calcul des dates »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.Requête similarité produits
Section intitulée « Requête similarité produits »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.
-- ============================================================-- 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 DESCLes données retournées couvrent :
| Colonne | Description |
|---|---|
| Produit A | Premier SKU de la paire |
| Produit B | Second SKU de la paire |
| Lift | Score d’association entre les deux produits |
| Commandes communes | Nombre de commandes contenant les deux produits |
Alimentation — Google Sheets
Section intitulée « Alimentation — Google Sheets »Avant de configurer le bloc Zapier, préparez votre fichier :
- Créez un nouveau Google Sheet dans votre Drive
- 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
Résultat attendu
Section intitulée « Résultat attendu »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.