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 :

Compter le nombre de valeur max


Sujet :

QlikView

  1. #1
    Membre régulier
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Février 2012
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Février 2012
    Messages : 131
    Points : 107
    Points
    107
    Par défaut Compter le nombre de valeur max
    Bonjour,

    Voici un exemple de ce que je souhaiterai faire sous QlikView sans passer par du SQL si possible.

    Data:

    ID | Inscription | Level | Type
    1 | 1 | 1 | G
    2 | 1 | 1 | E
    3 | 1 | 2 | E
    4 | 1 | 2 | G
    5 | 2 | 3 | E
    6 | 2 | 3 | G
    7 | 3 | 5 | E
    8 | 4 | 4 | E
    9 | 4 | 5 | E

    count = 9

    Je souhaiterai compter UNIQUEMENT les record dont le Level est le plus haut pour chaque Type par inscription, donc il ne doit me compter que ça :

    ID | Inscription | Level | Type
    3 | 1 | 2 | E
    4 | 1 | 2 | G
    5 | 2 | 3 | E
    6 | 2 | 3 | G
    7 | 3 | 5 | E
    9 | 4 | 5 | E

    Ca nous donne count = 6

    J'ai essayé quelque chose ressemblant à ceci mais ça ne me donne pas le bon résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    COUNT(IF(AGGR(Max(Level), [Inscription]),))

  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 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Miam miam, des bonnes agrégations qui donnent mal au crâne


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =count(distinct if(aggr(nodistinct max(Level), Inscription, Type) = Level, ID))

    Et pour vérifier que ça ne donne pas "6" par hasard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =concat(distinct if(aggr(nodistinct max(Level), Inscription, Type) = Level, ID), ', ')
    vous permet de voir les ID qui sont comptés.

  3. #3
    Membre régulier
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Février 2012
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Février 2012
    Messages : 131
    Points : 107
    Points
    107
    Par défaut
    Merci pour la réponse mais malheureusement je n'obtient pas le bon résultat

  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 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Très bizarre.

    J'ai chargé les données que vous avez fournies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Data:
    LOAD * INLINE [
    ID, Inscription, Level, Type
    1, 1, 1, G
    2, 1, 1, E
    3, 1, 2, E
    4, 1, 2, G
    5, 2, 3, E
    6, 2, 3, G
    7, 3, 5, E
    8, 4, 4, E
    9, 4, 5, E
    ];

    Et l'expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =concat(distinct if(aggr(nodistinct max(Level), Inscription, Type) = Level, ID), ', ')
    dans une zone de texte me retourne bien


    et le "count" me retourne 6.

    N'y a-t-il pas un autre champ en jeu dans vos données ?

  5. #5
    Membre régulier
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Février 2012
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Février 2012
    Messages : 131
    Points : 107
    Points
    107
    Par défaut
    Enfait au départ je dois récupérer les records répondant à la condition level = 1. Ce n'est pas difficile jusque ici, dans mon expression j'ai donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     COUNT(IF(level = 1), inscription))
    Donc en reprenant mon exemple, c'est les 4 premiers inscription.

    1, 1, 1, G
    2, 1, 1, E
    3, 1, 2, E
    4, 1, 2, G

    Ensuite à partir de ce résultat je dois récupérer le parent donc le Max(level).
    3, 1, 2, E
    4, 1, 2, G

    Est-ce qu'en modifiant votre code ça peut fonctionner ? Du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count(DISTINCT IF(aggr(nodistinct max(Level) AND level = 1, Inscription, Type) = Level, ID))
    Sinon pour répondre à votre question, oui il y a d'autres colonnes mais qui n'interviennent pas dans ce besoin. A moins qu'il faut les utiliser dans votre code pour que ça fonctionne ?

  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 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Je ne comprends pas ce que vous souhaitez faire.

    Vous donnez une expression qui doit retourner un comptage (un nombre), mais vous donnez comme résultat attendu un filtre sur les lignes.

    Pour moi, votre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COUNT(IF(level = 1), inscription))
    compte les inscriptions où le level est "1", ce qui est le cas de 2 lignes :
    1, 1, 1, G
    2, 1, 1, E

    Donc le résultat de la fonction doit être "2".

    Je ne comprends pas pourquoi vous attendez
    3, 1, 2, E
    4, 1, 2, G

    qui ont un level = 2.

  7. #7
    Membre régulier
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Février 2012
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Février 2012
    Messages : 131
    Points : 107
    Points
    107
    Par défaut
    Car level 2 est le parent de level 1 pour l'inscription 1 mais vu qu'il y a 2 fois level 2 pour cette inscription (1) alors il faut compter les deux.
    3, 1, 2, E
    4, 1, 2, G

    count = 2 (pour l'inscription 1)


    J'ai besoin de compter les parents donc le plus haut niveau pour chaque inscription par type. Excusez moi, je me suis mal exprimé et j'ai donné un mauvaise exemple :s donc je vais reprendre :

    Je ne dois compter le max(level) que pour les inscription qui ont eu un level 1.
    Si je reprend un exemple correcte :

    ID | Inscription | Level | Type
    1 | 1 | 1 | G
    2 | 1 | 1 | E
    3 | 1 | 2 | E
    4 | 1 | 2 | G
    5 | 2 | 1 | E
    6 | 2 | 3 | E
    7 | 3 | 5 | E
    8 | 4 | 1 | E
    9 | 4 | 4 | E
    10 | 5 | 1 | E
    11 | 5 | 2 | E
    12 | 5 | 3 | E
    13 | 6 | 3 | G
    14 | 6 | 3 | E
    15 | 6 | 4 | G
    16 | 6 | 4 | E

    Ce que je dois compter :

    3 | 1 | 2 | E
    4 | 1 | 2 | G
    6 | 2 | 3 | E
    9 | 4 | 4 | E
    12 | 5 | 3 | E

    Donc mon count doit me donner 5

  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 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Je ne comprends toujours pas.

    Vous voulez compter le nombre le lignes qui sont le max level, pour lequel il y a un "level = 1".
    Donc autant compter directement le nombre de lignes qui ont un level 1, car on ne veut que ceux qui ont un level 1, et ceux qui ont un level 1 ont forcement quelque part un max (que ce soit la ligne en question ou une autre).

    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COUNT(IF(level = 1, inscription))
    retourne 5, le résultat attendu.


    A moins qu'en réalité, vous ne souhaitez pas compter les lignes, mais afficher un tableau qui affiche ces lignes. Et du coup ça n'a rien à voir avec ce dont on parle depuis le début.

  9. #9
    Membre régulier
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Février 2012
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Février 2012
    Messages : 131
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par PhunkyBob Voir le message
    Donc autant compter directement le nombre de lignes qui ont un level 1, car on ne veut que ceux qui ont un level 1, et ceux qui ont un level 1 ont forcement quelque part un max (que ce soit la ligne en question ou une autre).
    Non justement, on ne doit pas compter la ligne en question. Donc si le MAX vaut 1, on doit pas compter. J'ai oublié d'illustrer ce cas dans mon exemple. Pas évident de penser à tout :s

    Je dois faire un graph avec 2 barres :
    - count des inscriptions dont level = 1 (bar A)
    - count des Max(level) de A en excluant A (bar B)

    Donc attention, les inscription qui se retrouvent dans la 1er barre ne doit pas se retrouver dans la seconde. Sinon j'aurai 2 même count comme illustré sur mon petit dessin sur le graph de gauche.

    Pour résumer on doit compter les inscriptions dont le level = 1 et dont le MAX ne doit pas valoir 1.
    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 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par stylor Voir le message
    Donc pour résumer on doit compter les inscriptions dont le level = 1 et dont le MAX ne doit pas valoir 0.
    Je suppose qu'il faut lire "compter les inscriptions pour lesquelles il existe un parent de niveau 1, et dont le max ne doit pas valoir 1" ?

    Donc c'est la même formule, mais en rajoutant les conditions :
    - Le niveau doit être différent de 1
    - Le niveau min doit valoir 1


    La liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =concat(DISTINCT IF(aggr(nodistinct max(Level), Inscription, Type) = Level and Level <> 1 and aggr(nodistinct min(Level), Inscription, Type) = 1, ID), ', ')
    Le comptage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =count(DISTINCT IF(aggr(nodistinct max(Level), Inscription, Type) = Level and Level <> 1 and aggr(nodistinct min(Level), Inscription, Type) = 1, ID))

  11. #11
    Membre régulier
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Février 2012
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Février 2012
    Messages : 131
    Points : 107
    Points
    107
    Par défaut
    J'ai fais un dessin juste au-dessus de votre réponse.

  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 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Désolé, mais je laisse tomber.

    A chaque fois que je donne une expression qui répond à la question, la question change...

  13. #13
    Membre régulier
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Février 2012
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Février 2012
    Messages : 131
    Points : 107
    Points
    107
    Par défaut
    Je me suis mal exprimé ou donné de mauvaises exemple mais je pense que vous avez compris. Je ne peux pas essayer je dois attendre lundi au boulot

Discussions similaires

  1. Compter le nombre de valeurs unqiues
    Par camboui dans le forum SL & STL
    Réponses: 17
    Dernier message: 03/12/2007, 18h30
  2. [TCD]Compter le nombre de valeurs distinctes
    Par xaramelaz dans le forum Excel
    Réponses: 2
    Dernier message: 16/08/2007, 20h37
  3. Compter le nombre de valeur en rouge
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/05/2007, 14h18
  4. Compter le nombre de valeurs différentes
    Par solorac dans le forum Excel
    Réponses: 6
    Dernier message: 21/04/2007, 16h13
  5. [Excel] Compter le nombre de valeurs
    Par Malach dans le forum Excel
    Réponses: 3
    Dernier message: 06/04/2006, 00h04

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