Temporalité DWH Partie 1 : Le défi

Au cours des dernières années, j'ai été confronté à la demande de créer un reporting avec des dimensions SCD type 2.

Temporalité DWH Partie 1 : Le défi

Au cours des dernières années, j’ai été confronté à la demande de créer un reporting avec des dimensions SCD type 2. Mais comme il y a généralement 3 lignes de temps ou plus dans le data warehouse, j’ai dû clarifier encore et encore quelle était l’exigence métier réelle. Ici, j’essaie de mettre de l’ordre dans mes réflexions et de vous donner un guide pour de telles discussions.

L’article est divisé en trois parties : - Définition des différentes timelines - Création de rapports faciles à utiliser en réduisant les timelines incluses dans la sortie DWH - Quels cas d’usage rendent nécessaire la sortie des différentes timelines

Dans un monde simple, il n’y a que ce ici et maintenant : le présent. Si je veux enregistrer le développement dans le temps, j’ai besoin d’une timeline.

Qu’est-ce qu’une dimension temporelle (timeline) ? Qu’est-ce qu’une tranche de temps ? Qu’est-ce que SCD Type 2 ? Quelle est la relation avec as-is, as-was, as-of ?

Dans un monde simple, il n’y a que ce ici et maintenant. Donc le présent. Si je veux enregistrer le développement dans le temps, j’ai besoin d’une timeline.

Diagramme de timeline : une seule dimension temporelle avec des entrées séquentielles représentant un historique continu

Je peux transformer une timeline en un point dans le temps en la coupant à n’importe quel endroit.

Timeline avec une coupe point-in-time unique : dérivation d’une vue as-of d’une dimension temporelle

Mais si je vais maintenant corriger ma timeline, je peux entrer les heures de changement à nouveau sur une timeline séparée.

Deux timelines parallèles : entrées originales sur un axe, corrections enregistrées sur un axe temporel séparé

Si j’enregistre ces deux barres de temps à un angle de 90 degrés l’une par rapport à l’autre, j’obtiens une surface temporelle.

Diagramme de surface temporelle : deux timelines arrangées à 90 degrés formant un plan temporel bidimensionnel

Je peux réduire cette surface temporelle à tout moment à une barre de temps si je coupe ma surface temporelle à n’importe quel point parallèlement à l’une ou l’autre des barres.

Coupe transversale de surface temporelle : couper le plan 2D temporel parallèlement à un axe pour produire une timeline

Je peux donc réduire une surface temporelle à une timeline et celle-ci à nouveau à un point dans le temps.

Coupe point-in-time de timeline : réduction d’une timeline à un seul moment — la vue as-of

Ces coupes sont appelées vues as-of. Il y a une coupe spéciale, à savoir celle au moment actuellement valide (qui n’est pas toujours la fin d’une timeline) : as-is. Et une autre coupe spéciale qui représente la combinaison d’informations au moment d’un événement : as-was.

Timeline avec deux coupes : as-is (actuellement valide) et as-was (état lors d’un événement passé) vues point-in-time

Dans cet exemple simplifié, je peux choisir la validité métier comme timeline et le moment où cette information a été enregistrée dans un système IT comme deuxième timeline. Nous avons ainsi une surface temporelle.

Dans le data warehousing, cependant, une troisième barre de temps est ajoutée dans chaque cas : quand le data warehouse a-t-il appris des informations nouvelles ou modifiées. Si vous dessinez maintenant cette troisième timeline perpendiculairement à la surface temporelle existante, vous obtenez un cube. C’est la raison pour laquelle j’aime parler de dimensions temporelles.

Pour éviter les différents problèmes avec les différentes terminologies, j’aime l’approche selon laquelle les différentes timelines, si elles peuvent être comprises comme des dimensions arrangées dans un cube, sont adressées avec des numéros de dimension.

  • 1d : quand une entrée était valide d’un point de vue métier. Selon Snodgrass cité par Kaul « capturer l’histoire d’une réalité changeante » : Valid Time.

  • 2d : Capture Time / System Time / Logged Time / Inscription Time / Approximation pour Assertion Time dans le système IT source.

  • 3d : Acquisition Time / System Time / Logged Time / Load Time / Inscription Time / Approximation pour Assertion Time dans le système DWH.

Tranche de temps

Une tranche de temps est une section sur une timeline dans laquelle les attributs pour un objet spécifique et identifiable ne changent pas. Une tranche de temps peut être explicitement décrite avec une date de début et de fin, ou implicitement une tranche de temps peut être considérée comme terminée par définition dès qu’une nouvelle commence.

Diagramme de timeline : les axes 2D et 3D utilisent des dates de fin implicites — une nouvelle entrée ferme automatiquement la précédente

Avec les timelines 2d et 3d, en revanche, on suppose que le moment d’une nouvelle entrée signifie automatiquement la fin de la précédente.

Timeline continue : les nouvelles entrées de chargement DWH terminent implicitement la tranche de temps précédente sans stocker de date de fin explicite

Mes favoris personnels : 1d : Valid Time 2d : Inscription Time 3d : Load Time

Le point est que nous n’avons pas du tout besoin de nous mettre d’accord sur les noms, dès que tout le monde sait quelle timeline signifie quoi.

Maintenant, que signifie SCD Type 2 ?

SCD type 2 est une procédure pour documenter une nouvelle timeline à partir d’informations reçues à différents moments.

Pattern SCD Type 2 : DWH load time (axe 3D) utilisé pour ouvrir et fermer des tranches de temps sur la timeline d’assertion

Habituellement, le terme est utilisé comme synonyme de la création de la timeline 3d dans le data warehouse. Le moment de chargement dans le DWH est généralement utilisé pour démarrer une nouvelle tranche de temps. Implicitement, le moment de chargement du jeu de données suivant pour la même clé est utilisé pour terminer la période d’assertion de l’entrée précédente.

Le problème est qu’il y a des implémentations de data warehouse et aussi des modélisateurs qui ne se demandent même pas : quelle timeline représentons-nous ici ? Cette timeline est-elle même appropriée pour répondre aux exigences de notre reporting ? Avons-nous même besoin de cette timeline pour nos évaluations ? Les changements enregistrés sont-ils seulement des corrections ou enregistrons-nous vraiment des changements dans le monde réel ?

De mon point de vue personnel, ce manque d’analyse des exigences métier conduit à des implémentations mal pensées dans lesquelles toutes les dimensions sont sorties sous forme SCD Type 2 dans tous les rapports.

Dans la suite de cette série, j’essaierai d’expliquer que dans certains cas, ce n’est pas seulement superflu mais peut aussi être faux dans certains cas. En même temps, je voudrais offrir des solutions alternatives sur la façon de gérer le temps dans le Data Vault (et le Data Warehouse) en général.