Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
Voici le résultat obtenu avec vos données:
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;
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,
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
j'obtiens en faite :
5 éléments dans le groupe 'a' : A, AB, A, AB, A
et rien dans les groupe 'b'.
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
];
Ça fonctionne, merci Sébastien !
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.
Que voulez-vous réellement faire?
Car pour répondre à votre première question, il n'est pas nécessaire d'utiliser * et ?
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
...
Et ..
Tu veux compter ceux qui on t des a et ou des b, ou là aussi c'est différent?