Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

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

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.

1 Solution

Accepted Solutions
sfatoux72
Partner - Specialist
Partner - Specialist

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;

View solution in original post

12 Replies
Not applicable
Author

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,

Not applicable
Author

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

Not applicable
Author

j'obtiens en faite :

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

et rien dans les groupe 'b'.

sfatoux72
Partner - Specialist
Partner - Specialist

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
]
;

Not applicable
Author

Ça fonctionne, merci Sébastien !

Not applicable
Author

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.

sfatoux72
Partner - Specialist
Partner - Specialist

Que voulez-vous réellement faire?

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

Not applicable
Author

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

...

sfatoux72
Partner - Specialist
Partner - Specialist

Et ..

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