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 :

Set analysis: Récupérer le max d'une aggrégation avec count et Pas le cumul des maximums


Sujet :

QlikView

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    octobre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2019
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Set analysis: Récupérer le max d'une aggrégation avec count et Pas le cumul des maximums
    Bonjour,
    Je souhaite récupérer le maximum (de matricules) dans une aggrégation( avec un count), avec mes dimensions (calendrier [avec année mois et jour] et le nom des licence de serveurs), le set analysis me renvoie le cumul des maxs des licences, c'est-à-dire il fait la somme des max de chaque licence serveur alors que je voudrais juste qu'il me renvoie le nombre maximum de la licence la plus utilisée.

    Ci-joint le set analysis et des détails supplémentaires:

    Graphique: graphique combiné (barre pour les maximums et lignes pour les moyennes)
    Dimensions: calendrier cyclique, calendrier hiérachique et le les noms des licences pour les serveurs
    Expressions: max(aggr(count(Matricule), _cleServer_Lic))

    Exemple : pour le mois de septembre avec 3 type de licences, on a un maxi de 20 licences le 26/09
    Nom : 1.jpg
Affichages : 236
Taille : 14,4 Ko


    Alors que si on rentre dans le détail de la journée, le maxi est de 17 licences à 14 et 15h00

    Nom : 2.png
Affichages : 210
Taille : 5,2 Ko


    Ce qui est la réalité pour moi dans le nombre de licences utilisées à un instant T

    J'espére m'être faite comprendre.
    Merci

  2. #2
    Modérateur

    Inscrit en
    octobre 2006
    Messages
    1 605
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 1 605
    Points : 2 460
    Points
    2 460
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Est-il possible que vous nous fassiez un petit LOAD INLINE avec quelques données, afin que l'on puisse plus facilement vous aider ?

    Avec votre expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    max(aggr(count(Matricule), _cleServer_Lic))
    je ne vois pas comment le résultat peut correspondre à vos attentes si vous n'agrégez pas par les dimensions du graphique (au moins la date)

    Il est impératif que vous utilisiez toutes les dimensions de votre chart + la dimension sur laquelle vous souhaitez agréger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =max(aggr(count(Matricule), _cleServer_Lic, Matricule, [Dim_qui_contient_les_dates_dans_le_chart]))
    Là, il va faire un sous tableau, où pour chaque serveur / matricule / date, il retournera le nombre de fois où le matricule est utilisé.
    Ensuite, en se basant sur ce tableau temporaire, il affichera pour chaque serveur / date, la plus grande valeur qu'il a trouvé.

    N'oubliez pas de cocher la case "afficher les valeurs dans les segments", afin que les valeurs soient bien affichées dans les barres respectives.
    Attention ,dans un graphique en barre cumulé, si on demande d'afficher la valeur "totale" (les valeurs pas affichées dans les segments), Qlik ne va pas agréger selon la dimension supérieure : il va se contenter d'afficher la somme de chaque segment.
    Pour vous en convaincre, transformez votre graphique en pivot table et faites afficher les sous-totaux : vous constaterez que vous n'avez pas les mêmes valeurs.

    Nom : s9F1LXJ.png
Affichages : 246
Taille : 16,1 Ko


    Si l'idée est vraiment d'afficher 1 seule valeur au dessus des barres empilées, alors je vous conseille de :
    - ne pas afficher les valeurs sur votre expression principale (afin que les barres soient correctes)
    - créer une nouvelle expression qui ne sera affichée que sous forme de "valeur sur les points", qui sera agrégée à un niveau supérieur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =max(TOTAL <[Dim_qui_contient_les_dates_dans_le_chart]> aggr(count(Matricule), _cleServer_Lic, Matricule, [Dim_qui_contient_les_dates_dans_le_chart]))
    Nom : O9gb7gP.png
Affichages : 202
Taille : 4,3 Ko

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    octobre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2019
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour, merci pour votre réponse, un extrait du load ci-dessous

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    LOAD 
    	 FileTime0,
    	 _cleServer,
    	 Server_Lic,
    	 _cleServer_Lic,
    	 Matricule, 
    	  PC, 
    	  NumLicUsr,
    	 NumLicSrv, 
    	 as StartTime
    resident TMP
    where TYPE = 'USER'; //@1 <> 'Users';
    ;
    drop field FileTime0 from USERS;
     
    NoConcatenate
    SERVER:
    LOAD  Server,
    	 // Server,
    	 FileTime,
    	 _cleServer,
    	  LicTot, 
    	  LicUse
    resident TMP
    where @1 = 'Users';
    ;
     
    JOIN(USERS)
    LOAD _cleServer, FileTime, Server, LicTot, LicUse
    resident SERVER;
    J'ai essayé vos deux méthodes avec les champs DATE ou Year-Month-Day mais toujours pas le résultat souhaité
    Merci

  4. #4
    Modérateur

    Inscrit en
    octobre 2006
    Messages
    1 605
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 1 605
    Points : 2 460
    Points
    2 460
    Billets dans le blog
    5
    Par défaut
    Un "LOAD INLINE" est un script qui permet de mettre des données en dur.
    L'idée est d'avoir un jeu de données simple, avec uniquement les champs qui nous intéressent.
    Sur ce jeu de données, vous pouvez présenter le résultat que vous attendez.

    Souvent, le fait de simplifier son problème afin de l'expliquer permet de soi même trouver la solution !


    Par exemple, dans mon test, j'ai utilisé :
    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
    20
    21
    22
    data:
    LOAD * INLINE [
    Date, Serveur, Matricule
    1, Aaa, mat_1
    1, Aaa, mat_1
    1, Aaa, mat_1
    1, Aaa, mat_2
    1, Aaa, mat_3
    1, Bbb, mat_1
    1, Bbb, mat_4
    1, Bbb, mat_5
    2, Aaa, mat_1
    2, Aaa, mat_1
    2, Aaa, mat_1
    2, Aaa, mat_1
    2, Aaa, mat_1
    2, Aaa, mat_1
    2, Aaa, mat_2
    2, Aaa, mat_3
    2, Bbb, mat_4
    2, Bbb, mat_5
    ];

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    octobre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2019
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Vous me suggérez de mettre les 3 données en dur comme l'exemple que vous m'avez envoyé?
    Je ne pense pas que ça colle avec mon programme, ce sont des fichiers logs sur un réseau, je prends les données de là bas et les fichiers sont traités sur l'etl
    j'ai enlevé les "as" du load pour simplifier et je crois que ce n'était pas une bonne idée pour l'exemple, on a ce qui suit dans le script.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LOAD PurgeChar(@15,':') as Server,
    FileTime0,
    hash128(@15 & FileTime0) as _cleServer,

  6. #6
    Modérateur

    Inscrit en
    octobre 2006
    Messages
    1 605
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 1 605
    Points : 2 460
    Points
    2 460
    Billets dans le blog
    5
    Par défaut
    Non, je suggère que vous créiez un jeu de donné simple (2 dates, 3 serveurs, quelques matricules) et que sur ce jeu de données, vous nous indiquiez ce que vous attendez.

    S'il n'y a pas de problème de confidentialité de données, vous pouvez faire une table dans QlikView, mettre les champs de date, serveur matricule, et faire un filtre sur 2 journées.
    Ensuite vous collez ces infos dans un "LOAD INLINE".

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

Discussions similaires

  1. [XL-2003] Récupérer le max d'une colonne
    Par Aetycc dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 13/03/2015, 04h51
  2. Réponses: 3
    Dernier message: 05/09/2008, 10h32
  3. [MySQL] Récupérer le nom d'une colonne avec le nom de la table
    Par hacksi dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/06/2008, 11h15
  4. comment récupérer les données d'une paramètre avec cplex
    Par debalgo dans le forum Intelligence artificielle
    Réponses: 1
    Dernier message: 18/06/2008, 12h32
  5. Récupérer le résultat d'une requête SQL (count)
    Par niano dans le forum VBA Access
    Réponses: 6
    Dernier message: 07/09/2007, 11h41

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