5 Replies Latest reply: Jan 13, 2016 3:35 AM by Florent Lelarge-Otiniano RSS

    Comment compter un nombre de ligne dans un tableau ?

    Requet Philippe

      Bonjour,

       

      J'ai créé une table dans Qlik Sense basée sur une base de donnée SQL et un fichier Excel.

      J'ai également un volet de filtre par mois.

      La base de données contient le CA réalisé par mes commerciaux, le fichier Excel leurs objectifs mois par mois.

      J'ai créé une colonne de Mesure dans ma table qui calcule l'écart entre le CA et l'objectif.

      Si le CA est supérieur à l'objectif j'écris "Réussi", sinon "Raté".

      Je voudrais lorsque je sélectionne 6 mois par exemple pouvoir compter le nombre de mois réussi car suivant celui-ci le pourcentage du calcul de prime peut varier.

      Avez-vous une idée ?

      Je vous remercie par avance.

        • Re: Comment compter un nombre de ligne dans un tableau ?
          Florent Lelarge-Otiniano

          Bonsoir philippe,

          Normalement, il suffit que tu fasses un count(if(mon_champ='reussi',mois) pour compter toute les valeurs du champ "mois" dont sur la ligne le champ "mon_champ" contient 'reussi'.

          Si tu rajoutes "distinct" il ne comptera qu'une fois chaque valeur de "mois", soit 6...
          Florent.

            • Re: Comment compter un nombre de ligne dans un tableau ?
              Requet Philippe

              Bonjour et merci pour cette réponse.

              Malheureusement cela ne fonctionne pas (ou alors je ne sais pas comment). La colonne dans laquelle s'inscrit "Raté" ou "Réussi" n'est pas un champ de ma requête, mais un calcul que je fait à la volée dans le tableau Qlik.

              Ma requête me renvoie 4 choses :

              - Le prix de vente (VenteSession)

              - Le coût (Couts)

              - Le prix de vente totale (VenteSessionTotale)

              - La date de la vente (DateFin)

               

              Et je récupère via Excel les objectifs (ObjectifsMarge)

              Voilà le calcul que je fais dans mon tableau pour obtenir "Raté" ou "Réussi" :

              if((sum(VenteSession)-(sum(Couts)/(sum(VenteSessionTotale)/sum(VenteSession)))*1)-Sum(ObjectifsMarge)<0,'Raté','Réussi')

              Cela fonctionne très bien.

              J'ai donc adapté cela à la réponse fournie et j'ai fait ceci (sachant que dans l'exemple donné il manque une parenthèse)  :

               

              count(if((sum(PrimeVenteSession)-(sum(PrimeCouts)/(sum(PrimeVenteSessionTotale)/sum(PrimeVenteSession)))*1)-Sum(ObjectifsMarge)<0,DateFin))

              Et j'obtiens le message d'erreur suivant : "Nested aggregation not allowed"

               

              Je suis complètement bloqué, si quelqu'un peut m'aider...

              Merci d'avance

                • Re: Comment compter un nombre de ligne dans un tableau ?
                  Florent Lelarge-Otiniano

                  ce qu'il faudrait alors, c'est de faire dans le script de rechargement :

                  une concaténation de tes 2 tables (genre "left join"),

                  rechager ta table avec un

                  load*,

                  if((sum(VenteSession)-(sum(Couts)/(sum(VenteSessionTotale)/sum(VenteSession)))*1)-Sum(ObjectifsMarge)<0,'Raté','Réussi') as ATTEINTE_OBJECTIF,

                  load * inline

                  resident Matabble_concaténée;

                   

                  et après, dans ton graphe tu appliques l'expression

                  count(if(ATTEINTE_OBJECTIF='Réussi',mois)


                  Florent.

                    • Re: Comment compter un nombre de ligne dans un tableau ?
                      Requet Philippe

                      Bonjour,

                       

                      Encore merci pour ta réponse, mais je ne suis pas bien familier et ces LOAD et je n'arrive pas à le faire fonctionner.

                      Je t'explique précisément ce que j'ai fait :

                      Dans le chargement j'ai un MAIN avec 3 requêtes :

                      - J'ai un premier SELECT qui me renvoie un IDSession avec le CA, la date et le nom du commercial (il est nommé Sessions : )

                      - J'ai un deuxième SELECT qui me renvoie un IDSession avec le coût de la session (nommé Couts : )

                      - J'ai un troisième SELECT qui me renvoie un IDSession avec le prix de vente totale ( Nommé VentesTotales : )

                      Donc dans mon modèle de données, ces trois tables sont reliées sur l'IDSession

                       

                      Ensuite, dans le chargement,j'ai rajouté une session Objectifs qui me permet de charger mon fichier Excel :

                      - J'ai un LOAD qui me renvoie la date, le nom du commercial et l'objectif de CA (nommé Objectifs)

                       

                      Qilk m'a donc créé une relation entre cette table et la première basée sur la date et le nom du commercial

                       

                      Comme tu me l'as dit, j'ai rajouté à la suite de ce LOAD, les informations suivantes :

                      load*,

                      if((sum(VenteSession)-(sum(Couts)/(sum(VenteSessionTotale)/sum(VenteSession)))*1)-Sum(ObjectifsMarge)<0,'Raté','Réussi') as ATTEINTE_OBJECTIF,

                      load * inline

                      resident Sessions;

                       

                      Lorsque je lance le chargement, j'ai en retour "Field not found - <Couts>

                      Dans la partie "Resident" puis-je/dois-je déclarer plusieurs tables ? (il me semble que l'erreur vient de là)

                       

                      Merci pour ton aide

                       

                      Philippe

                • Re: Comment compter un nombre de ligne dans un tableau ?
                  Florent Lelarge-Otiniano

                  je ne pense pas que tu puisse appeler plusieurs tables mais :

                  il faut que tu nommes la table appelée dans le script : par exemple tes données utilisées dans le "resident" sont dans la table BDD.xls :

                  Sessions:

                  load*,

                  from BDD.xls

                   

                  load*,

                  if((sum(VenteSession)-(sum(Couts)/(sum(VenteSessionTotale)/sum(VenteSession)))*1)-Sum(ObjectifsMarge)<0,'Raté','Réussi') as ATTEINTE_OBJECTIF,

                  load * inline

                  resident Sessions;

                   

                  si tes données sont dispersées dans plusieurs tables, à mon avis tu doit en générer avant une seule, et appeler cette dernière...

                   

                  si ça ne marche pas, peux tu joindre ton app et les fichiers sources ?