Besoin

L’analyse de CA Induit permet de voir pour un produit donné la part de CA des autres produit de la commande. On peut ainsi contrôler par exemple si un produit d’appel permet de faire de l’Upsell sur les commandes où il est acheté.

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 le CA de cette commande.

Nous pouvons contourner cette limite grâce au NexusQL.

Requête finale

Plan

Pour réaliser l’analyse, nous aurons besoin de plusieurs requêtes pour:

  1. Récupérer tous les produits de chaque commande avec le CA des produits associés
  2. Récupérer le CA de chaque commande
  3. Lier les deux précédentes requêtes pour avoir pour chaque produit de chaque commande le CA de la commande au total. Nous agrégerons cette information par produit pour avoir une analyse par produit

Requêtes

Récupération des produits de commandes

Dans cette première requête on cherche à avoir une ligne par commande et par produit. On va donc aller chercher :

<aside> 💡 En ajoutant ici un filtre sur la dimension Produit - Category, on pourra orienter l’analyse sur tout le CA Induit généré PAR une catégorie en particulier Ex : Filtre sur Chaussure → “Quelle est la part de CA Induit quand je vend des Chaussures

</aside>

SELECT
  DIMENSION( 'order_id' )                         AS `order_id`,
  DIMENSION( 'product_name' )                     AS `Produit - Nom`,
  metric( 'transactions_order_date.billing_ttc' ) AS `CA Produit TTC`
FROM
  datamodel
WHERE
    refDate BETWEEN '2022-01-01' AND '2022-12-31'
  AND DIMENSION( 'product_name' ) != 'na'
GROUP BY
  `order_id`,
  `Produit - Nom`

Récupération des résultats des commandes complètes

On cherche ici à récupérer le CA total de chaque commande. C’est une requête simple où l’on va chercher :

<aside> 💡 Si on rajoute ici un filtre sur la catégorie de produit, on pourra faire l’analyse du CA Induit généré SUR une catégorie de produit particulier : Ex : Même cas qu’au dessus si je filtre ici sur Chaussettes → “Quelle est part de CA Induit sur les Chaussettes quand je vend des Chaussures”

</aside>

SELECT
  DIMENSION( 'order_id' )                         AS `order_id`,
  metric( 'transactions_order_date.billing_ttc' ) AS `CA TTC`
FROM
  datamodel
WHERE
  refDate BETWEEN '2022-01-01' AND '2022-12-31'
GROUP BY
  order_id

Requête de Calcul

Il ne reste plus qu’a faire le lien entre nos deux première requêtes grâce à un LEFT JOIN sur la clé commune des deux tables Produit - Nom et je GROUP BY par Produit pour avoir une analyse par produit.

On peut alors chercher les données qui nous intéressent des deux précédentes requêtes.

Ici, je vais mettre côte à côte mon CA de produit et mon CA total des commandes et calculer le CA Induit en faisant la différence.

Je pousse un peu plus loin avec une analyse du panier moyen induit

Pour être sur d’avoir des données pertinentes, je vais enlever les produits vendus dans moins de 100 commandes. Et je vais ordonner mes commandes par Panier Moyen Induit décroissant pour dégager un top produit

SELECT
	t1.`Produit - Nom`                                                         AS `Produit - Nom`,
	COUNT( )                                                                   AS `Nb Commandes`,
	sum(t1.`CA Produit TTC`)                                                   AS `CA Total du produit`,
	sum(t2.`CA TTC`)                                                           AS `CA Total des commandes contenant le produit`,
	sum(t2.`CA TTC` - t1.`CA Produit TTC`)                                     AS `CA Induit TTC`,
	ROUND( `CA Total du produit` / `Nb Commandes`, 2 )                         AS `CA Moyen Produit`,
	ROUND( `CA Total des commandes contenant le produit` / `Nb Commandes`, 2 ) AS `Panier Moyen`,
	ROUND( `CA Induit TTC` / `Nb Commandes`, 2 )                               AS `Panier Moyen Induit`
FROM
	*{Requête Commande par Produit}* AS t1
	LEFT JOIN *{Requête Commande Totale}* AS t2
	          ON t1.order_id = t2.order_id
GROUP BY
	t1.`Produit - Nom`
HAVING
	`Nb Commandes` > 100
ORDER BY
	`Panier Moyen Induit` DESC;

Requête finale

SELECT
	t1.`Produit - Nom`,
	COUNT( )                                                       AS `Nb Commandes`,
	sum(t1.`CA Produit TTC`)                                            AS `CA Total du produit`,
	sum(t2.`CA TTC`)                                                    AS `CA Total des commandes contenant le produit`,
	sum(t2.`CA TTC` - t1.`CA Produit TTC`)                              AS `CA Induit TTC`,
	ROUND( `CA Total du produit` / `Nb Commandes`, 2 )               AS `CA Moyen Produit`,
	ROUND( `CA Total des commandes contenant le produit` / `Nb Commandes`, 2 )                       AS `Panier Moyen`,
	ROUND( `CA Induit TTC` / `Nb Commandes`, 2 ) AS `Panier Moyen Induit`
FROM
	( SELECT
		  DIMENSION( 'order_id' )                         AS `order_id`,
		  DIMENSION( 'product_name' )                     AS `Produit - Nom`,
		  metric( 'transactions_order_date.billing_ttc' ) AS `CA Produit TTC`
	  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
	LEFT JOIN ( SELECT
		            DIMENSION( 'order_id' )                         AS `order_id`,
		            metric( 'transactions_order_date.billing_ttc' ) AS `CA TTC`
	            FROM
		            datamodel
	            WHERE
		            refDate BETWEEN '2022-01-01' AND '2022-12-31'
	            GROUP BY
		            order_id ) AS t2
	          ON t1.order_id = t2.order_id
GROUP BY
	t1.`Produit - Nom`
HAVING
	`Nb Commandes` > 100
ORDER BY
	`Panier Moyen Induit` DESC;