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.
La tenue de registres est une méthode essentielle pour organiser et gérer des informations de…
La critique littéraire est une approche qui consiste à analyser, interpréter et évaluer un texte…
La méthode de lecture Paul et Suzanne est une méthode syllabique qui repose sur un…
La logistique est le moteur silencieux derrière la réussite de tout événement ou projet. Bien…
La résolution de problèmes est une compétence essentielle dans divers contextes professionnels et personnels. Ce…
Le problème des files d’attente est courant dans de nombreux domaines (services clients, production, logistique)…
This website uses cookies.