IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

QlikView Discussion :

Sélection sur champ non renseigné


Sujet :

QlikView

  1. #1
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2019
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2019
    Messages : 52
    Points : 44
    Points
    44
    Par défaut Sélection sur champ non renseigné
    Bonjour

    Sous Qliksense, dans l'expression ci-dessous, j'affiche le champ Agence si la condition qui précède est vrai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<='50' and MBPUIT=2,Agence)
    Ca fonctionne. Mais je souhaite ajouter la condition : champ XXX n'est pas renseigné.

    J'ai tenté XXX = ' ' et XXX = '' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<='50' and MBPUIT=2 and XXX=' ',Agence)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<='50' and MBPUIT=2 and XXX='',Agence)
    Mais cela ne fonctionne pas. Comment tester qu'un champ n'est pas renseigné (est à blanc ou vide) ?
    Merci d'avance

  2. #2
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 531
    Points
    2 531
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    La fonction "isnull()" retourne vrai (-1) si le champ testé est vide.

  3. #3
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2019
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2019
    Messages : 52
    Points : 44
    Points
    44
    Par défaut
    Cela ne fonctionne toujours pas. Voici ma syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<='80' and MBPUIT=2 and Isnull(MBSUNO),Agence)
    Cela me renvoie un tiret.

  4. #4
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 531
    Points
    2 531
    Billets dans le blog
    6
    Par défaut
    Que souhaitez-vous filtrer avec
    ?
    Normalement les opérateurs "<" et ">" sont réservés aux données numériques, pas aux données texte.


    Etes-vous certain que le champ MBSUNO est null et pas seulement vide ?

    Avec les données suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Agence:
    LOAD * INLINE [
    Agence
    Agence 1
    Agence 2
    Agence 3
    Unwanted agence
    Agence 4
    Agence 5
    ];
     
    LEFT JOIN (Agence)
    LOAD * INLINE [
    Agence, MBSUNO
    Agence 2, Oui
    Agence 3, Non
    Agence 5, Peut-être
    ];
    Si je fais une liste avec comme expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =if(left(Agence, 1) <> 'U' and isnull(MBSUNO), Agence)
    j'obtiens bien les valeurs attendues.

    Ca n'aurait pas été le cas si les valeurs étaient seulement vides.

  5. #5
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2019
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2019
    Messages : 52
    Points : 44
    Points
    44
    Par défaut
    Et du coup, comment tester si la valeur est vide ?
    J'indiquais MBSUNO = ' ' ou MBSUNO = ''

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<='50' and MBPUIT=2 and MBSUNO=' ',Agence)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<='50' and MBPUIT=2 and MBSUNO='',Agence)
    Mais ce n'est pas bon

  6. #6
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 531
    Points
    2 531
    Billets dans le blog
    6
    Par défaut
    Pouvez-vous répondre à cette question ?

    Citation Envoyé par PhunkyBob Voir le message
    Que souhaitez-vous filtrer avec
    ?
    Normalement les opérateurs "<" et ">" sont réservés aux données numériques, pas aux données texte.

    Je vous invite à tester les conditions 1 par 1 pour vérifier laquelle pose réellement problème.

  7. #7
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2019
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2019
    Messages : 52
    Points : 44
    Points
    44
    Par défaut
    Voici mon tableau :

    Nom : Capture.PNG
Affichages : 164
Taille : 11,4 Ko

    avec pour chaque colonne, l'expression suivante
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2,Agence) pour la colonne 1
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2,MBITGR) pour la colonne 2
    etc...
    C'est OK pour ça, pas de soucis.

    Par contre, je ne souhaite que les lignes où la dernière colonne (fournisseur) n'est pas renseignée.
    Lorsque je récupère les données sous excel, la colonne fournisseur (MBSUNO) non renseignée est considérée Vide

    J'ai tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2 and Isnull(MBSUNO),Agence) 
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2 and MBSUNO = '',Agence)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2 and MBSUNO = ' ',Agence)
    Ça ne fonctionne pas. Avez vous une idée pour m'aider ?

  8. #8
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 531
    Points
    2 531
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je n'avais pas compris que vous étiez dans un tableau.

    Pour faire un tel tableau, la bonne manière est de mettre des dimensions :
    - Agence
    - MBITGR
    - ...

    Et une expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2 and Isnull(MBSUNO),Agence)
    Mais que souhaitez vous afficher quand une même agence est à la fois dans une ligne compatible ET une ligne incompatible ?

  9. #9
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2019
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2019
    Messages : 52
    Points : 44
    Points
    44
    Par défaut
    Bonjour

    Désolée, je n'ai pas été assez explicite.
    Dans mon tableau, chaque colonne est une dimension : agence / groupe article / article / désignation / Statut MMS001 / code acquisition / Fournisseur.

    L'expression de chaque colonne est la même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2,agence)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2,groupe article)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2,article)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2,designation)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2,statut)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2,code acquisition)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2,fournisseur)
    Jusque là, ça fonctionne :

    Nom : Capture3.PNG
Affichages : 157
Taille : 14,7 Ko

    Mais je souhaite y ajouter une sélection pour n'afficher que les lignes où la valeur n'est pas renseignée dans la colonne Fournisseur.
    Je ne souhaite que les lignes où Fournisseur est à blanc ci dessus (entouré en rouge).

    Logiquement, ça devrait fonctionner avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2 and MBSUNO = ' ',agence)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2 and MBSUNO = ' ',groupe article)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2 and MBSUNO = ' ',article)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2 and MBSUNO = ' ',designation)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2 and MBSUNO = ' ',statut)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2 and MBSUNO = ' ',code acquisition)
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2 and MBSUNO = ' ',fournisseur)
    Mais cela ne fonctionne pas.
    Images attachées Images attachées  

  10. #10
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 531
    Points
    2 531
    Billets dans le blog
    6
    Par défaut
    Si chaque colonne est une dimension et que vous appliquez le même filtre dessus, il est bien plus propre de mettre vos dimensions sans filtre et de ne le mettre uniquement dans votre expression de mesure.

    Avez-vous testé ce que je vous ai donné en exemple ?

    Pouvez-vous donner un jeu de données (factice) ? Ca sera plus simple si on parle de la même chose.

  11. #11
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2019
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2019
    Messages : 52
    Points : 44
    Points
    44
    Par défaut
    Mais je n'ai pas besoin de mesure.
    Je suis en train de monter un contrôle sur le référentiel articles de la base de données d'un ERP.
    Mon tableau ne comprend que des dimensions, il n'y a pas de mesures. Je n'ai pas besoin de faire de somme, etc.
    J'ai juste besoin de vérifier que le référentiel est correctement paramétré dans l'ERP avec lequel nous travaillons.

    Donc j'utilise un graphique de type Table

  12. #12
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 531
    Points
    2 531
    Billets dans le blog
    6
    Par défaut
    Mon avis est que ça serait beaucoup plus simple et plus performant de faire un tableau avec des dimensions et 1 mesure qui contient tous les filtres, quitte à faire en sorte que cette mesure sorte la valeur d'une dimension, ce qui visuellement rendrait exactement pareil.

  13. #13
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2019
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2019
    Messages : 52
    Points : 44
    Points
    44
    Par défaut
    J'ai trouvé la solution.

    Voici le sélection que je fais pour que cela fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =if(Agence<>'A00' and left(Agence,1)<>'U' and MMSTAT<80 and MBPUIT=2 and left(MBSUNO,1)=' ',Agence)
    La champ MBSUNO est de type alphanumérique dans ma base de données ERP. Or les valeurs sont toujours numériques.
    Je pense que le problème vient de là.
    Maintenant j'ai ce que je souhaitais :

    Nom : Capture4.PNG
Affichages : 153
Taille : 12,0 Ko

    Merci PhunkyBob pour avoir réfléchi sur mon problème, et désolée si je n'étais pas claire !
    Merci encore !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Jointure sur champ non unique.
    Par defcon_suny dans le forum Langage SQL
    Réponses: 17
    Dernier message: 28/05/2008, 16h16
  2. mettre en couleur les champs non renseignés.
    Par maysa dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/09/2007, 20h15
  3. [MySQL] Problème affichage lorsque champ non renseigné
    Par fannoche dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/04/2007, 11h10
  4. [vb.net][LDAP]Problème sur champs non renseignés NULL
    Par JFLESUEUR dans le forum ASP.NET
    Réponses: 2
    Dernier message: 14/12/2006, 17h02
  5. Réponses: 9
    Dernier message: 28/07/2006, 18h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo