Mission 3 : Analyse de la base KDou (nouvelle version)

I) Contexte et objectifs de la mission 3

Cette mission consiste à exploiter la nouvelle version de la base de données KDou, dans laquelle ont été ajoutés de nouveaux champs stratégiques :

L’objectif est de construire des indicateurs de pilotage utiles pour KDou afin de mieux analyser son chiffre d’affaires, optimiser le catalogue et vérifier la cohérence de ses relations commerciales.

II) Requêtes imposées

1) Chiffre d’affaires des desserts et boissons par année

Énoncé : Calculer, pour chaque année, le chiffre d’affaires généré par les catégories Boissons et Desserts.

Construction : On utilise le coût d’achat du produit, le coefficient de marge de la catégorie, la quantité commandée et la remise pour obtenir le chiffre d’affaires. On ne garde que les lignes dont la catégorie contient “dessert” ou “boissons” puis on groupe par année de commande.

Requête SQL :

SELECT SUM( P.CoutAchat * CA.CoefMarge * DE.Quantité * (1 - DE.[Remise (%)]) ) AS ChiffreAffaire, Year(C.DateCde) AS Annee FROM ( (Categorie AS CA INNER JOIN Produit AS P ON CA.CodeCateg = P.CodeCateg) INNER JOIN DetailCommande AS DE ON P.RefProd = DE.[Réf produit] ) INNER JOIN Commande AS C ON C.[N° commande] = DE.[N° commande] WHERE CA.NomCateg LIKE "*boissons*" OR CA.NomCateg LIKE "*dessert*" GROUP BY Year(C.DateCde);

Résultat : On obtient, pour chaque année, le chiffre d’affaires réalisé avec les desserts et boissons. KDou peut ainsi suivre l’évolution de ces ventes et repérer les années les plus rentables.

2) Nombre de produits carnés non commandés

Énoncé : Déterminer quels produits carnés (viande / poisson) n’ont jamais été commandés.

Construction : On considère comme “carnés” les produits dont la catégorie contient Viande ou Poisson. Un produit est “non commandé” s’il n’apparaît dans aucune ligne de DetailCommande. On utilise donc un LEFT JOIN de Produit vers DetailCommande et on cherche les lignes où le numéro de commande est NULL.

Requête SQL :

SELECT P.NomProd AS Nom FROM ( (Produit AS P INNER JOIN Categorie AS C ON P.CodeCateg = C.CodeCateg) LEFT JOIN DetailCommande AS D ON P.RefProd = D.[Réf produit] ) WHERE ( C.NomCateg LIKE "*Viande*" OR C.NomCateg LIKE "*Poisson*" ) AND D.[N° commande] IS NULL ORDER BY 1;

Résultat : La requête liste les produits carnés jamais commandés. Cela permet à KDou d’identifier les références à faible intérêt commercial et de réfléchir à une suppression ou substitution.

3) Chiffre d’affaires avec les fournisseurs hors UE

Énoncé : « Quel CA total a été généré à ce jour avec les fournisseurs hors UE ? »

Construction : On ne garde que les fournisseurs dont le pays est marqué "Hors" dans le champ UE. On recalcule le chiffre d’affaires comme précédemment et on groupe par pays et devise pour voir la contribution de chaque zone.

Requête SQL :

SELECT Pays.PaysFR, SUM( P.CoutAchat * Categ.CoefMarge * DE.Quantité * (1 - DE.[Remise (%)]) ) AS ChiffreAffaire, Pays.Devise, COUNT(DE.[N° commande]) AS NbCommandes FROM ( ( ( Pays INNER JOIN Fournisseur ON Pays.NoPays = Fournisseur.NoPays ) INNER JOIN Produit AS P ON Fournisseur.NoFour = P.NoFour ) INNER JOIN Categorie AS Categ ON P.CodeCateg = Categ.CodeCateg ) INNER JOIN DetailCommande AS DE ON P.RefProd = DE.[Réf produit] WHERE Pays.UE = "Hors" GROUP BY Pays.PaysFR, Pays.Devise ORDER BY 1 DESC;

Résultat : La requête donne, par pays hors UE, le chiffre d’affaires, la devise utilisée et le nombre de commandes. KDou peut ainsi évaluer la rentabilité de ses importations extra-européennes.

4) Comparaison clients pilotes / clients partenaires

Énoncé : « Y a-t-il des clients pilotes ayant autant de commandes que leurs clients partenaires ? »

Construction : Un client pilote est identifié par son code, repris dans le champ CodeCliPart des clients partenaires. On calcule d’abord le nombre de commandes par client, puis on compare pour chaque couple (pilote, partenaire) le volume de commandes, en ne gardant que les cas où les deux ont le même nombre.

Requête SQL :

SELECT Pilote.CodeCli AS CodePilote, Pilote.Societe AS SocietePilote, CmdPilote.NbCmd AS CommandesPilote, Partenaire.CodeCli AS CodePartenaire, Partenaire.Societe AS SocietePartenaire, CmdPart.NbCmd AS CommandesPartenaire FROM ( ( Clientele AS Partenaire INNER JOIN Clientele AS Pilote ON Partenaire.CodeCliPart = Pilote.CodeCli ) LEFT JOIN ( SELECT CodeCli, COUNT(*) AS NbCmd FROM Commande GROUP BY CodeCli ) AS CmdPilote ON Pilote.CodeCli = CmdPilote.CodeCli ) LEFT JOIN ( SELECT CodeCli, COUNT(*) AS NbCmd FROM Commande GROUP BY CodeCli ) AS CmdPart ON Partenaire.CodeCli = CmdPart.CodeCli WHERE CmdPilote.NbCmd = CmdPart.NbCmd;

Résultat : On obtient la liste des couples pilote/partenaire avec le même nombre de commandes. KDou peut vérifier si le réseau de pilotes joue bien son rôle ou si certains partenariats doivent être ajustés.

III) Indicateurs proposés par l’équipe

Chaque membre du groupe a proposé un indicateur supplémentaire à partir de la base enrichie, afin d’aider la société KDou à mieux piloter son activité.

A) Neche Younes – Clients qui commandent le plus

Énoncé : Identifier les clients qui passent le plus grand nombre de commandes.

Intérêt pour KDou : repérer les clients à forte valeur, optimiser les remises de fidélité, les offres promotionnelles et mieux prévoir la demande en analysant les habitudes de commande.

Requête SQL :

SELECT Clientele.Societe, COUNT(Commande.[N° commande]) AS NbCommandes FROM Clientele INNER JOIN Commande ON Clientele.CodeCli = Commande.CodeCli GROUP BY Clientele.Societe ORDER BY 2 DESC;

Résultat : La requête met en avant les clients les plus actifs. KDou peut concentrer ses efforts commerciaux sur ces clients stratégiques.

B) Chabbi Brahim – Nombre de produits par fournisseur

Énoncé : Compter, pour chaque fournisseur, le nombre de références produits au catalogue.

Intérêt pour KDou : identifier les fournisseurs clés (offre large) et ceux qui sont peu représentés, pour décider d’éventuels partenariats, renégociations ou diversifications.

Requête SQL :

SELECT Fournisseur.Societe, Count(Produit.RefProd) AS NombreProduits FROM Fournisseur LEFT JOIN Produit ON Fournisseur.NoFour = Produit.NoFour GROUP BY Fournisseur.Societe ORDER BY Count(Produit.RefProd) DESC;

Résultat : Tous les fournisseurs apparaissent, même sans produit (grâce au LEFT JOIN). On visualise rapidement les acteurs majeurs du catalogue de KDou.

C) Kapusta Alexandre – Nombre de produits par pays d’origine

Énoncé : Compter le nombre de références produits associées à chaque pays fournisseur.

Intérêt pour KDou : suivre la répartition géographique de l’offre, mesurer la diversification des approvisionnements et réfléchir à l’impact environnemental des transports.

Requête SQL :

SELECT Pays.PaysFR, Count(Produit.RefProd) AS NombreProduits FROM ( Produit INNER JOIN Fournisseur ON Produit.NoFour = Fournisseur.NoFour ) INNER JOIN Pays ON Fournisseur.NoPays = Pays.NoPays GROUP BY Pays.PaysFR ORDER BY Count(Produit.RefProd) DESC;

Résultat : Les pays les plus représentés dans le catalogue sont mis en évidence. KDou peut négocier différemment selon les zones ou renforcer la diversité de certains pays sous-représentés.

D) Toumi Mohamed – Total des ventes par produit (Desserts et Boissons)

Énoncé : Mesurer, pour chaque produit des catégories Desserts et Boissons, la quantité totale vendue.

Intérêt pour KDou : mettre en évidence les meilleures ventes et les produits en difficulté dans ces catégories, afin d’ajuster l’offre, cibler les promotions et envisager le remplacement des produits les moins vendus.

Requête SQL :

SELECT Categorie.NomCateg, Produit.NomProd, Sum(DetailCommande.[Quantité]) AS TotalVentes FROM ( Categorie INNER JOIN Produit ON Categorie.CodeCateg = Produit.CodeCateg ) INNER JOIN DetailCommande ON Produit.RefProd = DetailCommande.[Réf produit] WHERE Categorie.NomCateg IN ('Desserts', 'Boissons') GROUP BY Categorie.NomCateg, Produit.NomProd ORDER BY Sum(DetailCommande.[Quantité]) DESC;

Résultat : Le tri décroissant fait apparaître immédiatement les produits les plus demandés. KDou peut y associer des remises, et réfléchir au remplacement des produits très peu vendus.