Vous êtes sur la page 1sur 36

0

VINCENT Jrmy
Roussel Xavier
13/01/12
BD51 BUSINESS
INTELLIGENCE & DATA
WAREHOUSE
Document de synthse de projet

Dveloppement dun systme dcisionnel pour la gestion des ventes par
magasin pour la base de donnes EMODE.
13/01/2012
1

Table des matires
Introduction ................................................................................................. 3
1. Scnario .................................................................................................. 4
2. Fonctions dETL .................................................................................... 5
a. Qualit des donnes .........................................................................................5
b. Packages SSIS ...................................................................................................5
Transfert des donnes ....................................................................................... 5
Gestion des tables dagrgat ............................................................................. 7
Ajout de donnes supplmentaires ................................................................... 7
Automatisation de la procdure........................................................................ 7
3. Optimisation .......................................................................................... 8
a. Partitionnement ...............................................................................................8
b. Analysis Services ..............................................................................................8
4. Reporting .............................................................................................. 13
a. Reporting Services ........................................................................................ 13
b. Univers BO ...................................................................................................... 15
c. Web Intelligence ............................................................................................. 18
d. Tableau de bord Excel ................................................................................. 19
Conclusion .................................................................................................. 20
Annexes ....................................................................................................... 21
Annexe 1 : Qualit des donnes ........................................................................ 21
Annexe 2 : Ajout de nouvelles donnes .......................................................... 29
Annexe 3 : Partitionnement des tables de fait ............................................. 32


13/01/2012
2
Table des illustrations

Figure 1 : Cration de EMODE sous SQL Server ................................................................... 5
Figure 2 : Transfert des donnes de Oracle vers SQL Server ................................................. 6
Figure 3 : Processus de transfert des donnes ......................................................................... 6
Figure 4 : Gestion des tables agrges ..................................................................................... 7
Figure 5 : Dimension gographie Relations entre attributs ................................................ 9
Figure 6 : Dimension gographie Hirarchie cre .............................................................. 9
Figure 7 : Dimension temps Relations entre attributs ........................................................ 9
Figure 8 : Dimension temps Hirarchie cre ...................................................................... 9
Figure 9 : Dimension produits Relations entre attributs ................................................... 10
Figure 10 : Dimension produits Hirarchie cre............................................................... 10
Figure 11 : Architecture du cube ............................................................................................ 11
Figure 12 : Exploration du cube ............................................................................................. 12
Figure 13 : Reporting Services -Tableau ................................................................................ 14
Figure 14 : Reporting Services - Graphique .......................................................................... 14
Figure 15 : Modle en toile base EMODE ............................................................................ 15
Figure 16 : Objets mtiers relatifs lunivers BO ................................................................. 16
Figure 17 : Interactive Analysis Requte 1 ........................................................................... 18
Figure 18 : Interactive Analysis Requte 2 ........................................................................... 18
Figure 19 : Exemple de rapport Analysis Services ................................................................ 18
Figure 20 : Excel - Tableau crois dynamique ....................................................................... 19
Figure 21 : Excel Graphique ................................................................................................ 19

13/01/2012
3
INTRODUCTION

Dans le cadre de lUV BD51, nous avions notre charge la conception et le dveloppement
dun systme dcisionnel pour la gestion des ventes par magasin pour la base de donnes
EMODE.
Ce rapport aura comme objectif, dexpliquer en dtail, code source lappui, les diffrentes
tapes de la conception de ce projet, savoir la mise en uvre des fonctions dETL,
loptimisation du data warehouse et enfin, la mise en place du reporting.
Ce projet a t ralis sur une machine virtuelle de type Microsoft Virtual PC sous
Windows XP 32 bits version anglaise. Les systmes de gestion de base de donnes
impliqus sont oracle 11g et SQL Server 2008 R2.

13/01/2012
4
1. SCENARIO

Lobjectif de ce projet est dobtenir, dans la finalit, un systme permettant lutilisateur
lambda davoir une vision claire sur ltat des ventes par magasin de la base de donnes
EMODE, le tout en tablissant diffrents rapports mettant en avant les caractristiques
dsires par lutilisateur.
Pour ce faire, nous sommes passs par plusieurs tapes. Dans un premier temps, nous
devions effectuer un transfert de la totalit des donnes de la base Oracle sous une base
SQL Server, le tout laide de fonctions dETL, en loccurrence de packages SSIS.
Dans un second temps, nous avons entrepris doptimiser les donnes transfres afin de
diminuer au minimum les temps de calcul et damliorer les performances de notre
application.
Ensuite, nous avons mis en place par le biais dun projet Analysis Services, un cube OLAP
afin de naviguer au sein des donnes et davoir un aperu de la qualit de celles-ci. Ce cube
nous sera galement utile par la suite lors de la cration de notre tableau de bord Excel.
En effet, le cube prcdemment cr nous servira alors de source de donnes.
Enfin, pour terminer, nous avons mis en place diffrents types de rapports laide doutils
diffrents, tels Reporting Services et Web Intelligence.
Il est galement noter que nous avons pris la dcision de ne transfrer que les cinq tables
suivantes : ARTICLE_COLOR_LOOKUP, ARTICLE_LOOKUP, OUTLET_LOOKUP,
CALENDAR_YEAR_LOOKUP et SHOP_FACTS. En effet, aprs tude approfondie du
sujet, il sest avr que ces tables seront utilises dans chaque rapport et que les autres
prsentes dans la base Oracle nont quun intrt limit pour notre cas. De plus, ces cinq
tables interviennent dans notre modle en toile reprsent dans lunivers BO.

13/01/2012
5
2. FONCTIONS DETL

a. Qualit des donnes

La premire tape de ce projet fut la mise en place de requtes SQL permettant de
vrifier lintgrit des donnes dans la base dorigine, savoir Oracle 11g. En effet, avant
de commencer le transfert des donnes il tait ncessaire de vrifier que chaque contrainte
est bel et bien respecte, en vrifiant par exemple lunicit de chaque contrainte de cl
primaire ainsi que la prsence des cls trangres dans les tables rfrences.
Pour ce faire, nous avons rdig de simples requtes SQL (Cf. Annexe 1) que nous
utiliserons par la suite au sein de nos packages SSIS afin de vrifier la conformit des
donnes transfres.
De plus, ces requtes intgrent la traabilit de la non conformit des donnes
dans le sens o chaque donne non valide sera alors transfre dans une table de rejet
cre au pralable.

b. Packages SSIS

Le transfert des donnes de la base Oracle vers SQL Server seffectue laide de
packages SSIS crs avec Business Intelligence Development Studio. Chaque package ici
son rle jouer et cest pour cela que nous avons dcid de les traiter un par un, en les
diffrenciant les uns des autres.
Transfert des donnes
Nous avons donc cr ici un premier package SSIS permettant deffectuer le transfert
intgral de notre base Oracle vers notre base SQL Server.
Pour ce faire, nous avons pris le parti de bien sparer chaque tape du transfert. De ce
fait, nous avons un premier sous package nomm "sub cration de EMODE" intgrant
compltement la procdure de suppression et cration de la base EMODE sous SQL
Server, ncessaire avant deffectuer le transfert des donnes en lui-mme.
Ci-aprs un schma prsentant la procdure suivie tout au long du processus de ce sous
package :

Figure 1 : Cration de EMODE sous SQL Server
Suppression de
la base
EMODE dans
SQL SERVER
Creation de
EMODE dans
SQL Server
Cration des
tables de
donnes
Ajout des
contraintes de
cls primaires
Ajout des
contraintes de
cls trangres
13/01/2012
6
Chaque tape de ce package nest en fait quun simple script SQL permettant de grer
manuellement chaque table de lapplication. Ceci laisse alors supposer que lon connaisse
larchitecture des tables transfres lavance.
Ensuite, la seconde tape de la cration de ce package ft de traiter le transfert
proprement parler de la totalit des donnes.
Pour ce faire, au sein de notre package principal, la suite de notre sous package
intgrant la cration de la base, nous retrouvons un lment de type "data flow"
permettant alors de grer compltement notre flux de donnes et ainsi de vrifier
lintgrit des donnes transfres. Do lintrt des requtes cres prcdemment.

Figure 2 : Transfert des donnes de Oracle vers SQL Server
Lors de la rcupration du contenu de chaque table dans Oracle, voici le processus
enclench afin de vrifier que les donnes transfres concordent avec nos attentes :

Figure 3 : Processus de transfert des donnes

Une fois ce processus termin, et quaucune erreur nest dplorer, il est ncessaire de se
proccuper du package permettant la gestion des tables dagrgation. En effet, il est
ncessaire chaque transfert de donnes de la sorte de rgnrer le contenu de chaque
table agrge afin den mettre jour le contenu.
Transfert de
ARTICLE_COLOR_L
OOKUP
Transfert de
ARTICLE_LOOKUP
Transfert de
CALENDAR_YEAR_L
OOKUP
Transfert de
OUTLET_LOOKUP
Transfert de
SHOP_FACTS
Vrification
de
l'intgrit
des donnes
Rcupration
des donnes de
la base Oracle
Ajout des
donnes
dans la
table
Ajout des
donnes
dans la table
de rejet
13/01/2012
7
Gestion des tables dagrgat
Afin de grer comme il se doit ces table dagrgat, nous avons dcid de crer une nouvelle
fois un sous package nomm "Package 4 : Gestion des tables dagrgation". En effet, dans
les spcifications du projet, il tait ncessaire que cette fonctionnalit soit lance la fin
de lexcution de chaque package. Cest donc tout naturellement que nous avons pris le
parti de crer un sous package totalement indpendant, ne prenant en compte que la
gestion de ces tables dagrgats.
Pour ce faire, de la mme manire que pour le premier sous-package cr, nous avons
simplement insr plusieurs "SQL tasks" grant lagrgation des tables concernes.
Le processus seffectue de la sorte :

Figure 4 : Gestion des tables agrges

Ajout de donnes supplmentaires
Suite cela, afin de procder la phase de tests de nos fonctions dETL, nous avons dcid
de mettre au point deux manires diffrentes deffectuer ces tests. Dans un premier temps,
en alimentant compltement la base EMODE, en partant dune base vide sous SQL
Server.
Dans un deuxime temps, nous avons choisi dinsrer de nouvelles donnes, relatives la
semaine de janvier 2012 afin davoir une nouvelle vision des donnes et qui permettrait
galement de vrifier que nos fonctions grant lagrgation des donnes seffectue
correctement. (Cf. Annexe 2)

Automatisation de la procdure
Pour terminer concernant la partie packages SSIS, nous avons choisi dautomatiser
lexcution de ces procdures. En effet, nous avons cr diffrents SQL Server Agent Jobs
afin que ces packages soient excuts en temps voulu.


Suppression
des deux
tables
d'agrgat
Cration des
deux tables
d'agrgat
Insertion des
donnes dans
les tables
d'agrgat
13/01/2012
8
3. OPTIMISATION
a. Partitionnement

Le fait de partitionner nos deux tables de fait (ici, SHOP_FACTS et
PRODUCT_PROMOTION_FACTS) amliore nettement les performances et simplifie la
maintenance des ces tables. En effet, ces tables sont amenes lavenir augmenter
considrablement en volumtrie. De ce fait, un partitionnement devient alors ncessaire
dans le sens o de meilleures performances seront ncessaires en cas de traitement sur ces
donnes.
A savoir que la procdure de partitionnement pour ces deux tables est la mme chaque
fois.
1. Cration des storages
2. Ajout des fichiers aux storages
3. Cration de la fonction de partitionnement
4. Cration du schma de partitionnement
5. Cration de la table partitionne
Cf. Annexe 3 pour retrouver le code de partitionnement de chacune de ces tables.
b. Analysis Services
Un des points importants de ce projet ft galement la cration dun cube OLAP et de ses
dimensions sous Analysis Services.
Pour ce faire, nous avons dans un premier temps cr une nouvelle source de donnes afin
de nous connecter directement notre base SQL Server.
Dans un deuxime temps, nous avons mis en place ce que lon appelle un "Data Source
View" afin de nous connecter notre base de donnes, et qui nous permettra par la suite
de rcuprer les diffrentes informations ncessaires la cration de notre cube, des
dimensions et de ses mesures associes.
La troisime tape consistait crer le cube en lui mme. Pour linstant, celui-ci est vide et
ne contient aucune mesure ni dimensions. En effet, nous avons privilgi le fait de les
crer manuellement plutt que dutiliser lassistant.
La quatrime tape concernait la cration de nos dimensions associes notre cube. Dans
notre cas, nous avons privilgi trois dimensions principales, qui nous paraissaient les
plus videntes lors de notre tude, savoir les dimensions de temps
(CALENDAR_YEAR_LOOKUP), de gographie (OUTLET_LOOKUP) et enfin de produits
(ARTICLE_LOOKUP).

13/01/2012
9
Gographie

Figure 5 : Dimension gographie Relations entre attributs


Figure 6 : Dimension gographie Hirarchie cre
Temps

Figure 7 : Dimension temps Relations entre attributs


Figure 8 : Dimension temps Hirarchie cre

13/01/2012
10
Produit

Figure 9 : Dimension produits Relations entre attributs


Figure 10 : Dimension produits Hirarchie cre

La cinquime tape de ce projet ft la cration de nos mesures. Celles-ci ont t rcupres
au sein de la table de faits SHOP_FACTS et nous permettent ensuite de calculer les
donnes de type "Marge", "Quantit vendue" et "Montant des ventes".

13/01/2012
11
Enfin, la sixime et dernire tape de la cration de ce projet Analysis Services ft
dexplorer le cube en utilisant les diffrentes mesures et dimensions cres. Ci-aprs,
quelques images illustrant les rsultats obtenus.


Figure 11 : Architecture du cube
12
Exploration du cube dans Analysis Services

Figure 12 : Exploration du cube

13
4. REPORTING
Une des dernires tapes de la ralisation de ce projet consistait crer et explorer
diffrents rapports analysant les ventes de chaque magasin du systme EMODE. Pour ce
faire, nous utiliserons diffrentes technologies afin de varier les sources de nos rapports et
dutiliser les diffrents outils tudis au cours de cette UV.
a. Reporting Services

Nous avons donc dans ce cas cr un projet de type Reporting Services, nous ayant permis
de crer des rapports de type tableaux et graphiques.
Dans un premier temps, aprs avoir cr un nouveau projet Analysis Services, nous avons
cr plusieurs nouveaux rapports correspondant chacune des mesures que nous voulons
tudier. Nous avons ensuite ajout une source de donnes chacun de nos rapports. Cette
source de donnes nest autre quune connexion la base SQL Server.
Par la suite, il a fallu crer des "datasets". Ces lments correspondent ni plus ni moins
la slection des donnes que nous dsirons mettre en vidence au sein de nos rapports.
Dans notre cas, nous avons dcid de saisir des requtes SQL nous amenant au rsultat
dsir.
Nous avons donc pour terminer cr et implment nos rapports avec le type dlment
dsir tel des tableaux ou des graphiques.
Une fois les rapports mis en forme et termins, il nous est donc rest les publier sur le
serveur afin que ceux-ci soient accessibles directement depuis le navigateur web
ladresse suivante : http://xpsql:8080/Reports.
13/01/2012
14

Figure 13 : Reporting Services -Tableau

Figure 14 : Reporting Services - Graphique
13/01/2012
15
b. Univers BO

Nous avons utilis ici le logiciel Universe Designer afin de recrer le modle en toile
suivant :

Figure 15 : Modle en toile base EMODE


13/01/2012
16
Ce modle intgre les tables associes notre de table de faits SHOP_FACTS ainsi que
nos deux table agrges cres au sein de notre package SSIS dans la premire partie du
projet. Ces tables vont permettre par la suite damliorer considrablement les
performances en terme daffichage des donnes dans le sens o tout est plus ou moins pr-
calcul et donc le temps de chargement et de calcul sera moins long.
Dans un premier temps, nous avons d nous connecter notre base de donnes. Pour ce
faire, il nous a fallu crer une connexion entre Universe Designer et SQL Server et donc de
crer une nouvelle "datasource name" au sein de notre systme dexploitation. Par la suite,
la connexion avec la base sest effectue delle mme en utilisant "OLEDB provider for
SQL Server 2008".
Une fois connects la base, une liste des tables disponibles pour mettre en place notre
modle, nous est fournie depuis notre base de donnes. Aprs avoir slectionn les tables
dsires, il nous a suffit dorganiser tous les objets mtiers de la manire suivante :

Figure 16 : Objets mtiers relatifs lunivers BO

13/01/2012
17

Pour terminer, une dernire tape reste ncessaire afin dobtenir les meilleurs rsultats
possibles : Mettre en place la navigation agrge laide de la fonction
agregate_aware().

Exemple de la navigation agrge pour les proprits Revenu des Ventes et Pays:
@aggregate_aware(sum(AGG_YR_QT_MT_MN_WK_RG_CY_SN_SR_QT_MA.SALES_REVENUE),s
um(AGG_YR_QT_M_ST_LN_CA_SR.SALES_REVENUE),sum(SHOP_FACTS.AMOUNT_SOLD))
@aggregate_aware(AGG_YR_QT_M_ST_LN_CA_SR.STATE,OUTLET_LOOKUP.STATE)
13/01/2012
18
c. Web Intelligence
Une fois notre univers (Universe Designer) cr, et donc disponible pour Interactive
Analysis, nous tions en mesure de crer les rapports dsirs.
Pour ce faire, an guise de set de donnes, nous avons slectionn les requtes suivantes :

Figure 17 : Interactive Analysis Requte 1

Figure 18 : Interactive Analysis Requte 2
Enfin, une fois nos requtes cres, vrifies et compiles, nous tions en mesure de crer
nos rapports.

Figure 19 : Exemple de rapport Analysis Services

13/01/2012
19
d. Tableau de bord Excel
Pour terminer avec ce projet, la dernire tape consistait crer un tableau de bord sous
Excel, rcapitulatif des diffrents rapports crs.
Aprs avoir install Power Pivot pour Excel, nous nous sommes directement connects
notre cube Analysis Services pour ensuite crer un tableau crois dynamique, un
graphique exploitant les mme donnes que notre tableau ainsi que deux slicers agissant
comme filtres de donnes et de mettre jour nos tableaux et courbes au sein du document.

Figure 20 : Excel - Tableau crois dynamique


Figure 21 : Excel Graphique
13/01/2012
20
CONCLUSION

Ce projet "Business Intelligence & Data Warehouse" nous aura permis de mettre en
application les nombreuses mthodes abordes au cours de lUV BD51. Ainsi, il reprend
une bonne partie des notions vues en cours et en TP.
De plus, ce projet nous aura galement permis daborder un nouvel aspect de la notion
dadministration de base de donnes, jusque ici inconnue nos yeux, savoir la
construction de cubes et ses dimensions associes ainsi que la cration et gestion totale de
rapports danalyse.
La tche sest en revanche avre plus complexe lorsquil a fallu aborder la partie des
packages SSIS. En effet, ceci tant compltement nouveau cela nous a permis, en plus
dappliquer nos connaissances, deffectuer des recherches supplmentaires afin de mettre
en place ce systme, et donc dacqurir une certaine autonomie et rigueur en termes de
ralisation de projet.
Notre projet prsente certes quelques lacunes au niveau des fonctions dETL, mais il nous
a permis daborder des notions nouvelles en rapport avec un projet de cette envergure,
dans sons ensemble, tant dans la rflexion que dans la ralisation, avec une collaboration
des membres du projet ayant chacun un bagage technique diffrent. Cest principalement
pour ces raisons que la ralisation dun tel projet nous apporte une grande satisfaction
autant personnelle que professionnelle.
13/01/2012
21
ANNEXES
Annexe 1 : Qualit des donnes
Ci-aprs, les scripts SQL vrifiant la qualit des donnes des tables utilises tout au long
du projet. Le reste des scripts se trouve sur le CD contenant les sources du projet.
ARTICLE_COLOR_LOOKUP (PK : ARTICLE_CODE, COLOR_CODE)
--Cls primaires en double

SELECT
ACL.ARTICLE_CODE AS "Article code"
, ACL.COLOR_CODE AS "Color code"
, CONCAT(ACL.ARTICLE_CODE,ACL.COLOR_CODE) AS "Article code + Color code"
, COUNT(CONCAT(ACL.ARTICLE_CODE,ACL.COLOR_CODE)) AS "Nombre de cls primaires"
FROM
ARTICLE_COLOR_LOOKUP ACL
GROUP BY
ACL.ARTICLE_CODE
, ACL.COLOR_CODE
, CONCAT(ACL.ARTICLE_CODE,ACL.COLOR_CODE)
HAVING
COUNT(CONCAT(ACL.ARTICLE_CODE,ACL.COLOR_CODE)) > 1
ORDER BY
1 ASC;

--Cls trangres manquantes
--/

--Table de rejet des donnes invalides
CREATE TABLE ARTICLE_COLOR_LOOKUP_BIN
AS (SELECT * FROM ARTICLE_COLOR_LOOKUP WHERE 1=2);

INSERT INTO ARTICLE_COLOR_LOOKUP_BIN(
ARTICLE_CODE
, COLOR_CODE
, ARTICLE_LABEL
, COLOR_LABEL
, CATEGORY
, SALE_PRICE
, FAMILY_NAME
, FAMILY_CODE)
SELECT
ACL.ARTICLE_CODE
, ACL.COLOR_CODE
, ACL.ARTICLE_LABEL
, ACL.COLOR_LABEL
, ACL.CATEGORY
, ACL.SALE_PRICE
, ACL.FAMILY_NAME
, ACL.FAMILY_CODE
FROM
ARTICLE_COLOR_LOOKUP ACL

WHERE
CONCAT(ACL.ARTICLE_CODE,ACL.COLOR_CODE) IN(
SELECT
CONCAT(ACL2.ARTICLE_CODE,ACL2.COLOR_CODE)
FROM
ARTICLE_COLOR_LOOKUP ACL2
GROUP BY
CONCAT(ACL2.ARTICLE_CODE,ACL2.COLOR_CODE)
HAVING

COUNT(CONCAT(ACL2.ARTICLE_CODE,ACL2.COLOR_CODE))>1);

COMMIT;

13/01/2012
22
ARTICLE_LOOKUP (PK : ARTICLE_CODE)
--Cls primaires en double

SELECT
AL.ARTICLE_CODE AS "ARTICLE_CODE"
, COUNT(AL.ARTICLE_CODE) AS "Nombre de cls primaires"
FROM
ARTICLE_LOOKUP AL
GROUP BY
AL.ARTICLE_CODE
HAVING
COUNT(AL.ARTICLE_CODE) > 1
ORDER BY
1 ASC;

--Cls trangres manquantes
--/

--Table de rejet des donnes invalides
CREATE TABLE ARTICLE_LOOKUP_BIN
AS (SELECT * FROM ARTICLE_LOOKUP WHERE 1=2);

INSERT INTO ARTICLE_LOOKUP_BIN(
ARTICLE_CODE
, ARTICLE_LABEL
, CATEGORY
, SALE_PRICE
, FAMILY_NAME
, FAMILY_CODE)
SELECT
AL.ARTICLE_CODE
, AL.ARTICLE_LABEL
, AL.CATEGORY
, AL.SALE_PRICE
, AL.FAMILY_NAME
, AL.FAMILY_CODE
FROM
ARTICLE_LOOKUP AL
WHERE
AL.ARTICLE_CODE IN(
SELECT
AL2.ARTICLE_CODE
FROM
ARTICLE_LOOKUP AL2
GROUP BY
AL2.ARTICLE_CODE
HAVING
COUNT(AL2.ARTICLE_CODE)>1);
COMMIT;


13/01/2012
23
CALENDAR_YEAR_LOOKUP (PK : WEEK_KEY)
--Cls primaires en double

SELECT
CYL.WEEK_KEY AS "Week key"
, COUNT(CYL.WEEK_KEY) AS "Nombre de cls primaires"
FROM
CALENDAR_YEAR_LOOKUP CYL
GROUP BY
CYL.WEEK_KEY
HAVING
COUNT(CYL.WEEK_KEY) > 1
ORDER BY
1 ASC;

--Cls trangres manquantes
--/

--Table de rejet des donnes invalides

CREATE TABLE EMODE.CALENDAR_YEAR_LOOKUP_BIN
AS (SELECT * FROM EMODE.CALENDAR_YEAR_LOOKUP WHERE 1=2);

INSERT INTO EMODE.CALENDAR_YEAR_LOOKUP_BIN(
WEEK_KEY
, WEEK_IN_YEAR
, "YEAR"
, FISCAL_PERIOD
, YEAR_WEEK
, QUARTER
, MONTH_NAME
, "MONTH"
, HOLIDAY_FLAG)
SELECT
CYL.WEEK_KEY
, CYL.WEEK_IN_YEAR
, CYL."YEAR"
, CYL.FISCAL_PERIOD
, CYL.YEAR_WEEK
, CYL.QUARTER
, CYL.MONTH_NAME
, CYL."MONTH"
, CYL.HOLIDAY_FLAG
FROM
CALENDAR_YEAR_LOOKUP CYL
WHERE
CYL.WEEK_KEY IN(
SELECT
CYL2.WEEK_KEY
FROM
CALENDAR_YEAR_LOOKUP CYL2
GROUP BY
CYL2.WEEK_KEY
HAVING
COUNT(CYL2.WEEK_KEY )>1);
COMMIT;


13/01/2012
24
OUTLET_LOOKUP (PK : SHOP_CODE)
--Cls primaires en double

SELECT
OL.SHOP_CODE AS "Shop code"
, COUNT(OL.SHOP_CODE) AS "Nombre de cls primaires"
FROM
OUTLET_LOOKUP OL
GROUP BY
OL.SHOP_CODE
HAVING
COUNT(OL.SHOP_CODE) > 1
ORDER BY
1 ASC;

--Cls trangres manquantes
--/

--Table de rejet des donnes invalides

CREATE TABLE EMODE.OUTLET_LOOKUP_BIN
AS (SELECT * FROM EMODE.OUTLET_LOOKUP WHERE 1=2);

INSERT INTO EMODE.OUTLET_LOOKUP_BIN(
SHOP_NAME
, ADDRESS_1
, MANAGER
, DATE_OPEN
, "OPEN"
, OWNED_OUTRIGHT
, FLOOR_SPACE
, ZIP_CODE
, CITY
, "STATE"
, SHOP_CODE)
SELECT
OL.SHOP_NAME
, OL.ADDRESS_1
, OL.MANAGER
, OL.DATE_OPEN
, OL."OPEN"
, OL.OWNED_OUTRIGHT
, OL.FLOOR_SPACE
, OL.ZIP_CODE
, OL.CITY
, OL."STATE"
, OL.SHOP_CODE
FROM
OUTLET_LOOKUP OL
WHERE
OL.SHOP_CODE IN(
SELECT
OL2.SHOP_CODE
FROM
OUTLET_LOOKUP OL2
GROUP BY
OL2.SHOP_CODE
HAVING
COUNT(OL2.SHOP_CODE)>1);

COMMIT;


13/01/2012
25
SHOP_FACTS (PK : ID)
--Cls primaires en double
SELECT
SH.ID AS "ID"
, COUNT(SH.ID) AS "Nombre de cls primaires"
FROM
SHOP_FACTS SH
GROUP BY
SH.ID
HAVING
COUNT(SH.ID)>1;

--Cls trangres manquantes
--Etape 1

SELECT
SF.WEEK_KEY AS "Week_key"
,COUNT(*) AS "Nombre cls absentes"
FROM
SHOP_FACTS SF
WHERE
SF.WEEK_KEY NOT IN (
SELECT
DISTINCT CYL.WEEK_KEY
FROM
CALENDAR_YEAR_LOOKUP CYL
)
GROUP BY
SF.WEEK_KEY
ORDER BY
1 ASC;

--Etape 2

SELECT
SF.SHOP_CODE AS "Shop Code"
,COUNT(*) AS "Nombre cls trangres absentes"
FROM
SHOP_FACTS SF
WHERE
SF.SHOP_CODE NOT IN (
SELECT
DISTINCT OL.SHOP_CODE
FROM
OUTLET_LOOKUP OL
)
OR SF.SHOP_CODE NOT IN (
SELECT
DISTINCT UOLF.SHOP_CODE
FROM
UNUSED_OUTLET_LOOKUP_FULL UOLF
)
GROUP BY
SF.SHOP_CODE
ORDER BY
1 ASC;

--Etape 3

SELECT
SF.COLOR_CODE AS "Color_code"
,SF.ARTICLE_CODE AS "Article_code"
,COUNT(*) AS "Nombre cls trangres absentes"
FROM
SHOP_FACTS SF
WHERE
CONCAT(SF.COLOR_CODE,SF.ARTICLE_CODE) NOT IN (
SELECT
DISTINCT CONCAT(ACL.COLOR_CODE,ACL.ARTICLE_CODE)
FROM
ARTICLE_COLOR_LOOKUP ACL
)
13/01/2012
26
AND SF.ARTICLE_CODE NOT IN (
SELECT
DISTINCT AL.ARTICLE_CODE
FROM
ARTICLE_LOOKUP AL
)
GROUP BY
SF.COLOR_CODE
,SF.ARTICLE_CODE
ORDER BY
1 ASC;

--Table de rejet des donnes invalides

CREATE TABLE EMODE.SHOP_FACTS_BIN
AS (SELECT * FROM EMODE.SHOP_FACTS WHERE 1=2);

INSERT INTO EMODE.SHOP_FACTS_BIN(
ID
, ARTICLE_CODE
, COLOR_CODE
, WEEK_KEY
, SHOP_CODE
, MARGIN
, AMOUNT_SOLD
, QUANTITY_SOLD)
SELECT
SF.ID
, SF.ARTICLE_CODE
, SF.COLOR_CODE
, SF.WEEK_KEY
, SF.SHOP_CODE
, SF.MARGIN
, SF.AMOUNT_SOLD
, SF.QUANTITY_SOLD
FROM
SHOP_FACTS SF
WHERE
SF.ID IN(
SELECT
SF2.ID
FROM
SHOP_FACTS SF2
GROUP BY
SF2.ID
HAVING
COUNT(SF2.ID)>1)
ORDER BY
1 ASC ;

INSERT INTO EMODE.SHOP_FACTS_BIN(
ID
, ARTICLE_CODE
, COLOR_CODE
, WEEK_KEY
, SHOP_CODE
, MARGIN
, AMOUNT_SOLD
, QUANTITY_SOLD)
SELECT
SF.ID
, SF.ARTICLE_CODE
, SF.COLOR_CODE
, SF.WEEK_KEY
, SF.SHOP_CODE
, SF.MARGIN
, SF.AMOUNT_SOLD
, SF.QUANTITY_SOLD
FROM
SHOP_FACTS SF
WHERE
SF.WEEK_KEY NOT IN (
13/01/2012
27
SELECT
DISTINCT CYL.WEEK_KEY
FROM
CALENDAR_YEAR_LOOKUP CYL
)
ORDER BY
1 ASC;

INSERT INTO EMODE.SHOP_FACTS_BIN(
ID
, ARTICLE_CODE
, COLOR_CODE
, WEEK_KEY
, SHOP_CODE
, MARGIN
, AMOUNT_SOLD
, QUANTITY_SOLD)
SELECT
SF.ID
, SF.ARTICLE_CODE
, SF.COLOR_CODE
, SF.WEEK_KEY
, SF.SHOP_CODE
, SF.MARGIN
, SF.AMOUNT_SOLD
, SF.QUANTITY_SOLD
FROM
SHOP_FACTS SF
WHERE
SF.SHOP_CODE NOT IN (
SELECT
DISTINCT OL.SHOP_CODE
FROM
OUTLET_LOOKUP OL
)
AND SF.SHOP_CODE NOT IN (
SELECT
DISTINCT UOLF.SHOP_CODE
FROM
UNUSED_OUTLET_LOOKUP_FULL UOLF
)
ORDER BY
1 ASC;

INSERT INTO EMODE.SHOP_FACTS_BIN(
ID
, ARTICLE_CODE
, COLOR_CODE
, WEEK_KEY
, SHOP_CODE
, MARGIN
, AMOUNT_SOLD
, QUANTITY_SOLD)
SELECT
SF.ID
, SF.ARTICLE_CODE
, SF.COLOR_CODE
, SF.WEEK_KEY
, SF.SHOP_CODE
, SF.MARGIN
, SF.AMOUNT_SOLD
, SF.QUANTITY_SOLD
FROM
SHOP_FACTS SF
WHERE
CONCAT(SF.COLOR_CODE,SF.ARTICLE_CODE) NOT IN (
SELECT
DISTINCT CONCAT(ACL.COLOR_CODE,ACL.ARTICLE_CODE)
FROM
ARTICLE_COLOR_LOOKUP ACL
)
OR SF.ARTICLE_CODE NOT IN (
13/01/2012
28
SELECT
DISTINCT AL.ARTICLE_CODE
FROM
ARTICLE_LOOKUP AL
)
ORDER BY
1 ASC;

COMMIT;


13/01/2012
29
Annexe 2 : Ajout de nouvelles donnes

Ajout dans ARTICLE_COLOR_LOOKUP
USE EMODE
GO

INSERT INTO ARTICLE_COLOR_LOOKUP(ARTICLE_CODE, COLOR_CODE, ARTICLE_LABEL,
COLOR_LABEL, CATEGORY, SALE_PRICE, FAMILY_NAME, FAMILY_CODE)
VALUES(200000, 997, 'Jupe en toile', 'Rouge', 'dresses', 30, 'Clothes', 'X20');

INSERT INTO ARTICLE_COLOR_LOOKUP(ARTICLE_CODE, COLOR_CODE, ARTICLE_LABEL,
COLOR_LABEL, CATEGORY, SALE_PRICE, FAMILY_NAME, FAMILY_CODE)
VALUES(200001, 997, 'Jupe en laine', 'Rouge', 'dresses', 25, 'Clothes', 'X20');

INSERT INTO ARTICLE_COLOR_LOOKUP(ARTICLE_CODE, COLOR_CODE, ARTICLE_LABEL,
COLOR_LABEL, CATEGORY, SALE_PRICE, FAMILY_NAME, FAMILY_CODE)
VALUES(200002, 998, 'Pantalon en soie', 'Vert', 'pants', 90, 'Clothes', 'X30');

--Insertion en double -> Table de rejet

INSERT INTO ARTICLE_COLOR_LOOKUP(ARTICLE_CODE, COLOR_CODE, ARTICLE_LABEL,
COLOR_LABEL, CATEGORY, SALE_PRICE, FAMILY_NAME, FAMILY_CODE)
VALUES(200002, 998, 'Pantalon en soie', 'Vert', 'pants', 90, 'Clothes', 'X30');

--Cl trangre inexistante -> Table de rejet

INSERT INTO ARTICLE_COLOR_LOOKUP(ARTICLE_CODE, COLOR_CODE, ARTICLE_LABEL,
COLOR_LABEL, CATEGORY, SALE_PRICE, FAMILY_NAME, FAMILY_CODE)
VALUES(200013, 999, 'lunettes', 'bleu', 'vue', 1000, 'vue', 'G20');

COMMIT;

Ajout dans ARTICLE_LOOKUP
USE EMODE
GO

DELETE FROM ARTICLE_COLOR_LOOKUP WHERE ARTICLE_CODE IN (200000, 200001, 200002);

INSERT INTO ARTICLE_LOOKUP(ARTICLE_CODE, ARTICLE_LABEL, CATEGORY, SALE_PRICE,
FAMILY_NAME, FAMILY_CODE)
VALUES(200000, 'Jupe en toile', 'dresses', 30, 'Clothes', 'X20');

INSERT INTO ARTICLE_LOOKUP(ARTICLE_CODE, ARTICLE_LABEL, CATEGORY, SALE_PRICE,
FAMILY_NAME, FAMILY_CODE)
VALUES(200001, 'Jupe en laine', 'dresses', 25, 'Clothes', 'X20');

INSERT INTO ARTICLE_LOOKUP(ARTICLE_CODE, ARTICLE_LABEL, CATEGORY, SALE_PRICE,
FAMILY_NAME, FAMILY_CODE)
VALUES(200002, 'Pantalon en soie', 'pants', 90, 'Clothes', 'X30');

--Meme article -> table de rejet !

INSERT INTO ARTICLE_LOOKUP(ARTICLE_CODE, ARTICLE_LABEL, CATEGORY, SALE_PRICE,
FAMILY_NAME, FAMILY_CODE)
VALUES(200002, 'Pantalon en soie', 'pants', 90, 'Clothes', 'X30');

COMMIT;


13/01/2012
30
Ajout dans CALENDAR_YEAR_LOOKUP
USE EMODE
GO

INSERT INTO CALENDAR_YEAR_LOOKUP(WEEK_KEY, WEEK_IN_YEAR, "YEAR", FISCAL_PERIOD,
YEAR_WEEK, QUARTER, MONTH_NAME , "MONTH", HOLIDAY_FLAG)
VALUES(300, 5, 2012, 'FY12', '2012/05', 1, 'February', 2, 'y');

INSERT INTO CALENDAR_YEAR_LOOKUP(WEEK_KEY, WEEK_IN_YEAR, "YEAR", FISCAL_PERIOD,
YEAR_WEEK, QUARTER, MONTH_NAME , "MONTH", HOLIDAY_FLAG)
VALUES(301, 5, 2012, 'FY12', '2012/05', 1, 'February', 2, 'y');

INSERT INTO CALENDAR_YEAR_LOOKUP(WEEK_KEY, WEEK_IN_YEAR, "YEAR", FISCAL_PERIOD,
YEAR_WEEK, QUARTER, MONTH_NAME , "MONTH", HOLIDAY_FLAG)
VALUES(302, 5, 2012, 'FY12', '2012/05', 1, 'February', 2, 'y');

--Meme date -> table de rejet !

INSERT INTO CALENDAR_YEAR_LOOKUP(WEEK_KEY, WEEK_IN_YEAR, "YEAR", FISCAL_PERIOD,
YEAR_WEEK, QUARTER, MONTH_NAME , "MONTH", HOLIDAY_FLAG)
VALUES(302, 5, 2012, 'FY12', '2012/05', 1, 'February', 2, 'y');

COMMIT;

Ajout dans OUTLET_LOOKUP
USE EMODE
GO

INSERT INTO OUTLET_LOOKUP(SHOP_NAME, ADDRESS_1, MANAGER, DATE_OPEN, "OPEN",
OWNED_OUTRIGHT, FLOOR_SPACE, ZIP_CODE, CITY, "STATE", SHOP_CODE)
VALUES ('e-Fashion Belfort', 'Route de lure', 'Jeremy', '15-DEC-00', 'Y', 'N', 4160, '90000', 'Belfort', 'France',
400);

INSERT INTO OUTLET_LOOKUP(SHOP_NAME, ADDRESS_1, MANAGER, DATE_OPEN, "OPEN",
OWNED_OUTRIGHT, FLOOR_SPACE, ZIP_CODE, CITY, "STATE", SHOP_CODE)
VALUES ('e-Fashion Lure', 'Route de Belfort', 'Jeremy', '15-DEC-00', 'Y', 'N', 4160, '70100', 'Lure', 'France', 401);

INSERT INTO OUTLET_LOOKUP(SHOP_NAME, ADDRESS_1, MANAGER, DATE_OPEN, "OPEN",
OWNED_OUTRIGHT, FLOOR_SPACE, ZIP_CODE, CITY, "STATE", SHOP_CODE)
VALUES ('e-Fashion Besancon', 'Route de Luxeuil', 'Jeremy', '15-DEC-00', 'Y', 'N', 4160, '25000', 'Besancon',
'France', 402);

--Meme boutique -> table de rejet !

INSERT INTO OUTLET_LOOKUP(SHOP_NAME, ADDRESS_1, MANAGER, DATE_OPEN, "OPEN",
OWNED_OUTRIGHT, FLOOR_SPACE, ZIP_CODE, CITY, "STATE", SHOP_CODE)
VALUES ('e-Fashion Besancon', 'Route de Luxeuil', 'Jeremy', '15-DEC-00', 'Y', 'N', 4160, '25000', 'Besancon',
'France', 402);

COMMIT;


13/01/2012
31
Ajout dans SHOP_FACTS
USE EMODE
GO

INSERT INTO
SHOP_FACTS(ID,ARTICLE_CODE,COLOR_CODE,WEEK_KEY,SHOP_CODE,MARGIN,AMOUNT_SOLD,QU
ANTITY_SOLD)
VALUES(90000,200000,997,300,400,20,90,3);

--Erreur cl primaire -> Table de rejet

INSERT INTO
SHOP_FACTS(ID,ARTICLE_CODE,COLOR_CODE,WEEK_KEY,SHOP_CODE,MARGIN,AMOUNT_SOLD,QU
ANTITY_SOLD)
VALUES(90000,200000,997,300,400,20,90,3);

--Erreur cl trangre : ARTICLE_CODE -> Table de rejet

INSERT INTO
SHOP_FACTS(ID,ARTICLE_CODE,COLOR_CODE,WEEK_KEY,SHOP_CODE,MARGIN,AMOUNT_SOLD,QU
ANTITY_SOLD)
VALUES(90001,200500,997,300,400,20,90,3);

--Erreur cl trangre (COLOR_CODE) -> Table de rejet

INSERT INTO
SHOP_FACTS(ID,ARTICLE_CODE,COLOR_CODE,WEEK_KEY,SHOP_CODE,MARGIN,AMOUNT_SOLD,QU
ANTITY_SOLD)
VALUES(90002,200000,994,300,400,20,90,3);

--Erreur cl trangre : WEEK_KEY -> Table de rejet

INSERT INTO
SHOP_FACTS(ID,ARTICLE_CODE,COLOR_CODE,WEEK_KEY,SHOP_CODE,MARGIN,AMOUNT_SOLD,QU
ANTITY_SOLD)
VALUES(90003,200000,994,700,400,20,90,3);

--Erreur cl trangre : SHOP_CODE -> Table de rejet

INSERT INTO
SHOP_FACTS(ID,ARTICLE_CODE,COLOR_CODE,WEEK_KEY,SHOP_CODE,MARGIN,AMOUNT_SOLD,QU
ANTITY_SOLD)
VALUES(90004,200000,994,300,700,20,90,3);

COMMIT;


13/01/2012
32
Annexe 3 : Partitionnement des tables de fait

Partitionnement de SHOP_FACTS
-- Cration des filegroup
ALTER DATABASE EMODE ADD FILEGROUP SHOP_FACTSP1;
ALTER DATABASE EMODE ADD FILEGROUP SHOP_FACTSP2;
ALTER DATABASE EMODE ADD FILEGROUP SHOP_FACTSP3;
ALTER DATABASE EMODE ADD FILEGROUP SHOP_FACTSP4;

-- Cration des fichiers de partitionnement
ALTER DATABASE EMODE
ADD FILE
(NAME = N'SHOP_FACTS_PART1',
FILENAME = N'E:\Microsoft SQL
Serveur\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\SHOP_FACTS_PART1.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
TO FILEGROUP [SHOP_FACTSP1];

ALTER DATABASE EMODE
ADD FILE
(NAME = N'SHOP_FACTS_PART2',
FILENAME = N'E:\Microsoft SQL
Serveur\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\SHOP_FACTS_PART2.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
TO FILEGROUP [SHOP_FACTSP2];

ALTER DATABASE EMODE
ADD FILE
(NAME = N'SHOP_FACTS_PART3',
FILENAME = N'E:\Microsoft SQL
Serveur\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\SHOP_FACTS_PART3.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
TO FILEGROUP [SHOP_FACTSP3];

ALTER DATABASE EMODE
ADD FILE
(NAME = N'SHOP_FACTS_PART4',
FILENAME = N'E:\Microsoft SQL
Serveur\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\SHOP_FACTS_PART4.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
TO FILEGROUP [SHOP_FACTSP4];

-- Cration de la fonction de partitionnement
CREATE PARTITION FUNCTION SHOP_FACTS_PART (NUMERIC (4,0))
AS RANGE LEFT
FOR VALUES (100,200,300);

-- Cration du schma de partitionnement
CREATE PARTITION SCHEME SHOP_FACTS_SCHE
AS PARTITION SHOP_FACTS_PART
TO (
SHOP_FACTSP1
,SHOP_FACTSP2
,SHOP_FACTSP3
,SHOP_FACTSP4
) ;





13/01/2012
33
--************************Cration de la nouvelle table partitionne************************
-- ***********Cration d'une table temporaire contenant les donnes de shop_facts

SELECT
*
INTO
SHOP_FACTS_TEMP
FROM
SHOP_FACTS;

--Suppression de shop_facts
DROP TABLE SHOP_FACTS;

--Cration de la nouvelle table partitionne
CREATE TABLE SHOP_FACTS(
ID NUMERIC (5,0) NOT NULL
, ARTICLE_CODE NUMERIC (6,0)
, COLOR_CODE NUMERIC (4,0)
, WEEK_KEY NUMERIC (3,0)
, SHOP_CODE NUMERIC (4,0)
, MARGIN NUMERIC
, AMOUNT_SOLD NUMERIC
, QUANTITY_SOLD NUMERIC

)
ON SHOP_FACTS_SCHE (SHOP_CODE);

-- Rinsertion des donnes dans shop_facts
INSERT INTO SHOP_FACTS SELECT * FROM SHOP_FACTS_TEMP;

-- Suppression de shop_facts_temp
DROP TABLE SHOP_FACTS_TEMP;




13/01/2012
34
Partitionnement de PRODUCT_PROMOTION_FACTS
-- Cration des filegroup
ALTER DATABASE EMODE ADD FILEGROUP PROMOP1;
ALTER DATABASE EMODE ADD FILEGROUP PROMOP2;
ALTER DATABASE EMODE ADD FILEGROUP PROMOP3;
ALTER DATABASE EMODE ADD FILEGROUP PROMOP4;
ALTER DATABASE EMODE ADD FILEGROUP PROMOP5;
ALTER DATABASE EMODE ADD FILEGROUP PROMOP6;

-- Cration des fichiers de partitionnement
ALTER DATABASE EMODE
ADD FILE
(NAME = N'PROMO_PART1',
FILENAME = N'E:\Microsoft SQL
Serveur\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\PROMO_PART1.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
TO FILEGROUP [PROMOP1];

ALTER DATABASE EMODE
ADD FILE
(NAME = N'PROMO_PART2',
FILENAME = N'E:\Microsoft SQL
Serveur\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\PROMO_PART2.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
TO FILEGROUP [PROMOP2];

ALTER DATABASE EMODE
ADD FILE
(NAME = N'PROMO_PART3',
FILENAME = N'E:\Microsoft SQL
Serveur\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\PROMO_PART3.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
TO FILEGROUP [PROMOP3];

ALTER DATABASE EMODE
ADD FILE
(NAME = N'PROMO_PART4',
FILENAME = N'E:\Microsoft SQL
Serveur\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\PROMO_PART4.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
TO FILEGROUP [PROMOP4];



ALTER DATABASE EMODE
ADD FILE
(NAME = N'PROMO_PART5',
FILENAME = N'E:\Microsoft SQL
Serveur\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\PROMO_PART5.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
TO FILEGROUP [PROMOP5];

ALTER DATABASE EMODE
ADD FILE
(NAME = N'PROMO_PART6',
FILENAME = N'E:\Microsoft SQL
Serveur\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\PROMO_PART6.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
TO FILEGROUP [PROMOP6];

13/01/2012
35
-- Cration de la fonction de partitionnement
CREATE PARTITION FUNCTION PROMO_PART (NUMERIC (3,0))
AS RANGE LEFT
FOR VALUES (50, 100, 150, 200, 250);

-- Cration du schma de partitionnement
CREATE PARTITION SCHEME PROMO_SCHE
AS PARTITION PROMO_PART
TO (
PROMOP1
,PROMOP2
,PROMOP3
,PROMOP4
,PROMOP5
,PROMOP6
);

--************************Cration de la nouvelle table partitionne************************
-- ***********Cration d'une table temporaire contenant les donnes de PRODUCT_PROMOTION_FACTS
SELECT
*
FROM
PRODUCT_PROMOTION_FACTS
INTO
PRODUCT_PROMOTION_FACTS_TEMP;

--Suppression de PRODUCT_PROMOTION_FACTS
DROP TABLE PRODUCT_PROMOTION_FACTS;

--Cration de la nouvelle table partitionne
CREATE TABLE PRODUCT_PROMOTION_FACTS(
ID NUMERIC (5,0) NOT NULL
, ARTICLE_CODE NUMERIC (6,0)
, COLOR_CODE NUMERIC (4,0)
, WEEK_KEY NUMERIC (3,0)
, SHOP_CODE NUMERIC (4,0)
, MARGIN NUMERIC
, AMOUNT_SOLD NUMERIC
, QUANTITY_SOLD NUMERIC
)
ON PROMO_SCHE (WEEK_KEY);

-- Rinsertion des donnes dans PRODUCT_PROMOTION_FACTS
INSERT INTO PRODUCT_PROMOTION_FACTS SELECT * FROM PRODUCT_PROMOTION_FACTS_TEMP;

-- Suppression de shop_facts_temp
DROP TABLE PRODUCT_PROMOTION_FACTS_TEMP;