20 Replies Latest reply: Mar 14, 2017 4:50 AM by Jacky GAUD RSS

    aggrégation et count et analysis

    Jacky GAUD

      bonjour,

      j'ai besoin d'un petit coup de main sur une fonction assez évoluée.

      voici mes données :

         

      Code événementNom étapeNom apprenantEvénement clôturé
      13172317103 - Dossier completAMIAUDNON
      13173501704 - Convoc entretien PiloteAMIAUDNON
      13176084905 - AdmissibleAMIAUDNON
      13177872110 - Mise en relationAMIAUDNON
      13172953801 - Préinscription portailBETHYSNON
      13174217103 - Dossier completBETHYSNON
      13174416104 - Convoc entretien PiloteBETHYSNON
      13176087805 - AdmissibleBETHYSNON
      13177873210 - Mise en relationBETHYSNON
      13172956401 - Préinscription portailBLOTTIERENON
      13173937403 - Dossier completBLOTTIERENON
      13174416304 - Convoc entretien PiloteBLOTTIERENON
      13176089205 - AdmissibleBLOTTIERENON
      13176513801 - Préinscription portailCABANETOSNON
      13172956101 - Préinscription portailDALIBERTNON
      13172918001 - Préinscription portailDALKOLMONON
      13173812203 - Dossier completDALKOLMONON
      13174790004 - Convoc entretien PiloteDALKOLMONON
      13175292105 - AdmissibleDALKOLMONON
      13169732701 - Préinscription portailDREANNON
      13169736403 - Dossier completDREANNON
      13173501904 - Convoc entretien PiloteDREANNON

       

       

      et je voudrais compter le nombre d'événement pour lesquels la colonne "Evénement clôturé" est égal à NON et pour lesquels le dernier "Nom étape" = "01 - Préinscription portail"

      Donc je pense qu'il faut faire une agrégation sur le "Nom apprenant" pour regrouper les évènements par apprenant et ensuite faire un comptage si le dernier événement d'un apprenant est égal à "01 - Préinscription portail" donc un set analysis

      count(aggr({$<[Nom étape]={'01 - Préinscription portail'},[Evénement clôturé]={'NON'}>},[Nom apprenant]) [Code événement])

       

       

      mais ce que j'ai fait ne fonctionne pas bien sûr alors comment écrire cette ligne ?

      dans mon exemple ci-dessus le résultat serait 3

      merci

        • Re: aggrégation et count et analysis
          Sunny Talwar

          May be this:

           

          Count({$<[Nom apprenant] = {"=MaxString([Nom étape]) = '01 - Préinscription portail'"}, [Evénement clôturé]={'NON'}>} DISTINCT [Nom apprenant])

            • Re: aggrégation et count et analysis
              Sunny Talwar

              Gives me 2... why is DALKOLMO included?

               

              Capture.PNG

                • Re: aggrégation et count et analysis
                  Jacky GAUD

                  that's right DALKOLMO isn't included

                    • Re: aggrégation et count et analysis
                      Sunny Talwar

                      Then the count is 2, right? If it is 2, then check the attached

                        • Re: aggrégation et count et analysis
                          Sébastien Fatoux

                          Hi Sunny,

                           

                          Good expression, but he wants to count "Code événement" :

                           

                          =Count({$<[Nom apprenant] = {"=MaxString([Nom étape]) = '01 - Préinscription portail'"}, [Evénement clôturé]={'NON'}>} DISTINCT [Code événement])

                            • Re: aggrégation et count et analysis
                              Jacky GAUD

                              bonjour,

                              je pense que l'on est pas loin du résultat mais il y a un truc que je ne comprends pas. J'ai rajouté le comptage de l'étape "02 - Dossier incomplet"

                              Count({$<[Nom apprenant] = {"=MaxString([Nom étape]) = '01 - Préinscription portail'"}, [Evénement clôturé]={'NON'}>} DISTINCT [Code événement]) +

                              Count({$<[Nom apprenant] = {"=MaxString([Nom étape]) = '02 - Dossier incomplet'"}, [Evénement clôturé]={'NON'}>} DISTINCT [Code événement])

                              et ça me donne ceci

                                

                              Code événementNom étapeNom apprenantEvénement clôturépréinscription
                              7
                              13176513801 - Préinscription portailCABANETOSNON1
                              13172956101 - Préinscription portailDALIBERTNON1
                              13173004301 - Préinscription portailFORESTENON1
                              13172956701 - Préinscription portailGEAYNON1
                              13167746301 - Préinscription portailPLOQUINNON1
                              13172308701 - Préinscription portailVICKERSNON1
                              13173075402 - Dossier incompletVICKERSNON1

                              ce qui n'est pas normal car je vois 2 fois Vickers alors que je veux compter que la dernière étape donc la ligne Préinscription de Vickers ne devrait pas apparaître.

                              Rappel je ne veux compter que la dernière étape pour laquelle il y a eu préinscription ou dossier complet.

                                • Re: aggrégation et count et analysis
                                  Sébastien Fatoux

                                  C'est tout a fait normal comme résultat, car tu utilises ton expression dans un tableau dans le quel tu as mis comme dimension "Nom étape". Ca a un effet de filtre.

                                   

                                  Si tu enlèves la dimension "Nom étape" tu n'auras plus qu'une seul ligne pour VICKERS.

                                  Et si tu désire afficher le nom de l'étape en cours, il te suffit d'ajouter l'expression :  MaxString([Nom étape])

                                   

                                  Note :  Tu peux facilement déplacer ton expression "Nom étape" au milieu de tes dimensions, en sélectionnant son label et en le déplaçant à la position désirée.

                                    • Re: aggrégation et count et analysis
                                      Jacky GAUD

                                      effectivement cela résout le pb d'affichage mais le compte n'y est pas car au total j'ai 7 alors que ça devrait être 6

                                      donc j'ai modifié le code en mettant

                                      Count({$<[Nom apprenant] = {"=MaxString([Nom étape]) = '01 - Préinscription portail'"}, [Evénement clôturé]={'NON'}>} DISTINCT [Nom apprenant]) +

                                      Count({$<[Nom apprenant] = {"=MaxString([Nom étape]) = '02 - Dossier incomplet'"}, [Evénement clôturé]={'NON'}>} DISTINCT [Nom apprenant])

                                      et c'est mieux car maintenant j'ai 6

                                        • Re: aggrégation et count et analysis
                                          Sébastien Fatoux

                                          ok, mais il me semblait que tu avais dit tout au début que tu voulais compter les événements :

                                           

                                          je voudrais compter le nombre d'événement pour lesquels la colonne "Evénement clôturé" est égal à NON et pour lesquels le dernier "Nom étape" = "01 - Préinscription portail"

                                           

                                          L'apprenant "Nom apprenant" ne peut-il pas s'inscrire à plusieurs évènements?

                                            • Re: aggrégation et count et analysis
                                              Jacky GAUD

                                              oui je voulais compter le nbre d'évenements à partir du moment où il n'y en avait qu'un qui serait vu par la formule mais apparemment avec cette formule il en voit 2 pour Vickers alors qu'il ne faudrait qu'il n'en voit qu'un

                                              ci-joint le qvw le résultat est 4 alors qu'il ne devrait en voir que 3

                                                • Re: aggrégation et count et analysis
                                                  Sébastien Fatoux

                                                  Oui, mais ce sont des codes événement différent?

                                                   

                                                  Je pense que j'ai une mauvaise compréhension des données.

                                                  Je pensais que Code événement définissait un événement pour lequel il y avait plusieurs étapes pour s'inscrire et que cet événement pouvait être clôturé ou pas.

                                                   

                                                  mais ce n'est visiblement pas ça.

                                                    • Re: aggrégation et count et analysis
                                                      Jacky GAUD

                                                      non effectivement les données sont structurées de la façon suivante, un Nom apprenant peut avoir plusieurs étapes et pour chaque étape associée à un apprenant il y a un code évènement différent.

                                                      donc pour avoir mon résultat c'est bien cela ?

                                                      Count({$<[Nom apprenant] = {"=MaxString([Nom étape]) = '01 - Préinscription portail'"}, [Evénement clôturé]={'NON'}>} DISTINCT [Nom apprenant]) +

                                                      Count({$<[Nom apprenant] = {"=MaxString([Nom étape]) = '02 - Dossier incomplet'"}, [Evénement clôturé]={'NON'}>} DISTINCT [Nom apprenant])

                                                       

                                                      mais tout cela ne m'explique pas pourquoi avec Vickers et avec la formule

                                                      Count({$<[Nom apprenant] = {"=MaxString([Nom étape]) = '01 - Préinscription portail'"}, [Evénement clôturé]={'NON'}>} DISTINCT [Code événement]) +

                                                      Count({$<[Nom apprenant] = {"=MaxString([Nom étape]) = '02 - Dossier incomplet'"}, [Evénement clôturé]={'NON'}>} DISTINCT [Code événement])

                                                      on compte 2 Vickers alors que normalement on ne devrait compter que le dernier événement ? car c'était mon objectif de départ

                                                        • Re: aggrégation et count et analysis
                                                          Sébastien Fatoux

                                                          Ok,

                                                           

                                                          explication de l'expression:

                                                          • Le set analysis va effectuer les 2 sélections suivantes :
                                                            • Il va sélectionner les Nom apprenant pour lesquels MaxString([Nom étape]) correspond à l'étape désirée.
                                                            • Il va sélectionner les Evénement clôturé égale à non

                                                          C'est donc se nouvel ensemble de données qui sera utilisé dans ton tableau est comme tu le vois ci-dessus Code événement et Nom étape n'ont pas été directement filtré. On a des apprenant qui sont à l'étape 1 et d'autres qui sont à l'étape 2 (qui ont donc également une ligne de donnée pour l'étape 1), c'est pour cette raison qui si l'on compte les code événement on aura 2 pour les apprenant qui sont à l'étape 2.

                                                           

                                                          Il faut donc bien compter les valeurs distinctes de Nom apprenant.

                                                           

                                                           

                                                          Pour faire ton tableau :

                                                          • Dimensions
                                                            • Nom apprenant
                                                            • Evénement clôturé
                                                          • Expressions
                                                            • Max({$<[Nom apprenant] = {"=Num(Left(MaxString([Nom étape]), 2)) <= 2"}, [Evénement clôturé]={'NON'}>} [Code événement])
                                                            • MaxString({$<[Nom apprenant] = {"=Num(Left(MaxString([Nom étape]), 2)) <= 2"}, [Evénement clôturé]={'NON'}>} [Nom étape])
                                                            • Count({$<[Nom apprenant] = {"=Num(Left(MaxString([Nom étape]), 2)) <= 2"}, [Evénement clôturé]={'NON'}>} DISTINCT [Nom apprenant])
                                                            • Re: aggrégation et count et analysis
                                                              Jacky GAUD

                                                              ok mais pourquoi si je fais le test sur '02 - Dossier incomplet' ou égal à 2 dans l'exemple

                                                              Count({$<[Nom apprenant] = {"=Num(Left(MaxString([Nom étape]), 2)) = 2"}, [Evénement clôturé]={'NON'}>} DISTINCT [Code événement])

                                                              j'obtiens 2 en résultat alors que dans mes données je n'en ai qu'un ?

                                                              voir qvw joint

                                                                • Re: aggrégation et count et analysis
                                                                  Sébastien Fatoux

                                                                  Relis une fois mon explication précédente.

                                                                   

                                                                  Maintenant on va simuler sur le tableau de donnée ce que fait le set Analysis.:

                                                                  • [Nom apprenant] = {"=Num(Left(MaxString([Nom étape]), 2)) = 2"}
                                                                    • Il va filtrer les Nom apprenant qui sont à l'étape 2
                                                                    • --> Trie ton tableau par Nom étape
                                                                    • --> Sélectionne les Nom appelant qui sont à l'étape 2 en cliquant dessus ==> Il y en a qu'un , c'est VICKERS
                                                                  • [Evénement clôturé]={'NON'}
                                                                    • Il va filtrer les Evénement clôturé égale à NON
                                                                    • Sélectionne NON dans Evénement clôturé en cliquant dessus ==> Aucun changement ils sont tous à NON

                                                                   

                                                                  Maintenant tu te retrouves avec 2 lignes, et c'est sur ces 2 lignes que ton expression va travailler.

                                                                   

                                                                  Si ton expression est :

                                                                  • Count({$<...>} DISTINCT [Code événement])    ==> On aura 2 comme résultat, car il y a 2 Code événement distinct
                                                                  • Count({$<...>} DISTINCT [Nom apprenant])    ==> On aura 1 comme résultat, car il n'y a qu'un Nom apprenant

                                                                   

                                                                  Encore une fois, dans le set analysis on ne filtre pas Nom étape, mais nom apprenant qui à comme étape max l'étape 2.

                                                                   

                                                                  Il ne faut donc pas utiliser Count({$<...>} DISTINCT [Code événement]), mais Count({$<...>} DISTINCT [Nom apprenant])   

                                                                    • Re: aggrégation et count et analysis
                                                                      Jacky GAUD

                                                                      bonjour,

                                                                      ah ! je viens de comprendre comment ça marche.

                                                                      Cela compte les noms d'apprenants pour lesquels la dernière étape est égal au texte et avec un événement non clôturé. Lorsqu'il y a plusieurs étapes pour un même apprenant le DISTINCT n'en compte qu'un.

                                                                      En tout cas un grand merci pour ta patience.

                                                                      donc la formule magique est celle-ci pour obtenir le résultat attendu :

                                                                      Count({<[Nom apprenant] = {"=MaxString([Nom étape]) = '01 - Préinscription portail'"}, [Evénement clôturé]={'NON'}>} DISTINCT [Nom apprenant]) +

                                                                      Count({<[Nom apprenant] = {"=MaxString([Nom étape]) = '02 - Dossier incomplet'"}, [Evénement clôturé]={'NON'}>} DISTINCT [Nom apprenant])

                                        • Re: aggrégation et count et analysis
                                          Christophe JOUVE

                                          Bonjour,

                                          L’aggr n’est nécessaire que dans le cas d’agrégations imbriquées (ex : le max de la somme de…).

                                          Dans votre cas, je ne vois pas où c’est nécessaire (sauf s’il manque queque chose dans votre texte d’explication). Donc, c’est plus simple :

                                           

                                          count( {$<[Nom étape]={'01 - Préinscription portail'},[Evénement clôturé]={'NON'}>} )

                                          Cdt

                                           

                                           

                                          Christophe Jouve

                                          Principal Solution Architect

                                           

                                           

                                          De : Jacky GAUD

                                          Envoyé : vendredi 10 mars 2017 15:58

                                          À : Christophe Jouve <Christophe.Jouve@qlik.com>

                                          Objet :  - aggrégation et count et analysis

                                           

                                           

                                           

                                           

                                            • Re: aggrégation et count et analysis
                                              Jacky GAUD

                                              bonjour,

                                              je veux compter combien j'ai d'étapes égales à '01 - Préinscription portail' ou '02 - Dossier incomplet' et avec un événement clôturé mais seulement lorsque je suis à ces dernières étapes. En effet un apprenant passe par des étapes successives et dans l'ordre et lorsque que l'on passe d'une étape à l'autre cela crée un nouvel événement.