Database
 sql >> Base de données >  >> RDS >> Database

DSC Type 3

Les données dimensionnelles qui changent lentement ou de manière imprévisible sont capturées dans les analyses de dimensions à variation lente (SCD). Dans un environnement d'entrepôt de données, une table de dimension possède une clé primaire qui identifie de manière unique chaque enregistrement et d'autres éléments d'information appelés données dimensionnelles.

Toutes les méthodes de mise à jour pour les différents types de SCD peuvent être réalisées à l'aide du programme SortCL dans IRI CoSort. Dans IRI Voracity, un assistant vous aide à créer les scripts de travail SCD utilisés lors de l'exécution du programme SortCL. La plupart des variantes utilisent une jointure externe complète pour faire correspondre les enregistrements de la source de données principale d'origine avec les enregistrements de la source mise à jour en fonction de l'équivalence d'une clé de chacun. Les enregistrements avec des correspondances doivent être mis à jour dans le maître. Les enregistrements de la source de mise à jour qui n'ont pas de correspondance doivent être ajoutés au maître.

Voici un aperçu de la façon de mettre à jour un fichier dimensionnel à l'aide de SCD Type 3 où je maintiens les coûts des produits. La mise à jour s'effectue en joignant par rapport au champ ProductCode .

SCD de type 3

Avec le modèle de type 3, les données actuelles et les données historiques sont transportées dans le même enregistrement. L'une des principales choses à décider est la quantité d'historique à conserver. Avec notre exemple, je garderai un coût pour trois dates de début. Date de fin est la date à laquelle le coût dans l'enregistrement n'est plus effectif. Si le coût est toujours effectif, alors la EndDate1 sera défini sur 99991231. Ceci afin d'éviter une valeur vide dans ce champ. Voici les valeurs contenues dans la source principale de départ (master3.dat) :

ProductCode Coût1 StartDate1 DateFin1 Coût2 StartDate2 DateFin2 Coût3 DateDébut3 DateFin3
C123 125,50 20110228 99991231
F112 2365.00 20120101 99991231
G101 19.25 20110930 99991231 21.25 20110501 20110930
J245 450.50 20110430 99991231 425.25 20101001 20110430 385.25 20100215 20101001
S022 98,75 20110515 99991231

Les enregistrements de mise à jour ont tous la même StartDate. La source update.dat contient les valeurs de champ suivantes pour les enregistrements :

ProductCode Coût Date de début
F112 2425.00 20120701
J245 550,50 20120701
M447 101.75 20120701
S022 101.75 20120701

Vous trouverez ci-dessous les données mises à jour. Pour chaque enregistrement mis à jour, chaque coût, date de début et date de fin est déplacé vers la droite d'un ensemble. Dans l'ancien groupe actuel de l'enregistrement, la date de fin est remplacée par la date de début du nouvel ensemble actuel mis à jour. Toutes les valeurs de l'ancien troisième ensemble sont supprimées.

ProductCode Coût1 StartDate1 DateFin1 Coût2 StartDate2 DateFin2 Coût3 DateDébut3 DateFin3
C123 125,50 20110228 9991231
F112 2425.00 20120701 9991231 2365.00 20120101 20120701
G101 19.25 20110930 9991231 21.25 20110501 20110930
J245 550,50 20120701 9991231 450.50 20110430 20120701 425.25 20101001 20110430
M447 101.75 20120701 9991231
S022 101.75 20120701 9991231 98,75 20110515 20120701

Dans IRI Workbench, il existe un assistant Voracity pour aider à la création de scripts pour la mise à jour des fichiers et tables Dimensional. Cet assistant se trouve dans la liste déroulante Voracité de la barre de navigation. Vous choisissez d'abord le type de SCD. Ensuite, la fenêtre de sélection des fichiers utilisés pour le traitement de la mise à jour s'affiche.

Dans le tableau supérieur de l'écran suivant, vous déterminez comment les données mises à jour sont mappées au maître. Dans le groupe du milieu de l'écran, choisissez les champs qui donnent les valeurs d'état des enregistrements en cours de mise à jour.

Dans les menus déroulants sous Actuel et Ensembles de champs historiques , le premier ensemble que vous définissez, donne les noms de champ pour les valeurs actuelles. Champ de valeur est la valeur dimensionnelle qui est mise à jour. Champ de départ est le champ qui détermine quand le champ de valeur est devenu actif et Champ de fin détermine quand il n'est plus valide. Définissez ensuite autant d'ensembles que nécessaire pour le nombre de valeurs historiques conservées.

Voici le script de travail qui mettra à jour le fichier maître :

/INFILE=master3.dat
    /PROCESS=DELIMITED
    /ALIAS=master3
    /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",")
    /FIELD=(COST1, TYPE=NUMERIC, POSITION=2, SEPARATOR=",")
    /FIELD=(STARTDATE1, TYPE=ASCII, POSITION=3, SEPARATOR=",")
    /FIELD=(ENDDATE1, TYPE=ASCII, POSITION=4, SEPARATOR=",")
    /FIELD=(COST2, TYPE=NUMERIC, POSITION=5, SEPARATOR=",")
    /FIELD=(STARTDATE2, TYPE=ASCII, POSITION=6, SEPARATOR=",")
    /FIELD=(ENDDATE2, TYPE=ASCII, POSITION=7, SEPARATOR=",")
    /FIELD=(COST3, TYPE=NUMERIC, POSITION=8, SEPARATOR=",")
    /FIELD=(STARTDATE3, TYPE=ASCII, POSITION=9, SEPARATOR=",")
    /FIELD=(ENDATE3, TYPE=ASCII, POSITION=10, SEPARATOR=",")
/INFILE=update.dat
    /PROCESS=DELIMITED
    /ALIAS=update
    /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
    /FIELD=(COST, TYPE=ASCII, POSITION=2, SEPARATOR=",", FRAME='\"')
    /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')

/JOIN FULL_OUTER master3 update WHERE MASTER3.PRODUCTCODE == UPDATE.PRODUCTCODE

/OUTFILE=master3.dat
# Include only records that are to be updated
    /PROCESS=DELIMITED
    /FIELD=(UPDATE.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",")
    /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",")
    /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",")
    /FIELD=(ENDDATE1_NEW="99991231", TYPE=ASCII, POSITION=4, SEPARATOR=",")
    /FIELD=(MASTER3.COST1, TYPE=NUMERIC, POSITION=5, SEPARATOR=",")
    /FIELD=(MASTER3.STARTDATE1, TYPE=ASCII, POSITION=6, SEPARATOR=",")
    /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=7, SEPARATOR=",")
    /FIELD=(MASTER3.COST3, TYPE=NUMERIC, POSITION=8, SEPARATOR=",")
    /FIELD=(MASTER3.STARTDATE3, TYPE=ASCII, POSITION=9, SEPARATOR=",")
    /FIELD=(MASTER3.ENDATE3, TYPE=ASCII, POSITION=10, SEPARATOR=",")
    /INCLUDE WHERE MASTER3.PRODUCTCODE == UPDATE.PRODUCTCODE

/OUTFILE=master3.dat
# Include only records that are not to be updated
    /PROCESS=DELIMITED
    /FIELD=(MASTER3.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",")
    /FIELD=(MASTER3.COST1, TYPE=NUMERIC, POSITION=2, SEPARATOR=",")
    /FIELD=(MASTER3.STARTDATE1, TYPE=ASCII, POSITION=3, SEPARATOR=",")
    /FIELD=(MASTER3.ENDDATE1, TYPE=ASCII, POSITION=4, SEPARATOR=",")
    /FIELD=(MASTER3.COST2, TYPE=NUMERIC, POSITION=5, SEPARATOR=",")
    /FIELD=(MASTER3.STARTDATE2, TYPE=ASCII, POSITION=6, SEPARATOR=",")
    /FIELD=(MASTER3.ENDDATE2, TYPE=ASCII, POSITION=7, SEPARATOR=",")
    /FIELD=(MASTER3.COST3, TYPE=NUMERIC, POSITION=8, SEPARATOR=",")
    /FIELD=(MASTER3.STARTDATE3, TYPE=ASCII, POSITION=9, SEPARATOR=",")
    /FIELD=(MASTER3.ENDATE3, TYPE=ASCII, POSITION=10, SEPARATOR=",")
    /OMIT WHERE MASTER3.PRODUCTCODE == UPDATE.PRODUCTCODE
    /OMIT WHERE MASTER3.PRODUCTCODE EQ ""
/OUTFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD3/master3.dat
# Add new records
    /PROCESS=DELIMITED
    /FIELD=(UPDATE.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",")
    /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",")
    /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",")
    /FIELD=(ENDDATE1_NEW="99991231", TYPE=ASCII, POSITION=4, SEPARATOR=",")
    /INCLUDE WHERE MASTER3.PRODUCTCODE EQ "" AND UPDATE.PRODUCTCODE NE ""