Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
flochi75
Creator III
Creator III

intevalmatch successifs

bonjour à toutes et à tous,

j'ai un problème de calendrier que je vais tenter de vous exposer clairement.

je veux calculer un nb de journées de présence, sur des dossiers sur plusieurs années.

j'ai donc construit un calendrier maitre, avec un interval match sur les dates de mouvements du dossier :

CAL_CHAMBRES_BASE:

load IterNo() + num('01/01/2008')-1 as CAL_DATE ,

  month(IterNo() + num('01/01/2008')-1) as CAL_MOIS,

  Year(IterNo() + num('01/01/2008')-1)as CAL_ANNEE,

  day(IterNo() + num('01/01/2008')-1) as CAL_JOURS

  AutoGenerate (1)

while 

  IterNo() + num('01/01/2008')-1 <= num(Today());

REF_CHAMBRE:

SQL SELECT

...

NUMEDOS,

NUMEDOS as CLEGIR,

    NUMEDOS as CLEDMT,

DENTSJL,

DSORSJL,

...

FROM

  SIL.NCV_PRS:

CAL_CHAMBRES:

NoConcatenate LOAD * Resident CAL_CHAMBRES_BASE;

IntervalMatch (CAL_DATE) load DENTSJL, DSORSJL Resident REF_CHAMBRE ;

ensuite, j'ai aussi d'autre dates dans 2 autres tables concernant une évolution de type de PeC et d'une évolution de Tarifs

ces dates sont toutes différentes et ne sont pas liées entre elle :

GIR:

SQL SELECT CODEGIR,

    DAEFGIR,

    DAFIGIR,

       NUHOGIR as CLEGIR

  

FROM MAL.GIR;

DMT:

SQL SELECT COTASE,

    DATESE,

    DATSSE,

        NUHOSE as CLEDMT

FROM MAL.SEJ;

y a t'il possibilité de lier tous ces intervalles au calendrier, pour pouvoir compter sur une année donnée, le nb de journées de présence par type de PEc et par tarif ?

merci pour votre aide.

Florent

25 Replies
sfatoux72
Partner - Specialist
Partner - Specialist

Parfait, mais "utile"

Merci

flochi75
Creator III
Creator III
Author

bonjour Sébastien,

je reviens vers toi car j'ai des résultats bizarres :

j'ai voulu étendre l'appli (que je te joins également) sur d'autres unités, et j'ai des dossiers "exclus" à tort.

peux tu m'éclairer ?

Capture.JPG

Merci

sfatoux72
Partner - Specialist
Partner - Specialist

Bonjour Florent,

J'ai trouvé la raison et la solution.

Pour ton bien 😉 , je vais te laisser réfléchir un peu sur la raison en te donnant 2 indices avant de te donner la solution

Indice 1 : le problème est lié à l'utilisation de l'IntervalMatch

Indice 2 : regarde les date d'entrée (DENTSJL) et de sortie (DSORSJL)

flochi75
Creator III
Creator III
Author

Je n'en attendais pas moins de toi

j'imagine parce que c'est la même date, même si ce n'est pas la même heure...

mais je ne sais pas comment résoudre ce pb.. tu rajoutes une condition en script du genre

if(DATE(DSORSJL)=DATE(DENTSJL), DATE(DSORSJL)+1, DATE(DSORSJL)) as DSORSJLCORR ???

je voulais faire tout en 1 seule appli, les longs séjours sur plusieurs années, qui ne posent pas de pb, et les courts-séjours, et c'est sur ceux de 0 jour qu'il y a pb...

sfatoux72
Partner - Specialist
Partner - Specialist

Il y a en fait un problème sur tous les séjours (sauf exception), mais c'est flagrant sur ceux d'une seul journée.

IntervalMatch permet de lier des dates de référence (Calendrier) avec des intervalles (DateDébut et DateFin).

Les dates de référence n'ont pas d'heure, il faut donc considérer le 01/01/2016 comme 01/01/2016 00:00:00.

Dans ton exemple on a l'intervalle suivante 01/01/2016 01:51:00 et 01/01/2016 11:36:00. On a donc aucune date de référence qui tombe dans cette intervalle. Et c'est le cas pour la 1ère journée de chaque séjour (sauf ceux qui sont arrivé à minuit 00:00:00).

La solution consiste simplement à ramener DateDébut de l'intervalle au début de la journée dans les tables de LINK_... .

On aura alors ça:

//*********************************************************
//* Création des tables LINK_...
//*********************************************************
LINK_REF:
LOAD
CLELINK_REF,
CLEDOS_tmp  as CLEDOS,
DayStart(DENTSJLas DateDebut,
(
DSORSJL-0.000001)  as DateFin  //==> ATTENTION les date de début sont identique au date de fin de l'intervalle précédente
Resident REF_CHAMBRE;

LINK_GIR:
LOAD
CLELINK_GIR,
CLEGIR_tmp  as CLEGIR,
DayStart(DAEFGIRas DateDebut,
DAFIGIR  as DateFin
Resident GIR;

LINK_DMT:
LOAD
CLELINK_DMT,
CLEDMT_tmp  as CLEDMT,
DayStart(DATESEas DateDebut,
(
DATSSE-0.000001)  as DateFin  //==> ATTENTION les date de début sont identique au date de fin de l'intervalle précédente
Resident DMT;

DROP Fields CLEGIR_tmp, CLEDMT_tmp, CLEDOS_tmp;

flochi75
Creator III
Creator III
Author

Merci Sébastien,

sans ton aide je n'aurai pas trouvé cette solution.

Florent