6 Replies Latest reply: Jul 29, 2016 5:45 AM by Jérôme Renimel RSS

    Effectuer un calcul entre 2 champs en fonction des valeurs d'un autre champ

    Jérôme Renimel

      Bonjour,

      Je possède un jeu de donnée dans lequel je dispose de plusieurs activités.

      Ces activités possèdent plusieurs statuts d'activité (activité planifiée, activité commencée, activité terminée, activité facturée, etc.) associés à une date et une heure (format horodateur).

       

      J'aimerai, avec le logiciel Qlik Sense, déterminer le temps qui s'est déroulé entre le statut "activité commencée" et le statut "activité terminée" sans prendre en compte les autres statuts qui ne m'intéressent pas.

       

      Pouvez-vous m'aider s'il vous plait ?

       

      PS : Je ne sais pas si ma question est très claire donc demandez plus de précisions si besoin.

        • Re: Effectuer un calcul entre 2 champs en fonction des valeurs d'un autre champ
          Florent Lelarge-Otiniano

          bonjour Jérôme,

           

          pour ma part, je ferai dans le script (si c'est dans la même table) :

          load*,

          if(activité='[activité commencée]',TonChampDateHeure)-if(activité='[activité terminée]',TonChampDateHeure) as DélaiTTT;

          load Matable

          from...

           

          Florent

          • Re: Effectuer un calcul entre 2 champs en fonction des valeurs d'un autre champ
            Jérôme Renimel

            J'essaye d'écrire la première formule et elle ne se compile pas mais il n'y a pas non plus de message d'erreur.

             

            Que voulez-vous dire par '"dans l'expression" ?

            • Re: Effectuer un calcul entre 2 champs en fonction des valeurs d'un autre champ
              Jérôme Renimel

              Je vais tenter de mieux expliquer mon cas.
              J'avais également oublié qu'il y avait un statut "pause" lorsque l'activité ne s'est pas fait d'une traite.
              Par exemple je peux avoir pour une activité des données présentées ainsi :

               

              activity_id     |   statut     |  date_time_statut

               

               

              activity_1      | activité programmé   |   14/07/2016 10:00:00

              activity_1      | activité confirmé       |   14/07/2016 15:00:00

              activity_1      | activité commencée  |   20/07/2016 11:00:00

              activity_1      | pause                      |   20/07/2016 13:00:00

              activity_1      |activité commencée   |   20/07/2016 14:00:00

              activity_1      |pause                        |   20/07/2016 17:30:00

              activity_1      |activité commencée   |    21/07/2016 09:30:00

              activity_1      |activité terminée        |     21/07/2016 10:29:00

               

              Il se peut également que l'activité ce soit terminée un première fois mais qu'une seconde intervention soit finalement programmée pour une quelconque raison et que cela nous rajoute :

               

              activity_1      | activité commencée  | 22/07/2016 08:00:00

              activity_1      | activité terminée       | 22/07/2016 09:30

               

              Du coup j'aimerai que pour cette activity_1 Qlik Sense me renvoi une durée d'activité de 6:29 si le premier cas est avéré ou 7:59 dans le cas où la deuxième intervention venait à se rajouter.

               

              J'espère que l'exemple rend la question plus claire

                • Re: Effectuer un calcul entre 2 champs en fonction des valeurs d'un autre champ
                  Frédéric MANTE

                  Bonjour,

                  voici une solution

                  ===========================

                  data:

                  LOAD ctivity_id,

                       statut,

                       date_time_statut

                  FROM

                  [test.txt]

                  (txt, codepage is 1252, embedded labels, delimiter is ';', msq);

                   

                  donnée:

                  load *, if( not isnull(date_time_statut_deb),date_time_statut - date_time_statut_deb) as délai;

                  load ctivity_id,

                       statut,

                       if ( ctivity_id <> peek(ctivity_id), 1,0) as flagdebut,

                       if ( ctivity_id = peek(ctivity_id) and statut <> 'activité commencée', peek(date_time_statut)) as date_time_statut_deb,

                       date_time_statut

                       resident data where statut <> 'activité confirmé' and statut <> 'activité programmé'

                  order by ctivity_id, date_time_statut asc;

                   

                  drop table data;

                  ==================================

                  A+

                    • Re: Effectuer un calcul entre 2 champs en fonction des valeurs d'un autre champ
                      Jérôme Renimel

                      Merci pour cette réponse,

                      J'ai légèrement modifié votre code pour obtenir ce qu'il me fallait.

                       

                      Si ça intéresse quelqu'un, j'ai procédé ainsi :

                       

                      Délai:

                      load activity_id,

                           date_time_status,

                           status_id,

                           Statut,

                           if ( activity_id = peek(activity_id),if(status_id <> 60, Time(date_time_status-peek(date_time_status)),'00:00'),'00:00') as délai

                           resident ActivityStatus where (status_id = 60 or (status_id=68 or (status_id=70)))

                      order by activity_id, date_time_status;

                       

                       

                       

                       

                      Load activity_id, Time(sum(délai)) as délai_total resident Délai Group By activity_id;