Qlik Community

Groupe des Utilisateurs Francophones

Announcements
QlikWorld 2022, LIVE in Denver CO., May 16-19, 2022. REGISTER NOW TO RECEIVE EARLY BIRD PRICING
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Gestion ou création d'un calendrier

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

1 Solution

Accepted Solutions
almamy_diaby
Creator
Creator

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;

View solution in original post

7 Replies
almamy_diaby
Creator
Creator

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;

View solution in original post

Not applicable
Author

Merci beaucoup pour cette réponse très précise.

Je vais l'exploiter.

Not applicable
Author

C'est encore moi.

Le principe reste le même pour des dates provenant de tables différentes?

Merci.

almamy_diaby
Creator
Creator

oui, c'est toujours le même principe

Not applicable
Author

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.

almamy_diaby
Creator
Creator

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.

Not applicable
Author

Merci pour votre aide