lundi 4 novembre 2013

Conseil 43: Traiter les valeurs nulles dans le modèle dimensionnel

La plupart des bases de données relationnelles utilisent la valeur Null pour représenter une absence de données. Cette valeur peut perturber les développeurs d'entrepôts de données et les utilisateurs parce que la base de données traite les valeurs nulles différemment des valeurs à blanc ou des zéros, même si elles ressemblent à des blancs ou des zéros. Ce conseil explore trois exemples où nous trouvons des valeurs nulles dans notre source de données et faisons des recommandations sur la manière de faire face à chaque situation.

Valeur Null comme clé étrangère d'une table de faits
Nous rencontrons cette situation potentielle dans la source de données pour plusieurs raisons: soit la valeur de la clé étrangère n'est pas connue au moment de l'extraction, ou bien elle n'est pas applicable à la source de la mesure, ou encore elle est manquante dans la source de l'extraction. Evidemment, l'intégrité référentielle est violée si nous mettons une valeur nulle dans une colonne de la table de faits déclarée comme une clé étrangère vers une dimension, parce que dans une base de données relationnelle, Null n'est pas égal à lui même.

Dans le premier cas, spécialement avec une table de faits de type instantané cumulé, nous trouvons parfois des colonnes qui suivent les événements qui n'ont pas encore eu lieu. Par exemple, pour les commandes, une entreprise peut recevoir une commande le 31, mais ne pas livrer avant le mois suivant. La table de faits, le champ Date_de_Livraison ne sera pas connu au moment où l'enregistrement aura été créé. Dans ce cas, Date_de_Livraison est une clé étrangère pointant vers la dimension Date, mais n'y sera pas jointe comme l'utilisateur l'attend si nous laissons la valeur à Null. Par conséquent, tout rapport croisant la date et la Date_de_Livraison exclura toutes les commandes avec une date de livraison à Null. Beaucoup d'utilisateurs s'énervent lorsque des données disparaissent, nous vous recommandons donc d'utiliser une clé de substitution, qui pointe vers un enregistrement spécial dans la dimension Date ayant une description du type "Donnée pas encore disponible".

Pareillement, il y a des cas où la clé étrangère est simplement pas applicable à la mesure, comme une promotion, qui est une clé étrangère dans la table de faits, mais tous les faits n'ont pas forcément une promotion associée. Encore, nous utilisons un enregistrement spécial dans la dimension avec une valeur "Pas de promotion".

Dans le cas où la clé étrangère est manquante à la source alors qu'elle ne le devrait pas, vous avez quelques options. Vous pouvez l'assigner à un enregistrement spécial dans la dimension appropriée avec une description claire comme "Clé manquante", ou bien assigner un enregistrement spécifique comme "Clé manquante pour le code source 1234", ou encore écrire l'enregistrement dans un fichier temporaire. Dans tous les cas, vous aurez à corriger l'enregistrement en question.

Valeur Null en tant que fait
Dans ce cas, la valeur nulle à deux sens possibles. Soit la valeur n'existe pas, ou nos systèmes ont échoués à la capturer. Soit, nous laissons généralement la valeur à Null parce que la plupart des bases de données traitent les valeurs nulles correctement dans les fonctions agrégées du type SUM, MAX, MIN, COUNT, AVG... Remplacer la valeur nulle par un zéro risque de fausser ces calculs agrégés.

Valeur Null comme attribut de dimension
Nous rencontrons généralement des attributs de dimension nuls à cause du timing ou réglage de la dimension. Par exemple, peut être que tous les attributs n'ont pas été encore capturés, du coup nous avec des attributs inconnus durant la période. De même, il peut y avoir certains attributs qui ne s'appliquent qu'a un sous ensemble des membres de la dimension. Dans ces cas là, la même recommandation s'applique. Mettre la valeur nulle dans ces champs peut être perturbant pour l'utilisateur, puisque cela va apparaître comme un blanc sur les rapports, et demande une syntaxe de requête spéciale pour les trouver. A la place, nous recommandons de les remplacer par une description appropriée, par exemple "Inconnu" ou "Non fournis".


Source originale: www.kimballgroup.com
Article original "Kimball Design Tip #43: Dealing with nulls in the dimensional model", publié le 6 février 2003.

Aucun commentaire:

Enregistrer un commentaire