Skip to main content
Woohoo! Qlik Community has won “Best in Class Community” in the 2024 Khoros Kudos awards!
Announcements
Nov. 20th, Qlik Insider - Lakehouses: Driving the Future of Data & AI - PICK A SESSION
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Fonction Wildmatch, Graphique dynamique

Bonjour,

je souhaite créer un graphique dynamique.

L'utilisateur peut se créer 4 groupes personnalisés (grâce à des états alternatifs).

=IF(wildmatch([NomObjet],$NomObjetSélectionné1),NomGroupe1,

IF(wildmatch([NomObjet],$NomObjetSélectionné2),NomGroupe2,

  IF(wildmatch([NomObjet],$NomObjetSélectionné3),NomGroupe3,

  IF(wildmatch([NomObjet],$NomObjetSélectionné4),NomGroupe4,'Autres'

   )

   )

    )

  )

Le problème:

Si je ne sélectionne rien, NomGroupe1 s'affiche comme légende (au lieu de 'Autres') .

Si je sélectionne un objet dans le groupe 1 alors s'affiche NomGroupe1 et NomGroupe2 (Au lieu de NomGroupe1 et 'Autres').

ETC ...

En gros ca décale de 1 à chaque fois au niveau de l'affichage de la légende.

Avez vous une idée ???

merci

1 Solution

Accepted Solutions
sfatoux72
Partner - Specialist
Partner - Specialist

Salut Thomas,

Plusieurs petite erreurs:

  • Lorsqu'aucune sélection n'est faite, c'est comme si tout était sélectionné. Tu aurais pu facilement le constaté si tu avais mis une de tes variables dans un champ Texte.
    • ==> Il faut donc appliquer le concat sur code que si une sélection a été faite sur Nom
  • Ton WildMatch est mal utilisé, le premier paramètre doit être la chaîne de caractère principal (dans ton cas la concaténation de ta sélection) et les suivant la sous-chaine de caractère à rechercher avec des caractères de recherche (dans ton cas le code, mais il faut l'entourer du caractère *)
    • ==> Vu que j'ai qu'une chaine de caractères à rechercher à la  fois j'utiliserai le like

On a donc pour les variables :

  • Vmotif1  :    =if(GetSelectedCount([Nom], true(), 'etat1'), Concat(DISTINCT{[etat1]}[code],','), '')
  • Vmotif2  :    =if(GetSelectedCount([Nom], true(), 'etat2'), Concat(DISTINCT{[etat2]}[code],','), '')
  • Vmotif3  :    =if(GetSelectedCount([Nom], true(), 'etat3'), Concat(DISTINCT{[etat3]}[code],','), '')
  • Vmotif4  :    =if(GetSelectedCount([Nom], true(), 'etat4'), Concat(DISTINCT{[etat4]}[code],','), '')

Pour l'expression:

  • =IF('$(Vmotif1)' like '*'&[code]&'*',VRubrique1,
       
    IF('$(Vmotif2)' like '*'&[code]&'*',Vrubrique2,
           
    IF('$(Vmotif3)' like '*'&[code]&'*',vrubrique3,
               
    IF('$(Vmotif4)' like '*'&
    &'*',vrubrique4,
                    'Autres'
                )
            )
        )

L'application modifiée en pièce jointe

View solution in original post

17 Replies
kevinchevrier
Partner - Creator III
Partner - Creator III

Bonjour,

As-tu un jeu de données à nous transmettre ?

Je ne suis pas sûr que cette fonction soit adapté pour ce que tu souhaites.

As-tu essayé plus simplement :

=IF([NomObjet]=$NomObjetSélectionné1,NomGroupe1,

IF([NomObjet]=$NomObjetSélectionné2,NomGroupe2,

  IF([NomObjet]=$NomObjetSélectionné3,NomGroupe3,

  IF([NomObjet]=$NomObjetSélectionné4,NomGroupe4,'Autres'

   )

   )

    )

  )

Kevin

Not applicable
Author

Merci pour ta réponse Kevin.

Le problème est qu'il est possible de sélectionner plusieurs valeurs.

j'essai de mettre un doc dans la journée pour que ce soit plus clair

sfatoux72
Partner - Specialist
Partner - Specialist

Que contient $NomObjetSélectionné1 ?

Et quelle est l'expression qui construit $NomObjetSélectionné1 ?

Not applicable
Author

Voici un doc pour que ce soit plus clair.

L'utilisateur peut sélectionner plusieurs valeurs dans chaque liste de sélection.

A chaque fois la légende se décale de 1 :

Si je ne sélectionne rien, NomGroupe1 s'affiche comme légende (au lieu de 'Autres') .

Si je sélectionne un objet dans le groupe 1 alors s'affiche NomGroupe1 et NomGroupe2 (Au lieu de NomGroupe1 et 'Autres').

ETC ...

Merci pour votre aide

kevinchevrier
Partner - Creator III
Partner - Creator III

Bonjour Thomas,

Selon moi, le problème vient du fait que tu fais juste une comparaison sur le "Nom". Or chaque "Nom" n'est pas rattaché à un Groupe.

Tu devrais donc dans ton script faire un rattachement du Nom au Groupe puis utiliser ce nouveau champ en dimension.

Exemple :

load * inline [

code, Nom, Groupe

Kevin

Not applicable
Author

Le groupe est du texte que l'utilisateur peut modifier.

Mais chaque groupe contient les même valeurs "Nom"

kevinchevrier
Partner - Creator III
Partner - Creator III

Thomas,

Les 10 noms d'un groupe peuvent-ils être sélectionné en même temps ?

Kevin

Not applicable
Author

Oui mais si par exemple je sélectionne 2 noms dans le groupe 1, cela n'a pas d’intérêt de les re sélectionner dans l'un des autres groupes (vu que c'est les mêmes ).

sfatoux72
Partner - Specialist
Partner - Specialist

Salut Thomas,

Plusieurs petite erreurs:

  • Lorsqu'aucune sélection n'est faite, c'est comme si tout était sélectionné. Tu aurais pu facilement le constaté si tu avais mis une de tes variables dans un champ Texte.
    • ==> Il faut donc appliquer le concat sur code que si une sélection a été faite sur Nom
  • Ton WildMatch est mal utilisé, le premier paramètre doit être la chaîne de caractère principal (dans ton cas la concaténation de ta sélection) et les suivant la sous-chaine de caractère à rechercher avec des caractères de recherche (dans ton cas le code, mais il faut l'entourer du caractère *)
    • ==> Vu que j'ai qu'une chaine de caractères à rechercher à la  fois j'utiliserai le like

On a donc pour les variables :

  • Vmotif1  :    =if(GetSelectedCount([Nom], true(), 'etat1'), Concat(DISTINCT{[etat1]}[code],','), '')
  • Vmotif2  :    =if(GetSelectedCount([Nom], true(), 'etat2'), Concat(DISTINCT{[etat2]}[code],','), '')
  • Vmotif3  :    =if(GetSelectedCount([Nom], true(), 'etat3'), Concat(DISTINCT{[etat3]}[code],','), '')
  • Vmotif4  :    =if(GetSelectedCount([Nom], true(), 'etat4'), Concat(DISTINCT{[etat4]}[code],','), '')

Pour l'expression:

  • =IF('$(Vmotif1)' like '*'&[code]&'*',VRubrique1,
       
    IF('$(Vmotif2)' like '*'&[code]&'*',Vrubrique2,
           
    IF('$(Vmotif3)' like '*'&[code]&'*',vrubrique3,
               
    IF('$(Vmotif4)' like '*'&
    &'*',vrubrique4,
                    'Autres'
                )
            )
        )

L'application modifiée en pièce jointe