Un entrepôt de données (Data Warehouse) est une base de données spécialement conçue pour le stockage et l’analyse de données provenant de multiples sources. Les exercices ci-dessous couvrent des concepts essentiels tels que la modélisation des données, les requêtes SQL avancées, et l’optimisation des performances.
Un magasin souhaite créer un entrepôt de données pour analyser ses ventes. Voici les besoins :
Produit Client
\ /
\ /
Ventes -- Temps
À partir du modèle ci-dessus, écrivez une requête SQL pour calculer le total des ventes par catégorie de produit.
SELECT P.Categorie, SUM(F.Montant) AS Total_Ventes
FROM Faits_Ventes F
JOIN Dimension_Produit P ON F.ID_Produit = P.ID_Produit
GROUP BY P.Categorie;
Écrivez une requête SQL pour compter le nombre de clients dans chaque localisation.
SELECT C.Localisation, COUNT(DISTINCT C.ID_Client) AS Nombre_Clients
FROM Dimension_Client C
GROUP BY C.Localisation;
Trouvez le mois avec les ventes totales les plus élevées.
SELECT T.Mois, T.Annee, SUM(F.Montant) AS Total_Ventes
FROM Faits_Ventes F
JOIN Dimension_Temps T ON F.ID_Date = T.ID_Date
GROUP BY T.Mois, T.Annee
ORDER BY Total_Ventes DESC
LIMIT 1;
Expliquez pourquoi il est important de créer des index dans un entrepôt de données et proposez un index pour accélérer la requête sur les ventes par catégorie.
ID_Produit de la table Faits_Ventes : CREATE INDEX idx_id_produit ON Faits_Ventes(ID_Produit);Pour optimiser les analyses, créez une table agrégée contenant les ventes totales par catégorie et par mois.
CREATE TABLE Ventes_Aggregats ( Categorie VARCHAR(50), Mois INT, Annee INT, Total_Ventes DECIMAL(10, 2) );INSERT INTO Ventes_Aggregats (Categorie, Mois, Annee, Total_Ventes) SELECT P.Categorie, T.Mois, T.Annee, SUM(F.Montant) FROM Faits_Ventes F JOIN Dimension_Produit P ON F.ID_Produit = P.ID_Produit JOIN Dimension_Temps T ON F.ID_Date = T.ID_Date GROUP BY P.Categorie, T.Mois, T.Annee;Calculez les indicateurs clés de performance (KPIs) suivants :
SELECT AVG(Total_Client) AS Vente_Moyenne FROM ( SELECT F.ID_Client, SUM(F.Montant) AS Total_Client FROM Faits_Ventes F GROUP BY F.ID_Client ) AS Sous_Requete;SELECT P.Nom, SUM(F.Quantite) AS Quantite_Totale FROM Faits_Ventes F JOIN Dimension_Produit P ON F.ID_Produit = P.ID_Produit GROUP BY P.Nom ORDER BY Quantite_Totale DESC LIMIT 1;Décrivez un processus ETL (Extract, Transform, Load) pour charger les données des ventes dans l’entrepôt.
À l’aide d’un outil comme Excel ou Power BI, créez un tableau croisé dynamique pour afficher les ventes totales par catégorie et par région.
Proposez des stratégies pour améliorer les performances d’un entrepôt de données.
Voici une liste d’exercices qui incluent des cas particuliers souvent rencontrés dans les entrepôts de données. Ces exercices visent à approfondir la compréhension des scénarios complexes impliquant la gestion, l’analyse et l’optimisation des données.
Vous travaillez avec une table de faits des ventes où certaines informations de localisation client sont manquantes. Voici un extrait des données :
| ID Client | Date | Montant (€) | ID Région |
|---|---|---|---|
| 1 | 2023-01-01 | 100 | NULL |
| 2 | 2023-01-02 | 200 | 5 |
| 3 | 2023-01-03 | 150 | NULL |
NULL dans la colonne ID Région par une région par défaut (par exemple, -1).NULL : SELECT ID_Client, Date, Montant, COALESCE(ID_Region, -1) AS ID_Region FROM Faits_Ventes;SELECT COALESCE(ID_Region, -1) AS ID_Region, SUM(Montant) AS Total_Ventes FROM Faits_Ventes GROUP BY COALESCE(ID_Region, -1);Dans une table de faits, certaines transactions sont dupliquées par erreur :
| ID Transaction | Montant (€) |
|---|---|
| 1 | 100 |
| 2 | 200 |
| 1 | 100 |
| 3 | 150 |
SELECT ID_Transaction, COUNT(*) AS Nb_Occurrences FROM Faits_Ventes GROUP BY ID_Transaction HAVING COUNT(*) > 1;DELETE FROM Faits_Ventes WHERE ID_Transaction IN ( SELECT ID_Transaction FROM ( SELECT ID_Transaction, ROW_NUMBER() OVER(PARTITION BY ID_Transaction ORDER BY ID_Transaction) AS Rn FROM Faits_Ventes ) AS Sous_Requete WHERE Rn > 1 );Vous devez analyser les montants des ventes dans une table et identifier les valeurs aberrantes (outliers). Une vente est considérée comme aberrante si elle dépasse trois fois l’écart-type par rapport à la moyenne.
| ID Vente | Montant (€) |
|---|---|
| 1 | 100 |
| 2 | 200 |
| 3 | 1500 |
| 4 | 50 |
| 5 | 300 |
SELECT AVG(Montant) AS Moyenne, STDDEV(Montant) AS Ecart_Type FROM Faits_Ventes;WITH Statistiques AS ( SELECT AVG(Montant) AS Moyenne, STDDEV(Montant) AS Ecart_Type FROM Faits_Ventes ) SELECT ID_Vente, Montant FROM Faits_Ventes, Statistiques WHERE ABS(Montant - Moyenne) > 3 * Ecart_Type;Vous devez identifier les périodes où aucune vente n’a été réalisée en comparant avec une table de dates.
| Date | Montant (€) |
|---|---|
| 2023-01-01 | 100 |
| 2023-01-03 | 200 |
| 2023-01-05 | 300 |
| Date |
|---|
| 2023-01-01 |
| 2023-01-02 |
| 2023-01-03 |
| 2023-01-04 |
| 2023-01-05 |
SELECT D.Date FROM Dimension_Dates D LEFT JOIN Faits_Ventes F ON D.Date = F.Date WHERE F.Date IS NULL;Un e-commerce souhaite mesurer la rétention client. Un client est considéré comme actif s’il a passé au moins une commande sur une période donnée. Voici les données des commandes :
| ID Client | Date Commande |
|---|---|
| 1 | 2023-01-01 |
| 2 | 2023-01-02 |
| 1 | 2023-02-15 |
| 3 | 2023-02-20 |
SELECT ID_Client, T.Mois, T.Annee FROM Faits_Commandes C JOIN Dimension_Temps T ON C.Date_Commande = T.Date GROUP BY ID_Client, T.Mois, T.Annee HAVING COUNT(*) > 0;WITH Clients_Mois AS ( SELECT DISTINCT ID_Client, T.Mois, T.Annee FROM Faits_Commandes C JOIN Dimension_Temps T ON C.Date_Commande = T.Date ), Total_Clients AS ( SELECT COUNT(DISTINCT ID_Client) AS Total FROM Faits_Commandes ) SELECT COUNT(DISTINCT CM.ID_Client) * 100.0 / TC.Total AS Taux_Retention FROM Clients_Mois CM, Total_Clients TC WHERE CM.Mois = 2;Un entrepôt de données doit gérer l’historique des changements des informations client (par exemple, changement d’adresse). Voici une table actuelle :
| ID Client | Nom | Adresse | Date Début | Date Fin |
|---|---|---|---|---|
| 1 | Alice | Paris | 2023-01-01 | 2023-06-30 |
| 1 | Alice | Lyon | 2023-07-01 | NULL |
UPDATE Dimension_Client SET Date_Fin = '2023-06-30' WHERE ID_Client = 1 AND Date_Fin IS NULL;INSERT INTO Dimension_Client (ID_Client, Nom, Adresse, Date_Debut, Date_Fin) VALUES (1, 'Alice', 'Lyon', '2023-07-01', NULL);Ces exercices offrent une vision pratique des défis réels rencontrés dans les entrepôts de données et couvrent des domaines comme la gestion des données manquantes, la détection des anomalies, et l’analyse de la rétention client. Ils permettent de consolider vos compétences tout en explorant des cas concrets.
Voici une liste d’exercices qui incluent des cas particuliers souvent rencontrés dans les entrepôts de données. Ces exercices visent à approfondir la compréhension des scénarios complexes impliquant la gestion, l’analyse et l’optimisation des données.
Vous travaillez avec une table de faits des ventes où certaines informations de localisation client sont manquantes. Voici un extrait des données :
| ID Client | Date | Montant (€) | ID Région |
|---|---|---|---|
| 1 | 2023-01-01 | 100 | NULL |
| 2 | 2023-01-02 | 200 | 5 |
| 3 | 2023-01-03 | 150 | NULL |
NULL dans la colonne ID Région par une région par défaut (par exemple, -1).NULL : SELECT ID_Client, Date, Montant, COALESCE(ID_Region, -1) AS ID_Region FROM Faits_Ventes;SELECT COALESCE(ID_Region, -1) AS ID_Region, SUM(Montant) AS Total_Ventes FROM Faits_Ventes GROUP BY COALESCE(ID_Region, -1);Dans une table de faits, certaines transactions sont dupliquées par erreur :
| ID Transaction | Montant (€) |
|---|---|
| 1 | 100 |
| 2 | 200 |
| 1 | 100 |
| 3 | 150 |
SELECT ID_Transaction, COUNT(*) AS Nb_Occurrences FROM Faits_Ventes GROUP BY ID_Transaction HAVING COUNT(*) > 1;DELETE FROM Faits_Ventes WHERE ID_Transaction IN ( SELECT ID_Transaction FROM ( SELECT ID_Transaction, ROW_NUMBER() OVER(PARTITION BY ID_Transaction ORDER BY ID_Transaction) AS Rn FROM Faits_Ventes ) AS Sous_Requete WHERE Rn > 1 );Vous devez analyser les montants des ventes dans une table et identifier les valeurs aberrantes (outliers). Une vente est considérée comme aberrante si elle dépasse trois fois l’écart-type par rapport à la moyenne.
| ID Vente | Montant (€) |
|---|---|
| 1 | 100 |
| 2 | 200 |
| 3 | 1500 |
| 4 | 50 |
| 5 | 300 |
SELECT AVG(Montant) AS Moyenne, STDDEV(Montant) AS Ecart_Type FROM Faits_Ventes;WITH Statistiques AS ( SELECT AVG(Montant) AS Moyenne, STDDEV(Montant) AS Ecart_Type FROM Faits_Ventes ) SELECT ID_Vente, Montant FROM Faits_Ventes, Statistiques WHERE ABS(Montant - Moyenne) > 3 * Ecart_Type;Vous devez identifier les périodes où aucune vente n’a été réalisée en comparant avec une table de dates.
| Date | Montant (€) |
|---|---|
| 2023-01-01 | 100 |
| 2023-01-03 | 200 |
| 2023-01-05 | 300 |
| Date |
|---|
| 2023-01-01 |
| 2023-01-02 |
| 2023-01-03 |
| 2023-01-04 |
| 2023-01-05 |
SELECT D.Date FROM Dimension_Dates D LEFT JOIN Faits_Ventes F ON D.Date = F.Date WHERE F.Date IS NULL;Un e-commerce souhaite mesurer la rétention client. Un client est considéré comme actif s’il a passé au moins une commande sur une période donnée. Voici les données des commandes :
| ID Client | Date Commande |
|---|---|
| 1 | 2023-01-01 |
| 2 | 2023-01-02 |
| 1 | 2023-02-15 |
| 3 | 2023-02-20 |
SELECT ID_Client, T.Mois, T.Annee FROM Faits_Commandes C JOIN Dimension_Temps T ON C.Date_Commande = T.Date GROUP BY ID_Client, T.Mois, T.Annee HAVING COUNT(*) > 0;WITH Clients_Mois AS ( SELECT DISTINCT ID_Client, T.Mois, T.Annee FROM Faits_Commandes C JOIN Dimension_Temps T ON C.Date_Commande = T.Date ), Total_Clients AS ( SELECT COUNT(DISTINCT ID_Client) AS Total FROM Faits_Commandes ) SELECT COUNT(DISTINCT CM.ID_Client) * 100.0 / TC.Total AS Taux_Retention FROM Clients_Mois CM, Total_Clients TC WHERE CM.Mois = 2;Un entrepôt de données doit gérer l’historique des changements des informations client (par exemple, changement d’adresse). Voici une table actuelle :
| ID Client | Nom | Adresse | Date Début | Date Fin |
|---|---|---|---|---|
| 1 | Alice | Paris | 2023-01-01 | 2023-06-30 |
| 1 | Alice | Lyon | 2023-07-01 | NULL |
UPDATE Dimension_Client SET Date_Fin = '2023-06-30' WHERE ID_Client = 1 AND Date_Fin IS NULL;INSERT INTO Dimension_Client (ID_Client, Nom, Adresse, Date_Debut, Date_Fin) VALUES (1, 'Alice', 'Lyon', '2023-07-01', NULL);Ces exercices offrent une vision pratique des défis réels rencontrés dans les entrepôts de données et couvrent des domaines comme la gestion des données manquantes, la détection des anomalies, et l’analyse de la rétention client. Ils permettent de consolider vos compétences tout en explorant des cas concrets.
Deux outils concrets pour piloter la qualité sans alourdir vos équipes Cette page met à…
Un chantier se gagne souvent avant même l’arrivée des équipes. Quand tout est clair dès…
Le mariage a du sens quand il repose sur une décision libre, mûrie et partagée.…
Une étude de cas réussie commence par une structure sûre. Ce modèle Word vous guide…
Les soft skills se repèrent vite sur une fiche, mais elles ne pèsent vraiment que…
Outil de comparaison et repérage des offres étudiantes Choisir des verres progressifs ressemble rarement à…
This website uses cookies.