Le but de cette analyse est de voir quels sont les produits les plus achetés ensemble. Cela peut être utile pour prévoir des bundles, où récupérer des données pour créer un module de recommandation.
Il n’est pas possible de le faire actuellement dans la Viz de Biron car cela demande de pouvoir associer à un produit d’une commande tout les autres produits fait dans cette commande.
Nous pouvons contourner cette limite grâce au NexusQL.
Pour réaliser l’analyse, nous aurons besoin de plusieurs requêtes pour:
Dans cette première requête on cherche à avoir une ligne par commande et par produit. On va donc aller chercher :
DIMENSION( 'order_id' )DIMENSION( 'product_name' )metric( 'transactions_order_date.billing_n_orders' )SELECT
DIMENSION( 'order_id' ) AS `order_id`,
DIMENSION( 'product_name' ) AS `Produit - Nom`,
metric( 'transactions_order_date.billing_n_orders' ) AS `Nb Commandes`
FROM
datamodel
WHERE
refDate BETWEEN '2022-01-01' AND '2022-12-31'
AND DIMENSION( 'product_name' ) != 'na'
GROUP BY
`order_id`,
`Produit - Nom`
Ici je cherche à créer une table qui va me renvoyer une ligne par combinaison de produits dans la commande
Commande
| ID Commande | Produit |
|---|---|
| 1 | A |
| 1 | B |
| 1 | C |
Table de combinaison
| ID Commande | Produit | Produit Accompagnant |
|---|---|---|
| 1 | A | B |
| 1 | A | C |
| 1 | B | A |
| 1 | B | C |
| 1 | C | A |
| 1 | C | B |
SELECT
t1.`Produit principal`,
t1.`Produit Accompagnant`,
t1.`Nb Commandes` AS `Nb Commandes communes`,
t2.`Nb Commandes` AS `Nb Commandes Produit Principal`,
100 * round(`Nb Commandes communes` / `Nb Commandes Produit Principal`, 4) AS `% Commande Communes`
FROM
(SELECT
t1.`Produit - Nom` AS `Produit principal`,
t2.`Produit - Nom` AS `Produit Accompagnant`,
sum(t1.`Nb Commandes`) AS `Nb Commandes`
FROM
( SELECT
DIMENSION( 'order_id' ) AS `order_id`,
DIMENSION( 'product_name' ) AS `Produit - Nom`,
metric( 'transactions_order_date.billing_n_orders' ) AS `Nb Commandes`
FROM
datamodel
WHERE
refDate BETWEEN '2022-01-01' AND '2022-12-31'
AND DIMENSION( 'product_name' ) != 'na'
GROUP BY
`order_id`,
`Produit - Nom` ) AS t1
INNER JOIN ( SELECT
DIMENSION( 'order_id' ) AS `order_id`,
DIMENSION( 'product_name' ) AS `Produit - Nom`,
metric( 'transactions_order_date.billing_n_orders' ) AS `Nb Commandes`
FROM
datamodel
WHERE
refDate BETWEEN '2022-01-01' AND '2022-12-31'
AND DIMENSION( 'product_name' ) != 'na'
GROUP BY
`order_id`,
`Produit - Nom` ) AS t2
ON t1.order_id = t2.order_id
WHERE
t1.`Produit - Nom` != t2.`Produit - Nom`
GROUP BY
t1.`Produit - Nom`, t2.`Produit - Nom`
ORDER BY
`Nb Commandes` DESC) AS t1
LEFT JOIN
( SELECT
DIMENSION( 'product_name' ) AS `Produit - Nom`,
metric( 'transactions_order_date.billing_n_orders' ) AS `Nb Commandes`
FROM
datamodel
WHERE
refDate BETWEEN '2022-01-01' AND '2022-12-31'
AND DIMENSION( 'product_name' ) != 'na'
GROUP BY
`Produit - Nom` ) AS t2
ON t1.`Produit principal` = t2.`Produit - Nom`
WHERE
`Nb Commandes Produit Principal` > 100
ORDER BY
`% Commande Communes` DESC