Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Dans une table, j'ai plusieurs champs date sur lequel j'aimerais faire mes analyses sur 4 années.
J’ai donc les champs suivants :
MaDate1, MaDate2, MaDate3.
Pour chacun des champs, il faudra effectuer des analyses à l’année, au trimestre et au mois.
Au final, je me retrouve avec :
month(MonthEnd(MaDate1)) as MaDate1_Mois,
if((left((Right((QuarterEnd(MaDate1)),7)),2))= '03','Q1',
if((left((Right((QuarterEnd(MaDate1)),7)),2))= '06','Q2',
if((left((Right((QuarterEnd(MaDate1)),7)),2))= '09','Q3',
if((left((Right((QuarterEnd(MaDate1)),7)),2))= '12','Q4')))) as MaDate1_Trimestre,
right((YearEnd(MaDate1)),4) as MaDate1_Annee,
month(MonthEnd(MaDate2)) as MaDate2_Mois,
if((left((Right((QuarterEnd(MaDate2)),7)),2))= '03','Q1',
if((left((Right((QuarterEnd(MaDate2)),7)),2))= '06','Q2',
if((left((Right((QuarterEnd(MaDate2)),7)),2))= '09','Q3',
if((left((Right((QuarterEnd(MaDate2)),7)),2))= '12','Q4')))) as MaDate2_Trimestre,
right((YearEnd(MaDate2)),4) as MaDate2_Annee,
month(MonthEnd(MaDate3)) as MaDate3_Mois,
if((left((Right((QuarterEnd(MaDate3)),7)),2))= '03','Q1',
if((left((Right((QuarterEnd(MaDate3)),7)),2))= '06','Q2',
if((left((Right((QuarterEnd(MaDate3)),7)),2))= '09','Q3',
if((left((Right((QuarterEnd(MaDate3)),7)),2))= '12','Q4')))) as MaDate3_Trimestre,
right((YearEnd(MaDate3)),4) as MaDate3_Annee,
Au final, je voudrais avoir trois listes de sélection qui prendraient en compte mes trois dates
Une liste avec les années
Une liste avec les trimestres
Une liste avec les mois
Merci pour votre aide.
Willy
Bonjour,
Pour question de Lisibilité du code on préfère créer une Table Calendrier à part. Regarde le code suivant,ça devrait t'aider.
Table1:
load
date(trim(date1),'DD/MM/YYYY') as DATE,
champ2,
....
ChampN
From tablesource1;
Table2:
load
date(trim(date2),'DD/MM/YYYY') as DATE,
champ2,
....
ChampN
From tablesource2;
Table3:
load
date(trim(date3),'DD/MM/YYYY') as DATE,
champ2,
....
ChampN
From tableSource3;
// *************** CALENDRIER*******************************************
DATES_TEMP:
LOAD distinct date(trim(DATE),'DD/MM/YYYY') as DATE
RESIDENT tableSource1 WHERE (len(DATE)>0);
LOAD distinct date(trim(DATE),'DD/MM/YYYY') as DATE
RESIDENT tableSource2 WHERE (len(DATE)>0);
LOAD distinct date(trim(DATE),'DD/MM/YYYY') as DATE
RESIDENT tableSource3 WHERE (len(DATE)>0);
NoConcatenate
DATES:
Load distinct date(DATE) as QUERY_DATE
RESIDENT DATES_TEMP
ORDER BY KEY_DATE ASC;
drop table DATES_TEMP;
LET varMinDate = round(Num(Peek('QUERY_DATE', 0,'DATES')));
LET varMaxDate = round(Num(Peek('QUERY_DATE', -1,'DATES')));
TEMPCALENDRIER:
LOAD $(varMinDate) + rowno() - 1 AS Num,
date($(varMinDate) + rowno() - 1) AS TempDate
AUTOGENERATE $(varMaxDate) - $(varMinDate) + 1;
CALENDRIER:
LOAD distinct trim(date(TempDate)) AS DATE,
Week(TempDate) AS SEMAINE,
Year(TempDate) AS ANNEE,
Month(TempDate) AS MOIS,
Day(TempDate) AS JOUR,
Weekday(TempDate) AS JOUR_SEMAINE,
'T' & ceil(month(TempDate) / 3) AS TRIMESTRE,
MonthName(TempDate) AS MOIS_ANNEE,
Week(TempDate)&'-'&Year(TempDate) AS SEMAINE_ANNEE
RESIDENT TEMPCALENDRIER ORDER BY TempDate ASC;
Bonjour,
Pour question de Lisibilité du code on préfère créer une Table Calendrier à part. Regarde le code suivant,ça devrait t'aider.
Table1:
load
date(trim(date1),'DD/MM/YYYY') as DATE,
champ2,
....
ChampN
From tablesource1;
Table2:
load
date(trim(date2),'DD/MM/YYYY') as DATE,
champ2,
....
ChampN
From tablesource2;
Table3:
load
date(trim(date3),'DD/MM/YYYY') as DATE,
champ2,
....
ChampN
From tableSource3;
// *************** CALENDRIER*******************************************
DATES_TEMP:
LOAD distinct date(trim(DATE),'DD/MM/YYYY') as DATE
RESIDENT tableSource1 WHERE (len(DATE)>0);
LOAD distinct date(trim(DATE),'DD/MM/YYYY') as DATE
RESIDENT tableSource2 WHERE (len(DATE)>0);
LOAD distinct date(trim(DATE),'DD/MM/YYYY') as DATE
RESIDENT tableSource3 WHERE (len(DATE)>0);
NoConcatenate
DATES:
Load distinct date(DATE) as QUERY_DATE
RESIDENT DATES_TEMP
ORDER BY KEY_DATE ASC;
drop table DATES_TEMP;
LET varMinDate = round(Num(Peek('QUERY_DATE', 0,'DATES')));
LET varMaxDate = round(Num(Peek('QUERY_DATE', -1,'DATES')));
TEMPCALENDRIER:
LOAD $(varMinDate) + rowno() - 1 AS Num,
date($(varMinDate) + rowno() - 1) AS TempDate
AUTOGENERATE $(varMaxDate) - $(varMinDate) + 1;
CALENDRIER:
LOAD distinct trim(date(TempDate)) AS DATE,
Week(TempDate) AS SEMAINE,
Year(TempDate) AS ANNEE,
Month(TempDate) AS MOIS,
Day(TempDate) AS JOUR,
Weekday(TempDate) AS JOUR_SEMAINE,
'T' & ceil(month(TempDate) / 3) AS TRIMESTRE,
MonthName(TempDate) AS MOIS_ANNEE,
Week(TempDate)&'-'&Year(TempDate) AS SEMAINE_ANNEE
RESIDENT TEMPCALENDRIER ORDER BY TempDate ASC;
Merci beaucoup pour cette réponse très précise.
Je vais l'exploiter.
C'est encore moi.
Le principe reste le même pour des dates provenant de tables différentes?
Merci.
oui, c'est toujours le même principe
Merci pour ces réponses.
J'ai encore des interrogations à ce sujet.
Le champs 'KEY_DATE', d'ou vient-il? Correspond-il plutot à QUERY_DATE?
Autres question : Comment cette table va pouvoir discuter avec mes tables initiales?
Pour reprendre le début de votre exemple, j'ai:
Table1:
load
date1
date2
champ2,
....
ChampN
From tablesource1;
Table2:
load
date3
date4
champ2,
....
ChampN
From tablesource2;
Merci.
Dans une table ,il peut y avoir plusieurs dates. Mais toutes les dates ne sont pas des dates de référence. La date de référence est celle selon laquelle l'analyse va se faire. Alors cette date doit être relier à la date du calendrier. Tu peux lui donner un autre nom. Sache que c'est pour mettre en association les dates de reférence des différentes tables avec celle du calendrier.
La date du calendrier étant la table de référence et celle que doit prendre au niveau de ton axe d'analyse temporel.
Lorsqu'on fait une sélection au niveau de l'axe d'analyse, alors tout ce qui est en rapport avec cette selection réagit et se met à jour pour cette sélection ( Technologie associative ) . De ce fait, quand tu sélectionne une date au niveau du calendrier , c'est comme si tu avais sélectionné la même date dans tes différentes tables chargées.
Merci pour votre aide