12 Replies Latest reply: Mar 2, 2017 9:13 AM by Alexandre Lepinet RSS

    Création de groupe, problème if, elseif

    Alexandre Lepinet

      Bonjour à tous,

       

      Je vous expose mon problème :

       

      Ma base teste :

      test
      A
      AB
      A
      AB
      A

       

      Code au chargement de Qlik Sense :

      LOAD [test],

        if(WildMatch(enseigne, '*A*'), 'a',

          if(WildMatch(enseigne, '*B*'), 'b'))

          FROM....

       

      Le but est de créer un tableau qui compte 'a' (donc les A et les AB) et 'b' (les AB).

       

      Merci pour votre aide.

        • Re: Création de groupe, problème if, elseif
          charles cardot

          Bonjour,

           

          Si c'est une fonction de script, il faudrait rajouter un "as []" à la fin :

           

            if(WildMatch(enseigne, '*A*'), 'a',if(WildMatch(enseigne, '*B*'), 'b')) as [TEST]

           

          Cordialement,

            • Re: Création de groupe, problème if, elseif
              Alexandre Lepinet

              Bonjour Charles,

               

              Merci pour ta réponse.

               

              En relisant mon post, je me rend compte que je n'expose pas vraiment le problème que je rencontre. Ce n'est pas la création des groupes en eux-mêmes qui me pose problème mais la manière dont-ils sont fait.

               

              En chargeant le code ci-dessus, toutes mes données son classées dans le groupe 'a' et rien dans le groupe 'b'.

              if(WildMatch(enseigne, '*A*'), 'a',  indique bien cela mais avec  if(WildMatch(enseigne, '*B*'), 'b'  je devrais aussi retrouver mes 'AB' dans 'b'.

               

              J'espère être plus clair cette fois

              • Re: Création de groupe, problème if, elseif
                Alexandre Lepinet

                j'obtiens en faite :

                5 éléments dans le groupe 'a' : A, AB, A, AB, A

                et rien dans les groupe 'b'.

                  • Re: Création de groupe, problème if, elseif
                    Sébastien Fatoux

                    Il faut simplement faire une jointure avec une table définissant tes groupes, comme ceci :

                     

                    Teste:
                    LOAD *
                    INLINE [
                         Test
                         A
                         AB
                         A
                         AB
                         A
                    ]
                    ;

                    Left Join(Teste)
                    LOAD *
                    INLINE [
                         Test, Groupe
                         A, a
                         AB, a
                         AB, b
                    ]
                    ;

                      • Re: Création de groupe, problème if, elseif
                        Alexandre Lepinet

                        Ça fonctionne, merci Sébastien !

                        • Re: Création de groupe, problème if, elseif
                          Alexandre Lepinet

                          Je reviens finalement dessus.

                          Le but était aussi de pouvoir utiliser des caractères génériques (* et ?), je n'y arrive pas avec votre méthode Sébastien.

                            • Re: Création de groupe, problème if, elseif
                              Sébastien Fatoux

                              Que voulez-vous réellement faire?

                               

                              Car pour répondre à votre première question, il n'est pas nécessaire d'utiliser * et ?

                                • Re: Création de groupe, problème if, elseif
                                  Alexandre Lepinet

                                  En réalité ma base n'est pas composée de A et de AB mais plutôt de données comme celles-ci :

                                   

                                  Enseigne :

                                  BDDF

                                  BDDFCDN

                                  BDDFCDNGTPS

                                  BDDFCDNPRIV/FRA

                                  BDDFGTPS

                                  BDDFPRIV/FRA

                                  BDDF, CDN

                                  BDDF, CDN, GTPS

                                  BDDF, CDN, GTPS, TRANSACTIS

                                  BDDF, CDN, IBFS

                                  BDDF, DC

                                  BSC

                                  CDN

                                  DC

                                  Groupe

                                  GBIS

                                  ...

                                    • Re: Création de groupe, problème if, elseif
                                      Sébastien Fatoux

                                      Et ..

                                       

                                      Tu veux compter ceux qui on t des a et ou des b, ou là aussi c'est différent?

                                        • Re: Création de groupe, problème if, elseif
                                          Alexandre Lepinet

                                          Je souhaite compter les *BDDF*, les *CDN*, les *GTPS* etc.

                                          Je veux aussi que pour BDDFCDN par exemple, Qlik le compte une fois comme un *BDDF* et une autre fois comme un *CDN*. Pour l'instant, à partir du moment ou Qlik a  compté BDDFCDN une première fois, il ne le reclasse pas une seconde fois.

                                           

                                          Mon code ressemble à ça :

                                           

                                          if(WildMatch("Enseigne utilisatrice", '*BDDF*') , 'BDDF', //CREATION DU CHAMPS GroupeEnseigne

                                                if(WildMatch("Enseigne utilisatrice", '*DC*')

                                                  or WildMatch("Enseigne utilisatrice", '*Groupe*')

                                                  or WildMatch("Enseigne utilisatrice", '*Réseau*')

                                                  or WildMatch("Enseigne utilisatrice", '*BSC*')

                                                  or WildMatch("Enseigne utilisatrice", '*Ligne Métier*')

                                                  or WildMatch("Enseigne utilisatrice", '*Pôle*')

                                                  or WildMatch("Enseigne utilisatrice", '*RBDF*')

                                                  or WildMatch("Enseigne utilisatrice", '*RESG*'), 'BSC',

                                                if(WildMatch("Enseigne utilisatrice", '*GTPS*'), 'GTPS',

                                                if(WildMatch("Enseigne utilisatrice", '*CDN*'), 'CDN',

                                                if(WildMatch("Enseigne utilisatrice", '*IBFS*'), 'IBFS',

                                                if(WildMatch("Enseigne utilisatrice", '*FRANFINANCE*'), 'FRANFINANCE',

                                                if(WildMatch("Enseigne utilisatrice", '*TRANSACTIS*'), 'GTPS',

                                                if(WildMatch("Enseigne utilisatrice", 'Cellule_Vide'), 'Cellule_Vide',

                                                if(not WildMatch("Enseigne utilisatrice", '*BDDF*')

                                                  or not WildMatch("Enseigne utilisatrice", '*DC*')

                                                  or not WildMatch("Enseigne utilisatrice", '*Groupe*')

                                                  or not WildMatch("Enseigne utilisatrice", '*Réseau*')

                                                  or not WildMatch("Enseigne utilisatrice", '*BSC*')

                                                  or not WildMatch("Enseigne utilisatrice", '*Ligne Métier*')

                                                  or not WildMatch("Enseigne utilisatrice", '*Pôle*')

                                                  or not WildMatch("Enseigne utilisatrice", '*RBDF*')

                                                  or not WildMatch("Enseigne utilisatrice", '*RESG*')

                                                  or not WildMatch("Enseigne utilisatrice", '*GTPS*')

                                                  or not WildMatch("Enseigne utilisatrice", '*CDN*')

                                                  or not WildMatch("Enseigne utilisatrice", '*SIMBA*')

                                                  or not WildMatch("Enseigne utilisatrice", '*FRANFINANCE*')

                                                  or not WildMatch("Enseigne utilisatrice", '*GTPS*'), 'Autres'

                                                  )))))))))

                                           

                                          Désolé pour ces fragments de réponse à chaque fois, j'espère que c'est plus clair maintenant.

                                            • Re: Création de groupe, problème if, elseif
                                              Sébastien Fatoux

                                              Voici le résultat obtenu avec vos données:

                                               

                                              Community_1222152.png

                                               

                                              Et le script suivant :

                                               

                                              Enseigne:
                                              LOAD Enseigne
                                              Inline [
                                                   Enseigne
                                                   BDDF
                                                   BDDFCDN
                                                   BDDFCDNGTPS
                                                   BDDFCDNPRIV/FRA
                                                   BDDFGTPS
                                                   BDDFPRIV/FRA
                                                   BDDF, CDN
                                                   BDDF, CDN, GTPS
                                                   BDDF, CDN, GTPS, TRANSACTIS
                                                   BDDF, CDN, IBFS
                                                   BDDF, DC
                                                   BSC
                                                   CDN
                                                   DC
                                                   Groupe
                                                   GBIS
                                              ]
                                              ;

                                              tmpDistinctEnseigne:
                                              LOAD Distinct
                                                  
                                              Enseigne as DistinctEnseigne
                                              Resident Enseigne;

                                              tmpCritèreGroupe:
                                              LOAD * Inline [
                                                   Critère, Groupe
                                                   *BDDF*, BDDF
                                                   *DC*, BSC
                                                   *Groupe*, BSC
                                                   *Réseau*, BSC
                                                   *BSC*, BSC
                                                   *Ligne Métier*, BSC
                                                   *Pôle*, BSC
                                                   *RBDF*, BSC
                                                   *RESG*, BSC
                                                   *GTPS*, GTPS
                                                   *CDN*, CDN
                                                   *IBFS*, IBFS
                                                   *FRANFINANCE*, FRANFINANCE
                                                   *TRANSACTIS*, GTPS
                                                   Cellule_Vide, Cellule_Vide
                                              ]
                                              ;


                                              //Initialisation de la structure
                                              tmpGroupe:
                                              LOAD *
                                              INLINE [
                                                   EnseigneGroupée, Groupe
                                              ]
                                              ;

                                              LET ligneCritereGroupe = NoOfRows('tmpCritèreGroupe');

                                              FOR i=0 to $(ligneCritereGroupe)-1 // parcourt toutes les ligne

                                                  
                                              LET vCritère = Peek('Critère',$(i), 'tmpCritèreGroupe');
                                                  
                                              LET vGroupe = Peek('Groupe',$(i), 'tmpCritèreGroupe');

                                                  
                                              Concatenate(tmpGroupe)
                                                  
                                              LOAD
                                                      
                                              DistinctEnseigne as EnseigneGroupée,
                                                       '$(vGroupe)'
                                              as Groupe
                                                  
                                              Resident
                                                       tmpDistinctEnseigne
                                                  
                                              Where
                                                      
                                              DistinctEnseigne like '$(vCritère)';
                                              NEXT

                                              Concatenate(tmpGroupe)
                                              LOAD
                                                  
                                              DistinctEnseigne as EnseigneGroupée,
                                                   'Autres'
                                              as Groupe
                                              Resident
                                                   tmpDistinctEnseigne
                                              Where
                                                  
                                              not Exists(EnseigneGroupée, DistinctEnseigne);


                                              Left Join(Enseigne)
                                              LOAD
                                                  
                                              EnseigneGroupée as Enseigne, // key
                                                  Groupe
                                              Resident tmpGroupe;

                                               
                                              DROP Table tmpGroupe;
                                              DROP Table tmpCritèreGroupe;
                                              DROP Table tmpDistinctEnseigne;