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 :
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 ?
14 mars 2010 à 23 h 08 min
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
15 mars 2010 à 20 h 55 min
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
16 mars 2010 à 8 h 59 min
Merci Boubsy pour tes conseils, je teste ça dès que possible…
25 mai 2010 à 16 h 01 min
Vous pourrez d’ailleurs aller voir sur le forum Talend sur ce topic : http://www.talendforge.org/forum/viewtopic.php?id=7626
12 mai 2011 à 9 h 58 min
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