Vous êtes sur la page 1sur 6

D ÉPARTEMENT DE G ÉNIE LOGICIEL ET DES TI

MTI820 - E NTREP ÔTS DE DONN ÉES ET INTELLIGENCE D ’ AFFAIRES

Travail pratique 2
Conception d’une solution ETL

1 Introduction
Dans ce second travail pratique, vous devrez développer une solution ETL à l’aide de l’outil SSIS
de Microsoft SQL Server 2016. L’objectif sera de populer une table de dimension renfermant les
informations de clients, à partir de plusieurs tables d’une base de données sources. Diverses tâches
d’extraction, de transformation et de chargement, disponibles dans SSIS, devront être utilisées pour
réaliser la solution.

2 Travail à réaliser

Tâche 1 : Réalisation du système ETL

L’objectif du système ETL à développer est de mettre à jour une table de dimension DimClient
renfermant les informations sur les clients d’AdventureWork. Cette table de dimension est simi-
laire à la table DimCustomer déjà présente dans l’entrepôt de données, et renferme les colonnes
suivantes :

1
DimClient
CustomerKey (PK)
CustomerAlternateKey
Title
FirstName
MiddleName
LastName
NameStyle
BirthDate
MaritalStatus (SCD2)
Suffix
Gender
EmailAddress
YearlyIncome (SCD2)
TotalChildren (SCD2)
NumberChildrenAtHome (SCD2)
Education (SCD2)
Occupation (SCD2)
HouseOwnerFlag (SCD2)
NumberCarsOwned (SCD2)
AddressLine1 (SCD2)
AddressLine2 (SCD2)
City (SCD2)
StateProvinceCode (SCD2)
StateProvinceName (SCD2)
CountryRegionCode (SCD2)
CountryRegionName (SCD2)
PostalCode (SCD2)
Phone
DateFirstPurchase

L’annotation (PK) correspond à la clé primaire de la table. L’annotation (SCD2) implique que
la stratégie de gestion de changement SCD2 (i.e., création d’un nouvel enregistrement) doit être
employée pour les colonnes correspondantes. On suppose la stratégie SCD1 pour toutes les autres
colonnes.
Pour mettre à jour la table de dimension DimClient, vous aurez besoins de tables suivantes de la
BD transactionnelle AdventureWorks 2014 1 :
1. Voir le schéma en annexe.

2
TABLES :
Person.Address
Person.AddressType
Person.BusinessEntity
Person.BusinessEntityAddress
Person.BusinessEntityContact
Person.ContactType
Person.CountryRegion
Person.EmailAddress
Person.Person
Person.PersonPhone
Person.PhoneNumberType
Person.StateProvince

VUES :
Person.vAdditionalContactInfo
Person.vStateProvinceCountryRegion
Sales.vPersonDemographics

Certaines vues peuvent également être utiles, notamment la vue Sales.vPersonDemographics qui
permet de reconstruire l’information démographique d’un client à partir de son fichier XML.
En utilisant l’outil SSIS de Microsoft SQL Server 2016, vous devrez créer une solution Integration
Services respectant les consignes suivantes :
1. La solution doit pouvoir extraire l’information requise des tables mentionnées ci-dessus,
appliquer les transformations nécessaires, et charger le résultat dans la table de dimension ;
2. Les changements dimensionnels doivent être gérés selon la stratégie spécifiée. La transfor-
mation Slowly Changement Dimensions du Data Flow Toolbox peut être employée pour
cette étape ;
3. Une opération de type Lookup avec sur la colonne CustomerAlternateKey doit être utilisée
pour déterminer si un client est déjà dans la table dimension. Si cette opération échoue,
un Fuzzy Lookup doit être employé sur les colonnes FirstName et LastName du client. Un
client est considéré comme équivalent si la sortie de cette dernière opération est telle que
Similarity > 0.85 et Conf idence > 0.8 ;
4. Toute erreur survenant au niveau du Data Flow doit être redirigée dans un fichier “er-
reur.log”. Cela peut être fait à l’aide de la fonctionnalité Logging de SSIS ou, alternative-
ment, en redirigeant les flots d’erreur dans le fichier (l’option Logging est à privilégier).
Notes :
• L’extraction peut être simplifiée à l’aide d’une Source OLE DB construite à l’aide d’une
requête (i.e., SELECT) sur les tables de la base de données OLTP ;
• Pour éviter les conversions de type, supposez que les types des colonnes de DimClient sont
les mêmes que ceux des colonnes sources (i.e., utilisez les types de la source de données) ;
• Un client peut avoir plusieurs CustomerKey vu l’ajout de nouveaux enregistrements par la
stratégie SCD2 ;

3
• Pour le CustomerAlternateKey, vous pouvez utiliser soit la colonne Person.BusinessEntity
ou la colonne Custmer.AccountNumber (table Customer de la BD OLTP). Cette colonne
sera utilisée pour identifier un client de manière unique, suite aux modifications engendrées
la stratégie SCD2 ;
• Les colonnes Similarity et Confidence sont ajoutées à la sortie du Fuzzy Lookup. Une
transformation de type Conditional Split peut être utilisée pour gérer le flot d’exécution
selon la valeur de ces colonnes.
Le flux de données à réaliser peut être représenté à l’aide du diagramme suivant :

Table
OLTP 1
Table
OLTP 2 ... Table
OLTP N

Source
OLE DB

pas trouvé Lookup trouvé


client

Fuzzy trouvé
lookup SCD
client

pas trouvé Destination


OLE DB

Table
DimClient

Tâche 2 : Rapport

Pour la deuxième tâche, vous devrez synthétiser le travail sous la forme d’un rapport contenant les
éléments suivants :
1. Une présentation de la solution à l’aide de captures d’écran, montrant les Control Flow et
Data Flow créés ;
2. Une description plus détaillée des diverses transformations utilisées : SQL Task, Slowly

4
Changing Dimensions, Conditional Split, Lookup, etc. Les choix de conception devront
être justifiés.
3. Une présentation des résultats, démontrant le fonctionnement de la solution. À titre d’exemple,
vous pouvez montrer le résultat du chargement, le contenu du fichier d’erreur, etc.

3 Barème de correction
L’évaluation du laboratoire sera faite sur un total de 100 points, distribués comme suit :

COMPOSANTE POINTS
Qualité de la solution et respect des consignes 10
Présentation de la solution 10
Présentation des résultats 10
Clarté et structure du rapport 5
Qualité du français Pénalité jusqu’à 10 pts
TOTAL 35

4 Consignes de remise et politique de retard


Les rapports doivent être remis électroniquement sous la forme d’un fichier PDF, Word, ou Ope-
nOffice, à l’adresse mti820@gmail.com, avant le début de la 11ème séance de cours (21
mars 2016, 18h). Votre courriel doit avoir les caractéristiques suivantes :
— Le titre du message doit être : MTI820 : TP X - Remise équipe Y ;
— Il n’est pas requis d’avoir un corps du message ;
— Fichier attaché : mti820-tpX-equipeY.

Tout travail remis en retard sera pénalisé selon la politique suivante :


— Retard de moins de 24 heures : perte de 10 % ;
— Retard de plus de 24 heures, mais moins de 48 heures : perte de 20 % ;
— Retard de plus de 48 heures, mais moins de 72 heures : perte de 30 % ;
— Retard de plus de 72 heures : perte de 100 %.

Note 1 : L’usage de la langue doit être adéquat : une qualité du français jugée insuffisante peut
entraı̂ner une pénalité allant jusqu’à 15 % des points.
Note 2 : Vous avez avantage à rendre vos travaux à l’avance, même si incomplets. Vous pouvez
remettre chaque travail plusieurs fois, la dernière copie reçue avant l’échéance sera celle conservée
pour la correction.
Note 3 : tous les travaux seront contrôlés pour le plagiat. La remise électronique facilite cette tâche.
Si vous avez des questions sur ce qui est considéré du plagiat dans ce cours, vous pouvez consulter
le Règlement des études aux cycles supérieurs.

5
Annexe
AdventureWorks 2008 Sales
SalesPerson
OLTP Schema Rev 10.00.0009
PK,FK1 BusinessEntityID
CurrencyRate
Currency
PK CurrencyRateID
SalesOrderHeader
Best Print Results if: FK2 TerritoryID PK CurrencyCode
SalesPersonQuotaHistory SalesQuota PK,FK5 BusinessEntityID U1 CurrencyRateDate
11X17 paper Samples and Sample Databases at SpecialOffer
PK,FK1 BusinessEntityID Bonus PK SalesOrderID FK1,U1 FromCurrencyCode U1 Name
Landscape http://CodePlex.com/SqlServerSamples PK QuotaDate CommissionPct FK2,U1 ToCurrencyCode ModifiedDate PK SpecialOfferID
SalesYTD FK7 ShipMethodID AverageRate
Fit to 1 sheet SalesLastYear EndOfDayRate Description
SalesQuota RevisionNumber
U1 rowguid U1 rowguid OrderDate ModifiedDate DiscountPct
ModifiedDate ModifiedDate DueDate Type
dbo SalesTerritoryHistory

PK,FK1 BusinessEntityID
ShipDate
Status
SalesReason
Category
StartDate
ErrorLog EndDate
DatabaseLog PK,FK2 TerritoryID OnlineOrderFlag PK SalesReasonID
PK StartDate SalesTerritory U2 SalesOrderNumber SalesOrderHeaderSalesReason MinQty
PK ErrorLogID
PK DatabaseLogID PurchaseOrderNumber Name MaxQty
PK TerritoryID PK,FK1 BusinessEntityID
ErrorTime EndDate AccountNumber ReasonType U1 rowguid
PostTime U1 rowguid FK6 TerritoryID PK,FK1 SalesOrderID ModifiedDate ModifiedDate
AWBuildVersion UserName U1 Name
DatabaseUser ModifiedDate FK1 BillToAddressID PK,FK2 SalesReasonID
ErrorNumber CountryRegionCode
PK SystemInformationID ErrorSeverity Event FK2 ShipToAddressID
Group ModifiedDate
ErrorState Schema FK8 CreditCardID
SalesYTD
Database Version ErrorProcedure Object CreditCardApprovalCode
SalesLastYear SalesOrderDetail
VersionDate ErrorLine TSQL FK4 CurrencyRateID
CostYTD
ModifiedDate ErrorMessage XmlEvent SubTotal
CostLastYear PK,FK1 BusinessEntityID
Customer TaxAmt PK,FK1 SalesOrderID
U2 rowguid SpecialOfferProduct
Store Freight PK SalesOrderDetailID
ModifiedDate
PK CustomerID TotalDue PK,FK2 SpecialOfferID
PK,FK1,FK2 BusinessEntityID Comment CarrierTrackingNumber PK,FK1 ProductID
FK2 PersonID U1 rowguid
HumanResources Name
Demographics
FK3
FK1
StoreID
TerritoryID
ModifiedDate
SalesTaxRate ShoppingCartItem FK2
OrderQty
ProductID U1 rowguid
FK2 SpecialOfferID ModifiedDate
U1 rowguid U1 AccountNumber CreditCard
PK SalesTaxRateID PK ShoppingCartItemID UnitPrice
ModifiedDate U2 rowguid
PK CreditCardID UnitPriceDiscount
Department ModifiedDate PersonCreditCard ShoppingCartID
FK1,U2 StateProvinceID LineTotal
PK DepartmentID PK,FK2 BusinessEntityID CardType U2 TaxType Quantity U1 rowguid
EmployeeDepartmentHistory PK,FK1 CreditCardID U1 CardNumber TaxRate FK1 ProductID ModifiedDate
U1 Name ExpMonth Name DateCreated
PK,FK2 BusinessEntityID ExpYear U1 rowguid ModifiedDate
GroupName ModifiedDate
PK,FK1 DepartmentID ModifiedDate ModifiedDate
ModifiedDate
PK StartDate
PK,FK3 ShiftID

EndDate
ModifiedDate
Person Production
ProductModelIllustration
Password Illustration
Employee PK,FK2 ProductModelID
PK,FK1 BusinessEntityID Address PK,FK1 IllustrationID
ProductListPriceHistory ProductPhoto PK IllustrationID
PK,FK1 BusinessEntityID PK AddressID
PasswordHash PK,FK1 ProductID PK ProductPhotoID ModifiedDate Diagram
Shift U2 NationalIDNumber PasswordSalt U2 AddressLine1 PK StartDate ModifiedDate
U1 LoginID U2 AddressLine2 ProductReview ThumbNailPhoto
PK ShiftID ShiftID EndDate
U2 City ThumbnailPhotoFileName
JobTitle PK ProductReviewID ListPrice
FK1,U2 StateProvinceID LargePhoto
U1 Name BirthDate ModifiedDate ProductProductPhoto
U2 PostalCode LargePhotoFileName
U2 StartTime MaritalStatus FK1 ProductID
Person SpatialLocation ModifiedDate PK,FK1 ProductID
U2 EndTime Gender ReviewerName
U1 rowguid PK,FK2 ProductPhotoID
ModifiedDate HireDate PK,FK1 BusinessEntityID ReviewDate
ModifiedDate
SalariedFlag EmallAddress EmailAddress
Rating Primary
VacationHours PersonType PK,FK1 BusinessEntityID ProductModel
Comments ModifiedDate
SickLeaveHours NameStyle PK EmailAddressID
JobCandidate CurrentFlag Title ModifiedDate Product PK ProductModelID
ProductModelProductDescriptionCulture
U3 rowguid FirstName EmailAddress PK ProductID
PK,FK1 BusinessEntityID StateProvince U1 Name
ModifiedDate MiddleName PK,FK3 ProductModelID
PK JobCandidateID CatalogDescription
LastName PK StateProvinceID U1 Name PK,FK2 ProductDescriptionID
Suffix Instructions PK,FK1 CultureID
Resume U2 ProductNumber
EmailPromotion U2 rowguid
ModifiedDate U3 StateProvinceCode MakeFlag
AdditionalContactInfo PersonPhone ModifiedDate ModifiedDate
FK1,U3 CountryRegionCode FinishedGoodsFlag
Demographics IsOnlyStateProvinceFlag BillOfMaterials Color ProductSubcategory
PK,FK1 BusinessEntityID
U1 rowguid U1 Name SafetyStockLevel
PK PhoneNumber PK ProductSubcategoryID ProductCategory
ModifiedDate FK2 TerritoryID PK BillOfMaterialsID ReorderPoint
PK,FK2 PhoneNumberTypeID
EmployeePayHistory U2 rowguid StandardCost PK ProductCategoryID
FK1,U1 ProductAssemblyID FK1 ProductCategoryID
ModifiedDate ListPrice U1 Name
PK,FK1 BusinessEntityID FK2,U1 ComponentID Size U2 rowguid U1 Name ProductDescription
PK RateChangeDate U1 StartDate
BusinessEntityContact FK3 SizeUnitMeasureCode ModifiedDate U2 rowguid Culture
EndDate FK4 WeightUnitMeasureCode PK ProductDescriptionID
Rate ModifiedDate
PK,FK3 BusinessEntityID PhoneNumberType FK3 UnitMeasureCode Weight PK CultureID
PayFrequency BOMLevel Description
PK,FK1 PersonID DaysToManufacture
ModifiedDate PK PhoneNumberTypeID PerAssemblyQty U1 rowguid
ProductLine U1 Name
FK2 ContactTypeID ModifiedDate Class ModifiedDate ModifiedDate
ProductDocument
ModifiedDate Name
Style
FK2 ProductSubcategoryID ProductCostHistory PK,FK2 ProductID
FK1 ProductModelID PK,FK1 DocumentNode
TransactionHistory PK,FK1 ProductID
SellStartDate
PK StartDate ModifiedDate
AddressType PK TransactionID SellEndDate
ContactType CountryRegion DiscontinuedDate
EndDate
PK AddressTypeID FK1 ProductID U3 rowguid
PK ContactTypeID PK CountryRegionCode StandardCost
ReferenceOrderID ModifiedDate
ModifiedDate
U1 Name TransactionDate
U1 Name U1 Name
U2 rowguid BusinessEntityAddress TransactionType
BusinessEntity ModifiedDate ModifiedDate
ModifiedDate Quantity
PK,FK3 AddressID Document
PK BusinessEntityID ActualCost
PK,FK2 BusinessEntityID WorkOrderRouting TransactionHistoryArchive
ModifiedDate PK DocumentNode
Schemas rowguid
ModifiedDate FK1 AddressTypeID
ModifiedDate
ReferenceOrderLineID
PK,FK2
ProductInventory

ProductID
PK,FK2
PK
WorkOrderID
ProductID
DocumentLevel
PK TransactionID
PK,FK1 LocationID Title ProductID
PK OperationSequence
FK1 Owner ReferenceOrderID
Shelf
Sales Bin
FK1 LocationID
ScheduledStartDate
U1
FolderFlag
FileName
TransactionDate
TransactionType
Quantity FileExtension
Purchasing Vendor
UnitMeasure rowguid
ModifiedDate
ScheduledEndDate
ActualStartDate
U1 Revision
ChangeNumber
Quantity
ActualCost
PK,FK1 BusinessEntityID ActualEndDate ModifiedDate
Purchasing U1 AccountNumber
PK UnitMeasureCode
ActualResourceHrs
Status
DocumentSummary
ReferenceOrderLineID
PlannedCost
U1 Name Document
Name ActualCost
ShipMethod ModifiedDate rowguid
CreditRating Location ModifiedDate
PreferredVendorStatus ModifiedDate
Person PK
PurchaseOrderHeader

PurchaseOrderID
ActiveFlag PK ShipMethodID PK LocationID
PurchasingWebServiceURL
ModifiedDate U1 Name U1 Name
FK1 ShipMethodID ShipBase CostRate
FK4 VendorID ShipRate
Production PurchaseOrderDetail
RevisionNumber U2 rowguid
ModifiedDate
ProductVendor
Availability
ModifiedDate
Status WorkOrder
OrderDate PK,FK3 BusinessEntityID
PK,FK2 PurchaseOrderID
ShipDate PK,FK1 ProductID PK WorkOrderID
PK PurchaseOrderDetailID
HumanResources DueDate
SubTotal
TaxAmt AverageLeadTime FK1 ProductID
Freight StandardPrice OrderQty
OrderQty
TotalDue LastReceiptCost StockedQty
FK1 ProductID
ModifiedDate LastReceiptDate ScrappedQty
UnitPrice
dbo LineTotal
MinOrderQty
MaxOrderQty
ScrapReason StartDate
EndDate
ReceivedQty PK ScrapReasonID
OnOrderQty DueDate
RejectedQty
FK2 UnitMeasureCode FK2 ScrapReasonID
StockedQty U1 Name
ModifiedDate ModifiedDate
ModifiedDate ModifiedDate

Vous aimerez peut-être aussi