Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
chadliagabsi
Creator II
Creator II

Optimisation des intervalles de dates

Bonjour,

je veux transformer le premier tableau au deuxième. C'est à dire si temps_travail et  du deuxième ligne = temps_travail et motif du 3eme ligne alors je les mets dans une seule ligne avec debut_occupation = min(debut_occupat) et fin_occupation.

Merci.

test.png

12 Replies
kevinchevrier
Partner - Creator III
Partner - Creator III

Il faut passer par un tableau simple.

Clic droit / Nouvelle objet de feuille / Zone table.

Ça t'enlèvera tous les doublons.

chadliagabsi
Creator II
Creator II
Author

Il y a pas des doublons, je dois rajouter une condition pour chaque matricule.  les motifs changent d'une période à autre si par exemple un agent a refait un contrat CDD et travaille toujours temps_t=100 alors dans la base il aura deux lignes une pour son premier cdd et autre pour son deuxième. Tant qu'il n'a pas changé son motif et temps travail je ne  veux pas qu'il aura deux lignes je veux avoir une seule ligne qui contient :

MOTIF     TEMPS_TRAVAIL     DEBUT_ OCCUPATION                              FIN OCCUPATION

CDD           100                           date debut occup de la 1ere ligne              date fin occupation de la deuxième ligne

kevinchevrier
Partner - Creator III
Partner - Creator III

avec un tableau croisé dynamique dans ce cas, ça gère les regroupements.

chadliagabsi
Creator II
Creator II
Author

Je pense que ma question n'est plus claire. Je n'ai pas besoin d'un affichage. Ce que je demande comment peut on fusionner deux lignes et calculer mon expression une seule fois tant que les dates sont successives.

voila exemple :

test.png

Donc pour Renouvellement TP Valeur de début occ : 01/12/2013 et fin occ 02/05/2015.

kevinchevrier
Partner - Creator III
Partner - Creator III

OK, j'y étais pas du tout

tu peux avoir plus de 2 lignes successives ?

chadliagabsi
Creator II
Creator II
Author

oui justement.

chadliagabsi
Creator II
Creator II
Author

Je dois aussi jouer sur le facteur  année mois et jour parce que parfois tu trouves des lignes qui répondent aux conditions (meme motif, même temps travail) mais les jours mois et  années de début_occ ne sont ni égaux ni successifs.

Par exemple

Matricule agent           Motif                                 Debut_occ

518                          Renouvelement CDI            12/12/2005                      13/08/2006

518                          Renouvelement CDI            12/08/2007                      13/08/2008

Il faut  pas prendre l'année ou la période qui n’était pas en poste.


kevinchevrier
Partner - Creator III
Partner - Creator III

Dans un premier, je pense qu'il faut que tu identifies les renouvellements dans ton script avec un nouveau champ.

Je vais pas avoir le temps de t'expliquer plus ce soir. Je pense qu'il faut que tu créés 2 tables temporaires pour calculer les dates de fin d'occupation précédente et date de début d'occupation suivante. Voici un exemple simplifié :

// CALCUL DE LA DATE DE FIN D'OCCUPATION PRECEDENTE

DATE_FIN_OCCUPATION_PRECEDENTE :

NoConcatenate

LOAD *,

previous(DATE_FIN_OCC) as DATE_FIN_OCCUPATION

RESIDENT TA_TABLE

order by MATRICULE asc, DATE_DEBUT_OCC asc ;

// CALCUL DE LA DATE DE DEBUT D'OCCUPATION SUIVANTE

DATE_DEBUT_OCCUPATION_SUIVANTE:

NoConcatenate

LOAD

*,

previous(DATE_DEBUT_OCC) as DAT_DEB_OCCUPATION_SUIVANTE,

previous(MATRICULE) as MATRICULE_SUIVANT

RESIDENT TA_TABLE

order by MATRICULE desc, DATE_DEBUT_OCC desc ;



Ensuite je ferais un left join de ces 2 tables en un seule. Je droperais ces 2 tables pour ne conserver que la nouvelle table.


A partir de cette table je calculerais avec des IF() pour voir si il y a une succession d'occupation selon le motif. Si oui alors je mets une valeur à 0. Sinon 1.


Ensuite je ferais en sorte de ne garder que les dates que je veux par rapport à ce nouveau champ.


Il y a peut-être plus simple que cette méthode...


Je ne sais pas si l'intervalmatch pourrait t'aider dans ton cas...

Anonymous
Not applicable

try like this :

Not tested

source:

LOAD *,MATRIX&MOTIF as unique iNLINE

[

MATRIX,MOTIF,DEBUT_OCCUPATION ,FIN_OCCUPATION,TEMPS_TRAV

00876,partiel,03/05/2007,30/11/2007

00876,partiel,03/05/2007,30/11/2008

];

output:

load MATRIX,MOTIF,DEBUT_OCCUPATION,TEMPS_TRAV,if(Previous(unique)=unique,Previous(FIN_OCCUPATION)=FIN_OCCUPATION) as NEWFIN_OCCUPATION


resident source;

drop table source;