11 Replies Latest reply: Jul 13, 2017 8:13 AM by LAURENT CLOATRE RSS

    Calcul du nombre de salariés

    LOIC MASSON

      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

        • Re: Calcul du nombre de salariés
          LAURENT CLOATRE

          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é.

          • Re: Calcul du nombre de salariés
            LOIC MASSON

            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;

            • Re: Calcul du nombre de salariés
              LOIC MASSON

              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...

              • Re: Calcul du nombre de salariés
                LAURENT CLOATRE

                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;