UNIVERSITE SIDI MOHAMED BEN ABDELLAH FACULTE DES SCIENCES ET TECHNIQUES FES 2014-2015 Les entrepôts De données TP 1 Réalisé par : Supervisé par : AIT SKOURT BRAHIM Pr. L. Lemrini BOUCHANA ADIL ED-DAHMOUNI BOUTHAYNA EL ISSAOUI NAOUFAL
Installation d Access to MySQL -Dans ce TP on va essayer de réaliser un entrepôt de données de la société ADEX qui a besoin d effectuer l analyse des ventes réalisées auprès de ses clients. Donc, dans notre cas on a choisi d installer un programme pour convertir les bases de données Microsoft Access présents aux MySQL. P a g e 2 13
Après avoir installé ce programme on va convertir les fichiers Microsoft Access présents Adex_BASE_GEO, Adex_ventes, Adex_FOURNISSEURS aux formats (.sql). Création de la base de données Adex_ED -La base de données Adex_ED contient 4 tables : Client Produit Vente Temps -la table Client contient 1 clé primaire (Numéro) : CREATE TABLE IF NOT EXISTS `CLIENT` ( `NUMERO` INT (11) NOT NULL, `NOM` VARCHAR (255) DEFAULT NULL, P a g e 3 13
`PRENOM` VARCHAR (255) DEFAULT NULL, `VILLE` VARCHAR (255) DEFAULT NULL, `DEPARTEMENT` VARCHAR (255) DEFAULT NULL, `REGION` VARCHAR (255) DEFAULT NULL, PRIMARY KEY (`NUMERO`)) ENGINE=INNODB DEFAULT CHARSET=UTF8; -la table Produit contient 1 clé primaire (référence) : CREATE TABLE IF NOT EXISTS `produit` ( `reference` varchar(10) NOT NULL DEFAULT '0', `désignation` varchar(50) DEFAULT NULL, `Marque` varchar(50) DEFAULT NULL, `categorie` varchar(50) DEFAULT NULL, `secteur` varchar (50) DEFAULT NULL, `tauxtva` double DEFAULT NULL, PRIMARY KEY (`reference`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; -la table Temps contient 1 clé primaire (date_facture) : CREATE TABLE IF NOT EXISTS `temps` ( `date_facture` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `mois` int(11) DEFAULT NULL, `annee` int(11) DEFAULT NULL, `jour` int(11) DEFAULT NULL, PRIMARY KEY (`date_facture`), UNIQUE KEY `pk` (`date_facture`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; -la table vente contient 1 clé primaire (date_facture) et 3 clé étrangères : Les clés étrangères : Numéro<=> (Numéro) à partir de la table client. P a g e 4 13
Date_facture<=> (Date_facture) à partir de la table temps. refprod <=> (référence) de la table produit. CREATE TABLE IF NOT EXISTS `vente` ( `id` int(11) NOT NULL AUTO_INCREMENT, `refprod` varchar(10) DEFAULT NULL, `date_facture` datetime DEFAULT NULL, `numero` int(11) DEFAULT NULL, `quantite` int(11) DEFAULT NULL, `montant` double DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_num_vente_client` (`numero`), KEY `fk_datefact_vente_temps` (`date_facture`), KEY `fk_ref_vente_prod` (`refprod`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=141 ; Remplissage de la base de données Adex_ED -Dans cette partie on va définir les requêtes d interrogation sur les bases sources Adex_ventes et Adex_base_GEO permettant d alimenter les tables de l entrepôt de données Adex_ED qui contient 4 tables (Produit, client, temps, vente) et puis, on va transformer ces requêtes d interrogation en requêtes d ajout d enregistrements dans l entrepôt de données Adex_ED. Table produit : INSERT into Produit SELECT `Référence`,`Désignation`,Marque,`Catégorie`,Secteur,TauxTVA from adex_ventes.produit Table client : P a g e 5 13
INSERT into adex_ed.client select adex_ventes.client.`numéro`,adex_ventes.client.nom,adex_ventes.client.`prénom`,adex_bas e_geo.ville.nom,adex_base_geo.`département`.`nomdépt`,adex_base_geo.`région`.`nomré gion` FROM adex_ventes.client,adex_ventes.`coordonnées`,adex_base_geo.codepostal,adex_base_geo.`dé partement`,adex_base_geo.`région`,adex_base_geo.ville where client.adresse=`coordonnées`.id and `coordonnées`.`code Postal`=adex_base_geo.codepostal.`Code Postal` and adex_base_geo.codepostal.`numéro`=adex_base_geo.ville.`numéro` AND adex_base_geo.ville.`numérodépt`=adex_base_geo.`département`.`numérodépt` AND adex_base_geo.`département`.`numérorégion`=adex_base_geo.`région`.`numérorégion` Table Temps : INSERT into adex_ed.temps select `Date Facture`, MONTH(adex_ventes.facture.`Date Facture`) AS mois, YEAR(adex_ventes.facture.`Date Facture`) AS annee, DAY(adex_ventes.facture.`Date Facture`) AS jour from adex_ventes.facture GROUP BY `Date Facture` Table vente : SELECT produit.`référence`,`date Facture`,NumClient,`référencer`.`Quantité`,produit.PrixUnitHT,produit.TauxTVA P a g e 6 13
from adex_ventes.facture,adex_ventes.client,adex_ventes.fournir,adex_ventes.produit,adex_vente s.`référencer` where facture.numéro=`référencer`.`n Facture` AND facture.numclient=client.`numéro` and fournir.`réfprod`=produit.`référence` AND `référencer`.`réfprod`=produit.`référence` Calcul montant : prixht(1+tva)*quantité : Insert into adex_ed.vente(refprod,date_facture,numero,quantite,montant) SELECT produit.`référence`,`date Facture`,NumClient,`référencer`.`Quantité`, `référencer`.`quantité`*produit.prixunitht*(1+produit.tauxtva) as montant from adex_ventes.facture,adex_ventes.client,adex_ventes.fournir,adex_ventes.produit,adex_vente s.`référencer` where facture.numéro=`référencer`.`n Facture` AND facture.numclient=client.`numéro` and fournir.`réfprod`=produit.`référence` AND `référencer`.`réfprod`=produit.`référence` Requêtes liées au décisionnel sur un entrepôt de données : -Dans cette partie on va essayer à l'aide du langage SQL, d exécuter les requêtes répondant aux questions suivantes : Question 1 : - Obtenir la quantité moyenne vendue par produit (référence, désignation) et par mois pour l année 2001 P a g e 7 13
select (SUM(quantite)/count(refProd)) as moyenne from vente,temps where vente.date_fact ure=temps.date_facture AND annee=2001 Question 2 : -Obtenir le montant total TTC des ventes par département et par catégorie de produit SELECT departement, categorie, SUM(montant) as ttc from client,vente,prod uit WHERE vente.numero=client.numero AND refprod=reference Group by departement, categorie P a g e 8 13
Question 3 : -Obtenir le meilleur client (Numéro, nom, prénom) en montant total. select sum(montant),client.numero, nom,prenom FROM vente, client where client.numero =vente.numero group by vente.numero ORDER By sum(montant) DESC limit 1 Question 4 : - Obtenir le nombre de marques achetées par client. SELECT nom,prenom,count(marque) from client,vente,produit where refprod=reference a nd client.numero=vente.numero GROUP BY vente.numero P a g e 9 13
Modification d un entrepôt de données - Dans cette partie on va modifier l entrepôt de données Adex_ED afin de prendre en compte le nouveau fait ACHAT et la nouvelle dimension FOURNISSEUR). En utilisant la nouvelle base données Adex_FOURNISSEURS, on va créer la requête SQL pour ajouter les nouvelles dates liées aux approvisionnements de produits auprès des fournisseurs dans la table TEMPS existante. Ensuite on va créer la requête SQL pour ajouter les données dans la nouvelle table FOURNISSEUR et la requête SQL pour ajouter les données dans la table nouvelle table ACHAT. Après modification de la base de données Adex_ED : P a g e 10 13
REMPLISSAGE DE LA TABLE TEMPS : INSERT INTO temps(date_facture,`mois`,`annee`) SELECT DISTINCT `Date`,extract(month From `Date`),extract(year From `Date`) FROM Adex_fournisseurs.fournir WHERE NOT Exists(select * from temps where `date_facture`=date) REMPLISSAGE DE LA TABLE FOURNISSEURS : INSERT INTO fournisseur(`code`,`raison`,n,voie,`code postal`, ville,tel) SELECT * FROM adex_fournisseurs.fournisseur P a g e 11 13
REMPLISSAGE DE LA TABLE ACHAT : INSERT INTO achat(`codef`,`refprod`,`date`,`quantite`,`prixunit`,`total`) SELECT `codef`,`réfprod`,`date`,`quantité`,`prixunitht`, (quantité*prixunitht) as total from adex_fournisseurs.fournir -Maintenant et après Avoir réalisé notre nouvelle base de données Adex_ED on passe à calculer le montant total horst taxes acheté auprès de chaque fournisseur chaque année : SELECT codef,annee,sum(total) as HT FROM achat,temps WHERE achat.date=temps.date_facture Group by codef,annee P a g e 12 13
P a g e 13 13