Modélisation dimensionnelle 8
Imprimer ce billetGestion de ressources humaines.
Les questions que l’on peut se poser concernant les employés d’une entreprise peuvent être très complexes. Pour pouvoir y répondre, il faut construire une table de faits au grain de la transaction employé. Cette table peut ne pas avoir de faits (i.e. pas de valeur numérique).
La dimension Date et Heure est supposée suffisamment fine pour qu’une ligne de transaction soit identifiée par ses dimensions (employé, type de transaction, date, heure).
Suite à une transaction employé, son profil change et le changement doit être répercuté dans la dimension Employé. Comme chaque ligne de transaction ajoutera une ligne dans la dimension, il est plus judicieux de mettre les transactions dans la dimension et d’oublier la table de faits.
Pour chaque ligne, il faut indiquer une date de fin de transaction qui permet de connaître facilement la période de validité d’un profil. Il faut éviter de mettre null, il vaut mieux mettre une date dans le futur pour la dernière transaction et une colonne supplémentaire avec un indicateur de validité actuelle permettant de trouver immédiatement le profil actuel.
Pour les dimensions à évolution lentes de type 2, il est conseillé d’horodater la prise d’effet et l’expiration et d’avoir un indicateur de « ligne courante ».
La table de faits sera un instantané périodique mensuel dans lequel on peut cumuler le nombre de jours de congés acquis, utilisés, le nombre de promotions…
A cette table de faits, on peut ajouter une dimension Audit qui nous dira pour chaque ligne la provenance des données, la confiance dans les données. Cette dimension contient en fait des méta-données.
Pour grouper les employés selon leur compétence, on peut utiliser une table de dimension déportée stockant des mots-clés représentant leur compétence.
Pour les employés à compétence multiple, le langage SQL ne permet pas simplement de gérer des contraintes sur plusieurs lignes. Il faut donc utiliser UNION et INTERSECTION. UNION permet d’avoir les employés ayant l’une OU l’autre des compétences. INTERSECTION donne ceux qui ont l’une ET l’autre des compétences.
Une autre façon d’obtenir ce résultat est de définir une seule ligne pour chaque groupe de compétences avec une colonne contenant une liste des mots-clés concaténés séparés par \. Le SQL serait alors simplement
SELECT … WHERE liste_aptitudes LIKE ‘%unix%’
| OR |
| AND | liste_aptitudes LIKE ‘%linux%’
La recherche avec % en début de chaîne étant coûteuse, il faut éviter cette méthode sur de trop grandes tables.
Un questionnaire d’enquête a une table de faits contenant les réponses pour chaque (dimension) « date d’envoi du questionnaire », « date de réception du questionnaire », employé évalué, employé répondant au questionnaire, type de réponse.
Source : Ralph Kimball et Margy Ross, « Entrepôts de données, guide pratique de modélisation dimensionnelle« , 2ième édition.