Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
Parfait, mais "utile"
Merci
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 ?
Merci
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)
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...
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(DENTSJL) as 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(DAEFGIR) as DateDebut,
DAFIGIR as DateFin
Resident GIR;
LINK_DMT:
LOAD
CLELINK_DMT,
CLEDMT_tmp as CLEDMT,
DayStart(DATESE) as 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;
Merci Sébastien,
sans ton aide je n'aurai pas trouvé cette solution.
Florent