3 Replies Latest reply: May 28, 2014 8:37 AM by Thomas MILLET RSS

    Calcul nb personne par groupe d'ancienneté.

    Thomas MILLET

      Bonjour,

       

      J'ai un soucis avec un calcul qui a l'air simple en apparence mais non.

       

      Je cherche à calculé le nombre de personne appartenant à chaque groupe d'ancienneté. Les groupes sont définit dans le script en fonction de la date d'entré de la personne.

      De cette façon :

      if(Age(Today(),DateAnciennete)<=4, '<=4',if(Age(Today(),DateAnciennete)<=9, '5-9',
        if(Age(Today(),DateAnciennete)<=14, '10-14', if(Age(Today(),DateAnciennete)<=19,'15-19',
        if(Age(Today(),DateAnciennete)<=24,'20-24', if(Age(Today(),DateAnciennete)>=25,'25+')))))) AS GroupeAnciennete,
      

       

      un des soucis viens du fait que je travaille en mois glissant, je suis donc capable de revenir dans le temps pour savoir la situation à tel mois. (je remonte de 2 ans au maximum). Jusqu'ici tout ce passait bien.

       

      Voici ce que je ressort pour le mois de mars :

      2014-04-08_10h15_16.png

      Hors les chiffres officielles ressortent uniquement 205 personnes, après recherche il y a des personnes (2 précisément pour ce cas) qui sont compté en double car elles sont partie de la boite puis revenue, ce qui a eu pour cause la création d'une nouvelle date d'ancienneté.

       

      Donc dans le principe il faut que je compte uniquement la plus haute date d'ancienneté qui se trouve inférieur à la date sélectionner (la valeur ce trouve dans une variable nommé "Glissant"

      Voici mon calcul a l'heure actuel :

      =Count(DISTINCT if((IsNull(T_HST_CONTRAT.DateFinContratCalcule)
      OR T_HST_CONTRAT.DateFinContratCalcule>=Date#(Glissant,'DD/MM/YYYY')) 
      AND T_HST_CONTRAT.DateDebutContrat<=Date#(Glissant,'DD/MM/YYYY')
      AND T_SAL.Sexe='Homme',
      T_HST_CONTRAT.NumSalarie))
      

      Traduction : On compte les personnes qui on un contrat sans date de fin, ou une supérieur à la sélection et qui à sa date de début de contrat inférieur à la sélection. On ne prend que les hommes.

       

      Je suis partie sur une piste à base de FirstSortedValue mais sans trop de réussite pour le moment, si vous auriez des pistes à m'indiquer pour réussir ce genre de calcul, cela me serais d'une grande aide.

       

      Merci d'avance,

       

      Cordialement,

       

      Thomas.

        • Re: Calcul nb personne par groupe d'ancienneté.
          Thomas MILLET

          Après avoir retravaillé le tout et corrigé des erreurs lié au format des dates, voici le résultat de mes recherches :

           

          =Count(DISTINCT if((IsNull(T_HST_CONTRAT.DateFinContratCalcule) OR Date(T_HST_CONTRAT.DateFinContratCalcule,'DD/MM/YYYY')>=Date#(Glissant,'DD/MM/YYYY'))
          AND Date(T_HST_CONTRAT.DateDebutContrat,'DD/MM/YYYY')<=Date#(Glissant,'DD/MM/YYYY') AND T_SAL.Sexe='Homme'
          AND Date(T_HST_INFOSSOCIETE.DateAnciennete,'DD/MM/YYYY') =
          
          Date(aggr(FirstSortedValue({<T_HST_INFOSSOCIETE.DateAnciennete={"<=$(Date#(Glissant,'DD/MM/YYYY'))"}>}
          T_HST_INFOSSOCIETE.DateAnciennete,-T_HST_INFOSSOCIETE.DateAnciennete),
          T_HST_INFOSSOCIETE.NumSalarie,T_HST_INFOSSOCIETE.IdHstInfoSociete),'DD/MM/YYYY')
          
          ,T_HST_CONTRAT.NumSalarie))
          

          Les nouveaux changement correspondent au 2ème bloc.

           

          Le résultat est par contre toujours le même. Je pense être sur la piste, mais sans pour autant concrétisé.

           

          Cordialement,

           

          Thomas.

            • Re: Re: Calcul nb personne par groupe d'ancienneté.
              Benoit Leroy

              Bonjour Thomas,

               

              Je ne comprends pas pourquoi tu veux calculer l'ancienneté dans le script (en fonction de la valeur de date actuel today())

              Selon moi, cette ancienneté doit être fonction de la date sélectionnée dans ta glissière.

               

              Du coup, on peux écrire que l'ancienneté (à la date sélectionnée)

              = if (date_entrée <= $(v_date) AND (date_sortie >= $(v_date) OR isnull(date_sortie)), Floor(v_date - date_entrée), 'NA')

               

              Je joins une application exemple en espérant que cela soit utile.

            • Re: Calcul nb personne par groupe d'ancienneté.
              Thomas MILLET

              Bonjour,

               

              Je revient pour donné la méthode que j'ai utilisé pour faire ma pyramide sur un mois glissant.

               

              Ayant 2 expressions, je ne pouvais pas faire le calcul en dynamique.

               

              J'ai donc calculé dans le script l'age des personnes et leur ancienneté pour chaque mois de mon calendrier en mettant a null pour tous les mois qui se trouve avant la date de début du contrat ou après la date de fin (si il y en a une).

               

              Grâce a ce calcul j'ai pu définir a quel groupe les personnes appartenais par mois. il m'a suffit ensuite dans le set analysis de choisir le mois qui étais sélectionner et de faire un count du nombre de personne par groupe.

               

              En espérant que cette réponse pourra être utile a quelqu'un.

               

              Cordialement,

               

              Thomas.