BI experience

Création d’une Dimension temps

| 5 Commentaires

Dans un projet décisionnel, la dimension temps est toujours nécessaire. Dans mon projet actuel, nous avons fait le choix d’avoir 3 dimensions temps :

  • la première ne répertorie que des années
  • la seconde des années et des mois
  • la troisième va jusqu’au jour

Ces 3 dimensions sont utilisées dans des datamarts différents qui n’ont pas forcement la même granularité de temps.

Dans cet article je voulais juste vous montrer comment nous avons construit la troisième dimension temps puisque tous les développeurs BI seront amenés à en construire une :

construction_dim_temps

Comme vous pouvez le voir nous avons un tLoop qui va nous permettre d’incrémenter l’année au fur et à mesure. Voici ce qu’il y a dans le composant d’input de type PostgresInput :

 »
SELECT

/** »+((Integer)globalMap.get(« tLoop_1_CURRENT_ITERATION »))+ » représente le 1 à ajouter à chaque itération provenant du tLoop**/
« +((Integer)globalMap.get(« tLoop_1_CURRENT_ITERATION »))+ » + 1,

/**utilisation de la fonction (date interval 1 day) afin d’ajouter 1 jour en plus à l’année ***/
(date \’1900-01-01\’ + interval \’ »  +((Integer)globalMap.get(« tLoop_1_CURRENT_ITERATION »))+   » day\’),

/**utilisation de la fonction date_part (‘day’, date) afin de récupérer le jour de la date ***/
date_part(\’day\’,(date \’1900-01-01\’ + interval \’ »+((Integer)globalMap.get(« tLoop_1_CURRENT_ITERATION »))+ » day\’)),

/**utilisation de la fonction date_part (‘month’, date) afin de récupérer le mois de la date ***/
date_part(\’month\’,(date \’1900-01-01\’ + interval \’ »+((Integer)globalMap.get(« tLoop_1_CURRENT_ITERATION »))+ » day\’)),

/**utilisation de la fonction date_part (‘year’, date) afin de récupérer l’année de la date ***/
date_part(\’year\’,(date \’1900-01-01\’ + interval \’ »+((Integer)globalMap.get(« tLoop_1_CURRENT_ITERATION »))+ » day\’))
 »

Ainsi il ne restera donc plus qu’à insérer dans notre dimension temps :

  • la date
  • l’année
  • le mois
  • le jour

Et vous, comment avez-vous géré vos dimensions temps ?

5 Commentaires

  1. Le temps étant une notion d’Etat donc par définition, non quantifiable, je classe mes données sans avoir besoin de l’intégrer. Les classement vont être multidimensionels selon l’auteur, le thème, l’importance, la taille, …mais pas de date ou de notion de temps.
    Cordialement

  2. Le mieux serait je pense d’utiliser la même logique de tLoop, mais couplée a un tfixed flow input.
    Sur 300 ans: 365*300 = 109500
    Tu utilises ensuite les fonction Talend de date pour ajouter le nombre i de jours a une date de référence comme 1900-01-01
    Comme cela tu es indépendant de ta base, et cela sera beaucoup plus rapide. Tu pourras égalemet afficher le trimestre, numéro de semaine etc.

    Sinon pour ton job, penses a utiliser une connexion sur le composant MysqlInput, sinon tu vas créer une connexion a chaque itération

  3. Merci Boubsy pour tes conseils, je teste ça dès que possible…

  4. Vous pourrez d’ailleurs aller voir sur le forum Talend sur ce topic : http://www.talendforge.org/forum/viewtopic.php?id=7626

  5. Bonjour,

    Voici un lien pour ceux qui aiment jouer avec le Java. On peut créer facilement une dimension temps en faisant recours à des routines Java :)

    http://www.labdecisionnel.com/Forum/47-Talend/7963-chargement-de-la-table-de-dimension-Temps.html

    Bon courage

Laisser un commentaire

Champs Requis *.

*