6 Replies Latest reply: Jan 27, 2016 5:49 AM by Rémi Gosset RSS

    Implémenter un "champ compteur" dans un calendrier

    Rémi Gosset

      Bonjour,

       

      Débutant sur l'outil Qlik Sense je souhaiterai vous exposer mon "problème" (en espérant que celui-ci n'en soit pas un).

       

      Je charge une première base listant des événements avec leur date de création (Rapport:)

      Je génère ensuite automatique un calendrier définis par une date de début et une date de fin. (Calendrier:)

       

      Je souhaiterai ajouter au Calendrier: (via le script de chargement de données) un champ comptant le nombre d’événements crées depuis le début et jusqu’à chacune des date (et jusqu’à aujourd'hui) du calendrier (et ce grâce aux infos contenues dans Rapport:)

       

      En espérant avoir été clair et en espérant que vous puissiez m'aider.

       

      Cordialement,

      Rémi

        • Re: Implémenter un "champ compteur" dans un calendrier
          bruno bertels

          Bonjour Remi

           

          Regarde du coté de cette fonction : autonumber

           

          dans le script :

          autonumber(événements) as événements_cumul

           

          il est possible aussi de le faire dans les tableaux ou graphique avec la fonction rangesum() et above() pour cumuler les événements par date

           

          Bruno

            • Re: Implémenter un "champ compteur" dans un calendrier
              Rémi Gosset

              Bonjour Bruno,

               

              Je vais de ce pas essayer de comprendre comment fonctionne la fonction autonumber.

              En espérant que la solution soit la bonne (et que je comprenne son utilisation bien sur).

               

              Merci encore,

               

              Rémi

                • Re: Implémenter un "champ compteur" dans un calendrier
                  bruno bertels

                  Bonjour

                   

                  Ci joint un petit exemple avec la fonction autonumber

                   

                  LA situation

                   

                  une base avec des dates et des ventes :

                   

                  datesales
                  01/05/20150
                  02/05/201510
                  03/05/201510
                  04/05/201510
                  05/05/201510
                  06/05/201510
                  07/05/20150
                  08/05/20150
                  09/05/20150
                  10/05/20150

                   

                  objectif Avoir un numéro ID pour les dates lorsque les ventes sont > 0

                   

                  ce qui donne ceci dans le script :

                   

                  LOAD

                  if(sales>0,autonumber("date"))as ID,

                      "date",

                      sales

                  FROM [lib://Help Test/autonumber.xls]

                  (biff, embedded labels, table is Feuil1$);

                   

                  permettant d'avoir ceci an tableau ds Qlik Sense ::

                    • Re: Implémenter un "champ compteur" dans un calendrier
                      Rémi Gosset

                      Merci Bruno,

                       

                      Cet exemple illustre parfaitement ce que j'ai pu lire ce matin sur la fonction autonumber (exemple plus clair que celui exposé dans l'aide Qlik). Mais je n'arrive pas à imaginer que cela pourrait me permettre de compter les 'événements' parus avant une date donnée.

                       

                      De ce que j'ai compris, autonumber me permet de donner un ID pour chacune de dates dont le critère "fixe" est sales >0 (dans ton exemple).

                      Dans mon cas, le critères est "variable" car est différent pour chaque date donnée (donc a chaque ligne de mon calendrier)

                       

                      Par ailleurs, mon point de blocage concerne surtout le fait que je travaille avec deux bases. Je m'explique:

                       

                      Je charge une première base contenant mes evenements ([Rapport])

                       

                      [Rapport]:

                      LOAD

                      [Statut événement],

                      date([Date déclaration],'DD/MM/YYYY') as [Date jour déclaration]

                      FROM [lib://...]

                      (ooxml, embedded labels, header is 14 lines, table is [Rapport])

                       

                      Puis je crée de manière indépendante à [Rapport] un [Calendrier] (afin d'avoir toute les dates dans celui-ci): [Calendrier]

                       

                      /* variable date min et max pour l'interval */

                      Let varMinDate = Num('01/01/2015');

                      Let varMaxDate = Num('31/12/2030');

                       

                      // generation des dates au format dd/mm/aaaa

                      TempCalendar:

                      REPLACE LOAD

                      Date($(varMinDate) + IterNo() - 1) as TempDate

                      AutoGenerate 1 While $(varMinDate) + IterNo() -1 <= $(varMaxDate);

                       

                      //table avec detail date

                      Calendrier:

                      REPLACE LOAD

                      Year(TempDate) as year,

                      Month(TempDate) as month,

                      DATE(TempDate, 'DD/MM/YYYY hh:mm') as dtime

                      Resident TempCalendar

                      Order By TempDate ASC;

                       

                       

                      Ce que je souhaite faire, si l'autonumber répond a mon besoin, est de pouvoir rajouter à [Calendrier] une colonne (l'autonumber en l'occurence) dont la formule serait:

                      - de compter le nombre d'evenements dont [Date jour déclaration] < [dtime]


                      [Date jour déclaration] appartenant à [Rapport]

                      [dtime] appartenant à [Calendrier]

                       

                      J'espère ne pas trop t’embêter avec mon problème mais c'est assez difficile d'expliquer avec des mots.

                      Merci en tout cas pour ton soutien.

                      Je vais essayer de me replonger dans la partie "Association entre les tables" si je trouve un tutoriel bien fait.

                       

                      Rémi

                        • Re: Implémenter un "champ compteur" dans un calendrier
                          bruno bertels

                          Re,

                           

                          Je pense que je comprend mieux ton problème ou ton besoin plutôt.

                           

                          Si je t'ai bien suivi tu veux pouvoir cumuler ton nombre d'évènements par date ? c'est bien çà ?

                           

                          Si c'est le cas voici un nouveau fichier adapté avec deux formules faisant la même chose : Cumuler des événements par date. Ici j'utilise le même fichier avec des dates et des ventes. Il faudra l'adapter utiliser count(evenement) ou count(distinct(evenement) : on affinera au besoin

                           

                          dans le fichier joint j'ai enlever dans la table la dimension ID faite avec autonumber

                           

                          j'ai donc :

                           

                          date ( tu prendras le champs date de ton calendrier)

                          sales avec sum(sales) additionne les ventes par date ( a adapter pour toi avec un count(évènement) pour avoir le nombre d'évènement par date)

                          rangesum(above(sum(sales),0,RowNo())) : cette mesure cumule les ventes en additionnant la somme des lignes précédentes à la ligne actuelle. Sachant que chaque ligne = une date

                           

                          sum(aggr(rangesum(above(sum(sales),0,RowNo())),date)) : cette mesure fait la même chose mais en créant une table en mémoire pour cumuler les ventes à chaque date ( voir AGGR() dans l'aide  )

                          Si tu sélectionnes une plage de date les deux formules cumuleront les ventes ou les évènements de la 1er date sélectionnée à la dernière date sélectionnée.

                           

                          et la même :

                          sum(aggr(rangesum(above(sum( {$<date>} sales),0,RowNo())),date)) : celle ci est un peu différente puisque si tu sélectionnes une plage de dates elle comptera le cumul à partir du CUMUL des ventes existants à cette date jusqu'a la dernier date sélectionnée.

                           

                          Pour aller plus loin :

                          billet de blog en anglais trés bien fait  par Henric Cronström :

                          Accumulations

                           

                          above fonction :

                          The Above Function

                          The As OF table : ( permet de générer un calendrier Cumulatif sans doute plus proche de ce que tu cherches)

                          The As-Of Table

                           

                          Bruno