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 :

Problème de Count() avec valeur Max


Sujet :

QlikView

  1. #1
    Membre à l'essai
    Homme Profil pro
    Gestionnaire Analyste Base de Données
    Inscrit en
    Novembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Gestionnaire Analyste Base de Données

    Informations forums :
    Inscription : Novembre 2011
    Messages : 13
    Points : 20
    Points
    20
    Par défaut Problème de Count() avec valeur Max
    Bonjour,

    Je suis entrain de travailler sur des Audits
    Voici une liste de mes deux fournisseurs (exemple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Fournisseur	Audit Type	Date de conduite	Result
    Truc1		Test		01/06/2011		Acceptable
    Truc1		Test		01/03/2012		Non Acceptable
    Truc1		Test		01/04/2012		Acceptable
    Truc2		Test		01/06/2011		Acceptable
    Truc2		Test		01/03/2012		Acceptable
    Truc2		Test		01/04/2012		Non Acceptable
    Je souhaiterais à partir de cette liste déterminer dans un objet texte combien de fournisseurs ont un audit acceptable depuis moins de trois ans en me basant uniquement sur le dernier audit de chaque fournisseur.

    En mettant cette expression, je calcul le nombre de fournisseurs ayant un audit "Acceptable" depuis moins de trois ans mais je ne tiens pas compte du dernier audit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count({< [Audit Type]= {'Test'}, Result={'Acceptable'} >} DISTINCT if([Conducted Date] > AddYears(Today(),-3),Fournisseur))
    J'ai la possibilité de pointer dans la table des audits la date max de chaque audit (Création d'un champ "Date Max" Yes/No) et ensuite filtrer sur Yes dans le set analysis. Si c'est la seule solution, je vais m'y mettre.

    Personne n'a d'idée pour le faire dans l'expression ?

  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
    Il doit être possible de faire le calcul directement dans la fonction, mais ça va être une bonne prise de tête car il faudra utiliser des agrégations dans tous les sens pour obtenir le bon "date maximum" selon vos dimensions.


    J'ai la possibilité de pointer dans la table des audits la date max de chaque audit (Création d'un champ "Date Max" Yes/No) et ensuite filtrer sur Yes dans le set analysis. Si c'est la seule solution, je vais m'y mettre.
    C'est clairement la meilleure solution :
    - le calcul "compliqué" est effectué au chargement, là où vous avez la possibilité de passer par des étapes intermédiaires
    - votre syntaxe sera beaucoup plus simple, donc plus facilement maintenable
    - votre expression sera calculée plus rapidement

    Ma philosophie, c'est "tout ce qui peut être calculé une bonne fois pour toute au chargement, autant le faire, ça évitera de devoir le calculer plus tard à plusieurs reprises".


    Supposons que votre chargement soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Data:
    LOAD * INLINE [
    Fournisseur, Audit Type, Date de conduite, Result
    Truc1, Test, 01/06/2011, Acceptable
    Truc1, Test, 01/03/2012, Non Acceptable
    Truc1, Test, 01/04/2012, Acceptable
    Truc2, Test, 01/06/2011, Acceptable
    Truc2, Test, 01/03/2012, Acceptable
    Truc2, Test, 01/04/2012, Non Acceptable
    Truc3, Test, 01/04/2009, Acceptable
    ];
    il vous suffit alors de rajouter dans votre script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LEFT JOIN (Data)
    LOAD DISTINCT
    	Fournisseur, [Audit Type], max([Date de conduite]) AS [Date de conduite], 1 AS EstDateMax
    RESIDENT Data
    GROUP BY Fournisseur, [Audit Type];
    et alors votre expression sera simplifiée en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =count({$ <[Result]={'Acceptable'}, EstDateMax={'1'}>} DISTINCT if([Date de conduite] > AddYears(Today(),-3), Fournisseur))

    On peut même imaginer ne flagger dans le script que les dates > "il y a 3 ans", pour simplifier encore l'expression, mais on perdra en flexibilité si on souhaite mettre le nombre d'années en dynamique.

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

Discussions similaires

  1. [XL-2007] somme avec valeur max
    Par luko6 dans le forum Excel
    Réponses: 5
    Dernier message: 11/03/2010, 17h14
  2. Requete select count(*) avec having max()
    Par Goupo dans le forum Langage SQL
    Réponses: 10
    Dernier message: 09/03/2009, 12h50
  3. Problème dans requête avec clause MAX
    Par tonio-lille dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/10/2007, 17h00
  4. Problème de requête avec WHERE MAX()
    Par seb92500 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 24/01/2007, 12h27
  5. requete SQL avec valeur max
    Par oeil de nuit dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/01/2006, 08h58

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