7 Replies Latest reply: Mar 31, 2014 2:55 AM by daniele leibovici RSS

    Calcul taux occupation

      Bonjour

      J’ai 2 tables : une table calendrier qui contient une ligne par jour calendaire avec pour chaque date, le mois, l’année, le jour de la semaine, ….

      Une table « occupation » qui contient une ligne par service, sejour et date d’occupation dans un service : par exemple pour un sejour du 10 au 15 avril dans le service X j’aurais 5 ligne, une pour le 10, une pour le 11, …

      Ces 2 tables sont reliés grâce a une clef basé sur l’égalité occupation.date_occupation = calendrier.date

      Les champs année, mois, jour du mois et jour de la semaine de la table calendrier sont en liste de sélection.

      Je fais en sorte que l’on ne puisse sélectionner qu’une seule année à la fois.

      Dans des tableaux je présente le nombre de présents et le taux d’occupation.

      Je veux dans un tableau croisé dynamique présenté  le taux d’occupation par mois avec les services en lignes et les mois en colonne

      En utilisant cette expression : count ({ <CALEND_ANNEE ={$(= CALEND_ANNEE)}>}  distinct  CALEND_DATE)

      je n’arrive à calculer que le nombre de jour de présence : si au mois de janvier il n’y a eu des présents que 25 jours au mois de janvier j’obtiens 25  jours alors que je dois obtenir 31 jours.

      En ajoutant total après distinct j’obtiens tous les jours de la période sélectionnée et non pas celle du mois.

      Pour obtenir ce que je veux je dois créer un tableau simple avec le service en dimension et ensuite je crée une expression pour chaque mois, ce qui est peu maintenable

      Pour calculer le nombre de présents :

      Count ( { <CALEND_OCCUP_ANNEE ={$(=GetFieldSelections(CALEND_OCCUP_ANNEE))},  aband = {0}, CALEND_OCCUP_MOIS={"mois_concerné"}>}    OCCUP_DATE_OCCUP)

       

      Pour compter le nombre de place  de ce même mois :

      count( { <CALEND_OCCUP_ANNEE ={$(=CALEND_OCCUP_ANNEE)},  CALEND_OCCUP_MOIS={" mois_concerné"}>}  distinct total CALEND_OCCUP_DATE)  * OCCUP_NB_LIT

       

      Y a-t-il une façon plus simple de procéder ?

      Merci par avance pour votre aide

        • Re: Calcul taux occupation

          Pouvez-vous préciser ce que vous attendez, je ne comprends pas :

          daniele leibovici a écrit:

          je n’arrive à calculer que le nombre de jour de présence : si au mois de janvier il n’y a eu des présents que 25 jours au mois de janvier j’obtiens 25  jours alors que je dois obtenir 31 jours.

          A quoi correspond le "31", pouvez-vous donner la formule de calcul qui permette d'arriver à ce résultat ?

            • Re: Calcul taux occupation

              Bonjour et merci pour votre réponse

               

               

               

              31 est le nombre de jour du mois de janvier

               

               

               

              Je dois calculer le taux d’occupation qui est  nombre présent / nombre de place  pour une période (1 mois, 1 jour, 1 an, …)

               

              Et le nombre de place pour une période c’est le nombre de place *nb jour période

               

              Si pour 1 ou plusieurs jours donnés il n’y a pas de présent dans un service, ce ou ces jours n’apparaitront pas dans ma table des présents

               

              Je calcule donc le nombre de jour sur la table calendrier mais a cause du lien le nombre de jour est le nombre de jour où il y a des presents

               

               

               

              Finalement j’ai fait un tableau avec le service en dimension

               

              Et pour les expressions c’est une pour chaque mois ce qui est peu maintenable !

               

              Pour calculer le nombre de présents :

               

              Count (  { <CALEND_OCCUP_ANNEE ={$(= CALEND_OCCUP_ANNEE)},  aband = , CALEND_OCCUP_MOIS={"mois_concerné"}>}    OCCUP_DATE_OCCUP)

               

               

               

              Pour compter le nombre de place  de ce même mois :

               

              count( { }  distinct total CALEND_OCCUP_DATE)  * OCCUP_NB_LIT

               

               

               

               

               

              cordialement.

               

               

               

               

               

              De : Loïc AXILAIS 

              Envoyé : jeudi 27 mars 2014 12:03

              À : daniele leibovici

              Objet : Re:  - Calcul taux occupation

               

               

               

               

               

               

              <http://community.qlik.com/> Qlik Community

               

               

               

              Calcul taux occupation

               

               

              reply from Loïc <http://community.qlik.com/people/laxilais?et=watches.email.thread>  AXILAIS in Groupe des Utilisateurs Francophones - View <http://community.qlik.com/message/496993?et=watches.email.thread#496993>  the full discussion

            • Re: Calcul taux occupation
              Thomas Moutault

              Bonjour Daniele,

               

              il faut que tu utilises la fonction intervalMatch dont tu trouveras toute les informations dans l'aide de qlikview.

               

              Bon courage pour la suite.

              • Re: Calcul taux occupation
                Christophe Brault

                Bonjour,

                 

                Pour avoir le nombre de jour en fonction du mois dans ton tableau, tu peux juste ajouter un champs à ton calendrier :

                 

                Day(MonthEnd(Date)) as NbJour

                 

                Cette expression renvoie le numéro du dernier jour du mois de la date.

                 

                Dans ton tableau, si tu fais :

                 

                Only(NbJour)

                 

                Tu auras le nombre de jours du mois. (il faut le mois en dimension)

                • Re: Calcul taux occupation

                  Voici une proposition :

                  3 tables : la table SERVICE indique le nombre de lits disponibles par service, la table CALENDRIER reprend les différentes dates (je n'ai mis que 2 mois pour ne pas trop alourdir le message) et la table OCCUPATION indiquant quel lit est pris sur quelle période.

                   

                  SERVICE:
                  LOAD * INLINE
                  [
                      CodeService, NomService, NbLit
                      1, service 1, 10
                      2, service 2, 15
                      3, service 3, 20
                      4, service 4, 17
                      5, service 5, 12
                  ];

                  CALENDRIER:
                  LOAD * INLINE [
                  DATE, JOUR, MOIS, ANNEE
                  01/01/2014, 1, 1, 2014
                  02/01/2014, 2, 1, 2014
                  03/01/2014, 3, 1, 2014
                  04/01/2014, 4, 1, 2014
                  05/01/2014, 5, 1, 2014
                  06/01/2014, 6, 1, 2014
                  07/01/2014, 7, 1, 2014
                  08/01/2014, 8, 1, 2014
                  09/01/2014, 9, 1, 2014
                  10/01/2014, 10, 1, 2014
                  11/01/2014, 11, 1, 2014
                  12/01/2014, 12, 1, 2014
                  13/01/2014, 13, 1, 2014
                  14/01/2014, 14, 1, 2014
                  15/01/2014, 15, 1, 2014
                  16/01/2014, 16, 1, 2014
                  17/01/2014, 17, 1, 2014
                  18/01/2014, 18, 1, 2014
                  19/01/2014, 19, 1, 2014
                  20/01/2014, 20, 1, 2014
                  21/01/2014, 21, 1, 2014
                  22/01/2014, 22, 1, 2014
                  23/01/2014, 23, 1, 2014
                  24/01/2014, 24, 1, 2014
                  25/01/2014, 25, 1, 2014
                  26/01/2014, 26, 1, 2014
                  27/01/2014, 27, 1, 2014
                  28/01/2014, 28, 1, 2014
                  29/01/2014, 29, 1, 2014
                  30/01/2014, 30, 1, 2014
                  31/01/2014, 31, 1, 2014
                  01/02/2014, 1, 2, 2014
                  02/02/2014, 2, 2, 2014
                  03/02/2014, 3, 2, 2014
                  04/02/2014, 4, 2, 2014
                  05/02/2014, 5, 2, 2014
                  06/02/2014, 6, 2, 2014
                  07/02/2014, 7, 2, 2014
                  08/02/2014, 8, 2, 2014
                  09/02/2014, 9, 2, 2014
                  10/02/2014, 10, 2, 2014
                  11/02/2014, 11, 2, 2014
                  12/02/2014, 12, 2, 2014
                  13/02/2014, 13, 2, 2014
                  14/02/2014, 14, 2, 2014
                  15/02/2014, 15, 2, 2014
                  16/02/2014, 16, 2, 2014
                  17/02/2014, 17, 2, 2014
                  18/02/2014, 18, 2, 2014
                  19/02/2014, 19, 2, 2014
                  20/02/2014, 20, 2, 2014
                  21/02/2014, 21, 2, 2014
                  22/02/2014, 22, 2, 2014
                  23/02/2014, 23, 2, 2014
                  24/02/2014, 24, 2, 2014
                  25/02/2014, 25, 2, 2014
                  26/02/2014, 26, 2, 2014
                  27/02/2014, 27, 2, 2014
                  28/02/2014, 28, 2, 2014
                  ];

                  OCCUPATION:
                  LOAD * INLINE [
                      DATE, CodeService, Periode, NumeroLit
                      01/01/2014, 1, Du 1 au 5 janvier 2014,1
                      02/01/2014, 1, Du 1 au 5 janvier 2014,1
                      03/01/2014, 1, Du 1 au 5 janvier 2014,1
                      04/01/2014, 1, Du 1 au 5 janvier 2014,1
                      05/01/2014, 1, Du 1 au 5 janvier 2014,1
                      03/01/2014, 1, Du 3 au 6 janvier 2014,2
                      04/01/2014, 1, Du 3 au 6 janvier 2014,2
                      05/01/2014, 1, Du 3 au 6 janvier 2014,2
                      06/01/2014, 1, Du 3 au 6 janvier 2014,2
                  ];

                   

                  Ajouter un tableau croisé dynamique avec les caractéristiques suivantes :

                  Dimension :

                  - NomService

                  - MOIS

                  Expression :

                  - Occupation réelle  = count(NumeroLit)

                  - Occupation possible = only(NbLit)*day(monthend(makedate(getfieldselections(ANNEE), ColumnNo(), 1)))

                  - Taux = [Occupation réelle]/[Occupation possible]*100

                  Basculer le champ MOIS en colonne et normalement vous devriez obtenir quelque chose d'assez proche de ce que vous recherchez.