Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
J'ai un problème car ce qui ressort de notre SIH est une ligne par arrêt. Il n'y a pas de regroupement entre les arrêts et les prolongation.
Je voudrai avoir la prolongation lié à l'arrêt initial afin de comptabiliser le nombre d'arrêts de travail. Ou du moins je voudrai identifier d'un coté les arrêts et de l'autre les prolongations.
J'ai les champs ci dessous :
je vous mets un exemple de ce qui me ressort :
Nom ABSDEF ABSDRET ABSNBJ
AAA 05/02/2015 06/02/2015 1
AAA 15/06/2015 02/07/2015 17
AAA 02/07/2015 12/07/2015 10
AAA 12/07/2015 23/07/2015 11
A partir de la je voudrai déterminer arrêt initial (première et deuxième ligne) et prolongation (ligne 3 et 4 en lien avec l'arrêt initial de la ligne 2).
J'ai utilisé cette formule dans le script :
Base:
LOAD
@cle_CAL,
Date as Date_RH,
Année as Année_RH,
Mois as Mois_RH,
CODE_UF as UF_RH,
LIBELLE_UF as Libellé_UF,
SERVICE as Service,
DEPARTEMENT as Département,
POLE as Pôle,
@cle_AFF,
GRADREG,
GRADE,
STATUT,
ABS,
MATRI,
DATEVT,
QUAND,
DFIbis,
NBJPER,
ENTDEF,
SORTDEF,
ECHELON,
TPSDEF,
TPSMOTIF,
TPSDFI,
AFFDEF,
ABSDEF,
ABSNBJ,
ABSNBJPER,
ABSDRET,
NOM,
PRENOM,
ID_AGENT,
[Motif d'absence],
LIBSTAT,
CORPSNEH,
GRADENEH,
EMPLOINEH,
FONCTNEH,
LIBELLE,
SIGNA,
PourcentageAffectation,
AFFTYP,
DateFinAffectation,
AFFNUIT,
ETPJourTravaillé,
ETPJourPayé,
BUDGET
FROM
[..\ENTREPOT\REFERENTIELS\BaseGRH.qvd]
(qvd);
arrets:
load ABSDRET,
ABSDEF,
if(previous(ABSDRET)=ABSDEF,'prolon','initial') as PROLONGATION //Previous()recherche la valeur de l'expression expr en utilisant les données de l'enregistrement d'entrée précédent
FROM
[..\ENTREPOT\REFERENTIELS\BaseGRH.qvd]
(qvd);
mais pour certains arrêts il me double les ligne (une en arrêt initial et l'autre en prolongation)
Help svp
Merci
Bonjour
As tu essayer avec d'autres formules pour voir si tu as le même comportement ?
Par exemple : en soustrayant les dates entre elles. Si = 0 alors prolongation sinon initial
if(previous(ABSDRET) - ABSDEF = 0,'prolon','initial') as PROLONGATION //Previous()recherche la valeur de l'expression expr en utilisant les données de l'enregistrement d'entrée précédent
FROM
[..\ENTREPOT\REFERENTIELS\BaseGRH.qvd]
(qvd);
Ou alors un problème de reconnaissance de format date ?
arrets:
load ABSDRET,
ABSDEF,
if(previous(date(ABSDRET,'DD/MM/YY')) =date(ABSDEF,'DD/MM/YY') ,'prolon','initial') as PROLONGATION //Previous()recherche la valeur de l'expression expr en utilisant les données de l'enregistrement d'entrée précédent
FROM
[..\ENTREPOT\REFERENTIELS\BaseGRH.qvd]
(qvd);
Bonjour Bruno
Aucune de tes deux formules ne changent le résultat, j'ai exactement le même résultat
Merci
Bien cordialement
Bonjour Romaric,
Je pense qu'il faut faire un chargement ordonné par "Nom" pour avoir les date dans l'ordre et par "Nom".
de là on peut utiliser la fonction previous()...
du genre :
Matable:
Nom ABSDEF ABSDRET ABSNBJ
AAA 05/02/2015 06/02/2015 1
AAA 15/06/2015 02/07/2015 17
AAA 02/07/2015 12/07/2015 10
AAA 12/07/2015 23/07/2015 11
from MA_BDD....
Load
*,
if(peek('Nom')=Nom,peek('NUM_Nom')+1,1) as NUM_Nom, ////Compteur agent
If(previous(Nom)=Nom,ABSDEF-previous(ABSDRET),0) as Intervalle ////Délai entre ABSDRET et ABSDEF suivant
Resident Matable
order by Nom, ABSDEF , ABSDRET
;
DROP TABLE Matable
; //// Supression de la table contenant le Nom initial/// Ne plus l'utiliser
Du coup, si Intervalle = 0 alors =prolongation, sinon nouvel arrêt.
A tester car je l'ai adapté d'un Qvw qui me sert à obtenir un délai de réhospitalisation...
Bon Courage
Florent.