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 :

Ecart entre expression IF et Set Analysis


Sujet :

QlikView

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 60
    Points
    60
    Par défaut Ecart entre expression IF et Set Analysis
    Bonjour,

    J'avais un graphique avec l'expression suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =sum( if(Abonnement_paiement='EMV'  and (Abonnement_Offre_nom='1 An'   or Abonnement_Offre_nom='1 Mois'
     or Abonnement_Offre_nom='1 Semaine'  or Abonnement_Offre_nom='1 Jour')  , Compteur_abonnement_OK))
    que je voudrais remplacer par un set analysis, j'ai donc écris l'expression suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =sum({$<Abonnement_paiement= {'EMV'}, Abonnement_Offre_nom={'1 An', '1 Mois', '1 Semaine', '1 Jour'}>} [Compteur_abonnement_OK])

    Le problème est que j'observe des écarts entre les résultats des 2 expressions.

    De quoi cela pourrait-il provenir ?




    Merci pour votre aide.

    Bonne journée

  2. #2
    Membre régulier
    Homme Profil pro
    Consultant Décisionnel
    Inscrit en
    Janvier 2012
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant Décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 128
    Points : 84
    Points
    84
    Par défaut
    Bonjour,

    dans ta première formule tu as des "ou"

    Alors que dans le set analysis tu lui demande de prendre uniquement les données où Abonnement_paiement= EMV ET Abonnement_Offre_nom= '1 An', '1 Mois', '1 Semaine', '1 Jour' donc ici toutes tes conditions doivent être vérifiées ensemble à la différence des "ou".

  3. #3
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 60
    Points
    60
    Par défaut
    Je croyais que mon code :

    Abonnement_Offre_nom={ '1 An', '1 Mois', '1 Semaine', '1 Jour'}

    voulait dire "ou" dans le sens où je veux que la valeur d'abonnement_Offre_nom appartiennet à l'ensemble { '1 An', '1 Mois', '1 Semaine', '1 Jour'}.


    Ce n'est pas exact ?

  4. #4
    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
    La syntaxe de ton Set Analysis me semble bonne.
    Par contre, vérifie bien l'orthographe de tes noms de champ car QV est case sensitif.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =sum( IF(Abonnement_Paiement='EMV'  AND (Abonnement_Offre_nom='1 An'   OR Abonnement_Offre_nom='1 Mois'
     OR Abonnement_Offre_nom='1 Semaine'  OR Abonnement_Offre_nom='1 Jour')  , Compteur_abonnement_OK))
    ne donnera pas le même résultat que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =sum( IF(Abonnement_paiement='EMV'  AND (Abonnement_Offre_Nom='1 An'   OR Abonnement_Offre_nom='1 mois'
     OR Abonnement_Offre_nom='1 Semaine'  OR Abonnement_Offre_nom='1 Jour')  , Compteur_abonnement_OK))
    Car :
    Abonnement_Paiement n'est pas la même chose que Abonnement_paiement. Là tu devrais trouver 0 car tout est dépendant de sa valeur.
    Abonnement_Offre_Nom n'est pas la même chose que Abonnement_Offre_Nom. Si c'est là que tu t'est trompé, seules certaines lignes ne sont pas prises en compte.
    Et enfin '1 mois' n'est pas la même chose que '1 Mois'. Si c'est là que tu t'est trompé, seules certaines lignes ne sont pas prises en compte.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 60
    Points
    60
    Par défaut
    Merci Formulary,

    Je ne pense pas avoir de problème de casse.

    Sur un autre forum, j'ai vu qu'il n'était pas impossible qu'il y ait une différence entre sum(if) et le set analysis dans le cas où les champs impliqués proviennent de tables différentes car le calcul n'est pas effectué de la même façon.

    "The main difference is that the Sum() is made over different ntuples. In Sum(<Field1>), the summation is made in the table where Field1 is found, but in Sum(<Field1> * <Field2>) the summation is made in a new ntuple - in the Cartesian product between Field1 and Field2 - that could have more records that the first table."

    Est-ce que ça dit quelque chose à quelqu'un ?

    Merci encore

  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
    Citation Envoyé par lozeba Voir le message
    Sur un autre forum, j'ai vu qu'il n'était pas impossible qu'il y ait une différence entre sum(if) et le set analysis dans le cas où les champs impliqués proviennent de tables différentes car le calcul n'est pas effectué de la même façon.

    "The main difference is that the Sum() is made over different ntuples. In Sum(<Field1>), the summation is made in the table where Field1 is found, but in Sum(<Field1> * <Field2>) the summation is made in a new ntuple - in the Cartesian product between Field1 and Field2 - that could have more records that the first table."

    Est-ce que ça dit quelque chose à quelqu'un ?
    Je vais vous donner un exemple.

    Supposons que vous ayez ces données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DimPays:
    LOAD * INLINE [
    DimPays
    France
    France
    France
    ];
     
    LOAD * INLINE [
    Pays, Valeur
    France, 1
    ];
    Si vous faites
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =sum({$ <Pays=P(DimPays)>} Valeur)
    ça va prendre toutes les valeurs qui ont un pays qui fait parti de la liste "DimPays" (donc "France"), et donnera donc une somme = 1.

    Si vous faites
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =sum(if(DimPays = Pays, Valeur))
    ça fera un test entre toutes les valeurs de Pays et les valeurs de DimPays, et quand il y en a qui sont équivalent, ça les compte dans la somme.
    Or il y a 3 "France" dans "DimPays". Il y aura donc 3 fois où la condition sera validée, ce qui donnera une somme = 3.


    Cela ne devrait donc pas être votre cas car vous comparez à des valeurs texte, et pas à des valeurs de dimension.



    Pour votre problème, faites un tableau avec les 2 expressions et filtrez jusqu'à ce que vous trouviez la raison de la différence.
    Faites aussi des listes de sélection en cochant la case "afficher la fréquence" pour vérifier vos données.

  7. #7
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 60
    Points
    60
    Par défaut
    Merci PhunkyBob !
    Ton explication est très claire. J'ai utilisé ta technique pour trouver l'écart.
    Le bon résultat est obtenu avec le set analysis.

    en fait, à partir du moment où on fait des sélections sur un champ appartenant à une autre table, le sum(if...) n'est pas très fiable..

    Bonne journée.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/09/2014, 10h01
  2. Set Analysis expression
    Par arnest dans le forum QlikView
    Réponses: 1
    Dernier message: 06/09/2010, 11h30
  3. [css]Ecart entre élément <DIV>
    Par elspliffo dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 08/06/2006, 13h32
  4. Ecart entre 2 div
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 31/01/2006, 01h45
  5. compatibilité entre sql server 7 et analysis service sql2000
    Par jeremie dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/03/2004, 15h08

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