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 sans fonction d’agrégation


Sujet :

QlikView

  1. #1
    Membre du Club
    Inscrit en
    Mai 2013
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 112
    Points : 54
    Points
    54
    Par défaut Set analysis sans fonction d’agrégation
    Bonjour,

    Est il possible d’utiliser une fonction set analysis sans placer une fonction d’agrégation devant ?

    J’ai un tableau dans le lequel je veux simplement afficher dans une colonne (dimension ou expression) les valeurs d’un champ selon certains critères.
    Par exemple l’équivalent de cette expression : ({<Famille={Application}, Etat={Actif}>}NomProduit)

    Je sais qu’en passant par le script on peut facilement coder ce genre d’expression avec des if pour arriver à ce que je veux, mais je voulais savoir si c’était possible de faire cela sans passer par le script.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    Le set analysis permet une analyse sur un ensemble d'enregistrements, donc il n'est valable que pour une aggrégation.

    Si on veut indiquer une valeur ou une autre selon une condition et pour une ligne de détail, il suffit de passer par la fonction if.

    mais je voulais savoir si c’était possible de faire cela sans passer par le script.
    If peut être indiqué dans une expression de graphique, sans passer par le script ...

  3. #3
    Membre régulier
    Femme Profil pro
    Stagiaire informatique décisionnelle
    Inscrit en
    Mars 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Stagiaire informatique décisionnelle
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2014
    Messages : 81
    Points : 71
    Points
    71
    Par défaut
    Je me retrouve un petit peu avec la même problématique.
    Suite à une liste de sélection contenant une condition IF réalisée sur 6 millions de lignes, ma mémoire vive ne tenait pas le choc. J'ai donc essayé de suivre les conseils de PhunkyBob et je me suis penchée toute la journée sur l'optimisation avec un SET ANALYSIS.
    Voici le lien de la conversation initiale : http://www.developpez.net/forums/d12...n-ram-requise/

    Le script initial de ma liste de sélection était le suivant :
    D'ailleurs, l'utilisation d'un distinct s'avère nécessaire.

    Mon script avec l'utilisation d'un SET ANALYSIS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Sum({$<Id_RUM={"=Count(DISTINCT[Id_RUM])>=2"}>}[Id_RSA])
    Premier problème : je ne veux pas sommer les id_RSA mais seulement les retourner. La fonction d'agrégation est donc inutile et fausse.
    Deuxième problème : ce code me retourne 0. Je dois mettre trompée quelque part...

    Tout les jours, un nouveau problème Qlikview

  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
    Pouvez-vous indiquer ce que vous souhaitez faire exactement ?

    Votre première expression retourne la liste des RSA dont le RUM est >=2 et la deuxième retourne la liste des RSA pour lesquels il y a au moins 2 RUM distincts.


    Généralement, les Set Analysis sont utilisés sur les expressions des graphiques, pour réduire l'ensemble initial de calcul.



    Pouvez-vous créer des nouveaux fil de discussion plutôt que reprendre un fil dont le sujet n'est pas vraiment lié à votre problème ?
    Ca sera plus simple pour indiquer si le sujet est réglé ou non.

  5. #5
    Membre régulier
    Femme Profil pro
    Stagiaire informatique décisionnelle
    Inscrit en
    Mars 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Stagiaire informatique décisionnelle
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2014
    Messages : 81
    Points : 71
    Points
    71
    Par défaut
    Je souhaite en fait afficher la liste des id_RSA qui ont plusieurs RUM (donc deux RUM au moins distinct). Je ne comprends pas pourquoi mon SET ANALYSIS ne marche pas dans ces cas là

  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 pourquoi mon SET ANALYSIS ne marche pas dans ces cas là
    Parce que vous essayez de faire une somme dans une expression sensée sortir une liste de sélection.



    La version avec un "if" s'écrit comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =if(aggr(count(distinct id_RUM), id_RSA) >= 2, id_RSA)
    "si, quand on compte le nombre de RUM par RSA, on obtient un chiffre supérieur ou égal à 2, alors on prend le RSA"


    La version avec un set analysis s'écrit comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =aggr(only({$ <id_RSA={'=count(distinct id_RUM) >= 2'}>} id_RSA), id_RSA)
    "on fait la liste des RSA qui répondent à la condition "count(RUM) >= 2""


    Une autre solution consiste à rajouter une expression "nombre de RUM" dans la liste des "RSA" et trier la liste par nombre de RUM décroissant.

    Voire même trier par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rangemin(count(distinct id_RUM), 2)
    ce qui fait que tous ceux qui ont 2 RUM et plus seront en haut de la liste, et les autres en bas.
    Si vous mettez en plus une autre condition de tri (ordre alphabétique), celle-ci sera conservée car on aura au maximum "2" pour toutes les valeurs de RSA qui ont 2 et plus.


    A voir à l'utilisation ce qui est le plus rapide.

  7. #7
    Membre régulier
    Femme Profil pro
    Stagiaire informatique décisionnelle
    Inscrit en
    Mars 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Stagiaire informatique décisionnelle
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2014
    Messages : 81
    Points : 71
    Points
    71
    Par défaut
    Je commence à mieux comprendre la logique. Je ne savais pas que je pouvais utiliser la fonction "aggr" pour résoudre mon problème, j'ai d'ailleurs du mal à comprendre l'intérêt de cette fonction. Elle agrège comment ? A quoi correspond elle en SQL ?
    L'utilisation d'un set analysis est vraiment flagrant. Mon requêtage est quasi instantané, je n'ai plus de message concernant la mémoire vive et cela ne rame plus

    Il y a aussi l'utilisation du "Only" que je ne comprends pas. Pourquoi devoir le mettre dans ce cas ci ? Ce n'est pas sous-entendu dans l'utilisation du set analysis ?

  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
    j'ai d'ailleurs du mal à comprendre l'intérêt de cette fonction. Elle agrège comment ? A quoi correspond elle en SQL ?
    A agréger selon 1 ou plusieurs dimensions, c'est à dire "calculer le résultat pour chaque combinaison de XXX".
    C'est l'équivalent d'un "GROUP BY" en SQL.


    Il y a aussi l'utilisation du "Only" que je ne comprends pas. Pourquoi devoir le mettre dans ce cas ci ? Ce n'est pas sous-entendu dans l'utilisation du set analysis ?
    Le set analysis ne peut être utilisé que sur des fonctions d'agrégation (somme, comptage, min, ...). La fonction "only" est une fonction d'agrégation qui fait "donner la seule valeur possible s'il n'y a qu'1 valeur possible".

    Si on n'utilisait pas le "only", où mettrait-on la syntaxe du Set Analysis ?

  9. #9
    Membre régulier
    Femme Profil pro
    Stagiaire informatique décisionnelle
    Inscrit en
    Mars 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Stagiaire informatique décisionnelle
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2014
    Messages : 81
    Points : 71
    Points
    71
    Par défaut
    Ok pour la fonction "Aggr" !
    En revanche, je n'ai toujours pas compris le Only Aggr est une fonction d'agrégation non ? Donc pourquoi utiliser Only en plus ?
    Merci encore pour toutes les réponses.

  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 SteffieLili Voir le message
    En revanche, je n'ai toujours pas compris le Only Aggr est une fonction d'agrégation non ? Donc pourquoi utiliser Only en plus ?
    Merci encore pour toutes les réponses.
    Aggr est un fonction qui permet d'agréger par des dimensions spécifiques.
    Sum, Min, Max, Count, ... et Only sont des fonctions qui permettent de faire une mesure sur des données agrégées. Et par défaut, l'agrégation se fait sur :
    - "tout", si on est dans une zone de texte) --> 1 seule valeur sera affichée, qui correspond à la mesure globale
    - chaque valeur de la dimension / combinaison de valeurs de dimensions, si on est dans un tableau --> il y aura autant de valeur que de valeurs de la dimension


    Si j'utilise l'expression suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aggr(sum(mesure), dim))
    ça veut dire que QlikView va, pour chaque valeur de "dim", faire la somme des "mesure".

    Il n'est pas possible d'utiliser de Set Analysis dans un "aggr", car ça ne sert que à dire selon quelles dimensions on veut que le calcul soit fait.



    La fonction "only" permet de retourner la seule valeur possible d'un champ, si elle est unique. Dans le cas contraire, elle retourne null ("-").

    Dans votre expression, vous voulez que pour chaque RSA on retourne quelque chose. Ce quelque chose, c'est le RSA !

Discussions similaires

  1. Que retourne un GROUP BY sans fonction d'agrégation?
    Par Maniz dans le forum Requêtes
    Réponses: 4
    Dernier message: 27/06/2012, 11h05
  2. Réponses: 7
    Dernier message: 24/10/2011, 21h49
  3. Marche seulement sans fonction
    Par swissmade dans le forum Langage
    Réponses: 3
    Dernier message: 20/03/2007, 12h48
  4. set username en fonction d'une ip
    Par echneu dans le forum Développement
    Réponses: 2
    Dernier message: 14/12/2005, 16h16
  5. Que se passe t-il sans fonction exit?
    Par Poseidon13 dans le forum C
    Réponses: 7
    Dernier message: 21/10/2005, 18h47

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