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: 
lmasson43
Contributor III
Contributor III

Calcul du nombre de salariés

Bonjour à tous,

J'ai un fichier Excel avec (pour faire simple) le nom des salariés, la date d'entrée et la date de sortie pour chaque salarié.

Je souhaite dans qlikview calculer:

- L'ancienneté: si pas de date de Sortie alors date du jour-Date entrée sinon Date Sortie-Date entrée

- Le nombre de salarié (en fonction de l'année sélectionné)

Mais je bloque et je ne sais pas comment créer ces deux indicateurs (set analysis, if statement)...

Merci de votre aide.

Loic MASSON

11 Replies
lcloatre
Partner - Creator III
Partner - Creator III

Bonjour Loïc,

Il faut que tu aies, au minimum, la situation de chaque salarié le dernier jour du mois.

Il faudra donc que tu utilises ton calendrier et, via la fonction IntervalMatch, tu "dupliques" les contrats de chaque salarié.

Ainsi une expression du type =count([MATRICULE DU SALARIE]) te donnera le nombre de salarié.

Pour le calcul de l'ancienneté, tu peux le faire dans ton chargement de données en faisant la différence avec la date de sortie ou celle du jour et la date d'entrée dans la société.

lmasson43
Contributor III
Contributor III
Author

Bonjour Laurent,

Merci pour ta réponse, pour le moment, j'ai le script suivant et je ne vois comment je peux arriver à mes fins...

SET ThousandSep=' ';

SET DecimalSep=',';

SET MoneyThousandSep=' ';

SET MoneyDecimalSep=',';

SET MoneyFormat='# ##0,00 €;-# ##0,00 €';

SET TimeFormat='h:mm:ss TT';

SET DateFormat='DD/MM/YYYY';

SET TimestampFormat='DD/MM/YYYY h:mm:ss[.fff] TT';

//SET MonthNames='Jan;Fev;Mar;Avr;Mai;Juin;Juil;Aout;Sep;Oct;Nov;Dec';

SET MonthNames='07-Jan;08-Fev;09-Mar;10-Avr;11-Mai;12-Juin;01-Juil;02-Aout;03-Sep;04-Oct;05-Nov;06-Dec';

SET DayNames='Lun;Mar;Mer;Jeu;Ven;Sam;Dim';

PERIODE_FISCALE:

LOAD * INLINE [

    MIN, MAX, PERIODE

    

    01/01/2011, 31/12/2011, 2011

    01/01/2012, 31/12/2012, 2012

    01/01/2013, 31/12/2013, 2013

    01/01/2014, 31/12/2014, 2014

    01/01/2015, 31/12/2015, 2015

    01/01/2016, 31/12/2016, 2016

    01/01/2017, 31/12/2017, 2017];

   

CALENDRIER:

LOAD 

   Date($(vDateMin)+RecNo()) as Date,

   //Year($(vDateMin)+RecNo()) as [Fiscal Year],

   month($(vDateMin)+RecNo()) as [Mois_fiscal],

   num(Month($(vDateMin)+RecNo()))-3 as FiscalMonthNum,

   Day($(vDateMin)+RecNo()) as [Jour],

   'T'&ceil(month($(vDateMin)+RecNo())/3) as [Trimestre], // ceil = arrondi à l'entier supérieur. Pour calculer le trimestre, on divise le numéro de mois par 3 puis on arrondi à l'entier supérieur. T entre guillemets simple pour rajouter le T devant le n° de trimestre.

   Week(Date($(vDateMin)+RecNo()))-1 as Semaine,

   WeekDay($(vDateMin)+RecNo()) as [Jour semaine],

   Date($(vDateMin)+RecNo()) as Period1

   AUTOGENERATE($(vNbJours));

LEFT Join

IntervalMatch(Date)

LOAD

MIN,

MAX

Resident PERIODE_FISCALE;

JOIN

LOAD *

Resident PERIODE_FISCALE;

DROP TABLE PERIODE_FISCALE;

FAITS:

LOAD

    SITE,

    NOM,

    //PRENOM,

    SEXE,

    "Date de naissance",

    Nationalité,

    "Type contrat",

    "Date d'entrée",

    "Date de sortie",

    today() as "Date",

    if("Date de sortie"='',Age(Today(),"Date d'entrée"),Age("Date de sortie","Date d'entrée")) as Ancienneté,

    "Salaire base 2017",

    "Salaire base 2016",

    Coefficient,

    "Temps travail",

    Syndicat,

    Encadrement,

    'DEMOGRAPHIE' as TYPE_FAITS,

    ID_RH

FROM [lib://BDD/Tableau de données salariés.xlsx]

(ooxml, embedded labels, table is [Données salariés]);

exit script;

lcloatre
Partner - Creator III
Partner - Creator III

Tu as besoin de connaître uniquement le nombre de salariés en fin d'année ? pas à chaque fin de mois ?

Tu n'as pas d'erreur à l’exécution de ton script ? je pense notamment au calcul de l'Ancienneté.

lcloatre
Partner - Creator III
Partner - Creator III

Peux-tu partager ton fichier Tableau de données salariés.xlsx en enlevant les données des champs NOM, PRENOM et Date de naissance pour la confidentialité ?

lmasson43
Contributor III
Contributor III
Author

Non je n'ai pas d'erreur mais ci je prends en compte ma table calendrier mon résultat déconne. J'aimerai si possible l'avoir en fin de mois et fin d'année...

lcloatre
Partner - Creator III
Partner - Creator III

Je te conseille la lecture de ce tuto pour créer ton calendrier :

Calendrier QlikView

lmasson43
Contributor III
Contributor III
Author

https://we.tl/J2UY86K0SD

Désolé impossible de t'envoyer mon fichier en pj (juste une image ou une video). C'est un wetransfer du coup!

lcloatre
Partner - Creator III
Partner - Creator III

Loïc,

Il ne te reste plus qu'à faire ton graphique en prenant l'Année en dimension et count(distinct ID_RH) en expression.

SET ThousandSep=' ';

SET DecimalSep=',';

SET MoneyThousandSep=' ';

SET MoneyDecimalSep=',';

SET MoneyFormat='# ##0,00 €;-# ##0,00 €';

SET TimeFormat='h:mm:ss TT';

SET DateFormat='DD/MM/YYYY';

SET TimestampFormat='DD/MM/YYYY h:mm:ss[.fff] TT';

//SET MonthNames='Jan;Fev;Mar;Avr;Mai;Juin;Juil;Aout;Sep;Oct;Nov;Dec';

SET MonthNames='07-Jan;08-Fev;09-Mar;10-Avr;11-Mai;12-Juin;01-Juil;02-Aout;03-Sep;04-Oct;05-Nov;06-Dec';

SET DayNames='Lun;Mar;Mer;Jeu;Ven;Sam;Dim';

/*

PERIODE_FISCALE:

LOAD * INLINE [

    MIN, MAX, PERIODE

   

    01/01/2011, 31/12/2011, 2011

    01/01/2012, 31/12/2012, 2012

    01/01/2013, 31/12/2013, 2013

    01/01/2014, 31/12/2014, 2014

    01/01/2015, 31/12/2015, 2015

    01/01/2016, 31/12/2016, 2016

    01/01/2017, 31/12/2017, 2017];

  

CALENDRIER:

LOAD

   Date($(vDateMin)+RecNo()) as Date,

   //Year($(vDateMin)+RecNo()) as [Fiscal Year],

   month($(vDateMin)+RecNo()) as [Mois_fiscal],

   num(Month($(vDateMin)+RecNo()))-3 as FiscalMonthNum,

   Day($(vDateMin)+RecNo()) as [Jour],

   'T'&ceil(month($(vDateMin)+RecNo())/3) as [Trimestre], // ceil = arrondi à l'entier supérieur. Pour calculer le trimestre, on divise le numéro de mois par 3 puis on arrondi à l'entier supérieur. T entre guillemets simple pour rajouter le T devant le n° de trimestre.

   Week(Date($(vDateMin)+RecNo()))-1 as Semaine,

   WeekDay($(vDateMin)+RecNo()) as [Jour semaine],

   Date($(vDateMin)+RecNo()) as Period1

   AUTOGENERATE($(vNbJours));

LEFT Join

IntervalMatch(Date)

LOAD

MIN,

MAX

Resident PERIODE_FISCALE;

JOIN

LOAD *

Resident PERIODE_FISCALE;

DROP TABLE PERIODE_FISCALE;

*/

LET vMinDate = Num(Makedate(2011,1,1));

LET vMaxDate = Num(Makedate(Year(Now()),Month(Now()),Day(Now())));

 

ChampDate:

LOAD date($(vMinDate)+IterNo()-1) as MaDate

AUTOGENERATE (1)

WHILE $(vMinDate)+IterNo()-1 <= $(vMaxDate);

 

Calendrier:

LOAD

MaDate as Date,

Year(MaDate) as Année,

'T ' & Num(Ceil(Month(MaDate)/3),'(ROM)0') as Trimestre,

Month(MaDate) as Mois,

MonthEnd(MaDate)as DateFinMois,

Week(MaDate) as Semaine,

Weekday(MaDate) as JourSemaine,

Day(MaDate) as Jour,

if(MaDate=floor(MonthEnd(MaDate)),1,0) as FDM   // FDM = Fin De Mois

RESIDENT ChampDate;

DROP TABLE ChampDate;

SET vMinDate = ;

SET vMaxDate = ;

FAITS_TEMP:

NoConcatenate

LOAD

    SITE,

    NOM,

    //PRENOM,

    SEXE,

    "Date de naissance",

    Nationalité,

    "Type contrat",

    "Date d'entrée" as DATE_ENTREE,

    "Date de sortie",

    If(IsNull("Date de sortie"),MakeDate(Year(Today()), 12, 31),"Date de sortie") as DATE_FIN ,

    if("Date de sortie"='',Age(Today(),"Date d'entrée"),Age("Date de sortie","Date d'entrée")) as Ancienneté,

    "Salaire base 2017",

    "Salaire base 2016",

    Coefficient,

    "Temps travail",

    Syndicat,

    Encadrement,

    'DEMOGRAPHIE' as TYPE_FAITS,

    ID_RH

FROM

[Tableau de données salariés.xlsx]

(ooxml, embedded labels, table is [Données salariés])

Where Len("Date d'entrée") >0;

PERIODE:

NoConcatenate

LOAD Date

Resident Calendrier

Where FDM = 1;

// Ajout des dates comprises entre chaque intervalle.

joined:

INNER JOIN(PERIODE) INTERVALMATCH(Date) LOAD distinct DATE_ENTREE,DATE_FIN RESIDENT FAITS_TEMP;

FAITS:

NoConcatenate

LOAD *

Resident FAITS_TEMP;

Left Join

LOAD *

Resident PERIODE;

DROP Table PERIODE;

DROP Table FAITS_TEMP;

lcloatre
Partner - Creator III
Partner - Creator III

Loïc,

As-tu essayé ma solution ?

Si ça te convient, merci de clôturer le post, mettre "Correcte" pour la bonne réponse et "UTILE" pour le ou les réponses utiles.