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

Webi Discussion :

Contexte de calcul/d'affichage avec un where


Sujet :

Webi

  1. #1
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut Contexte de calcul/d'affichage avec un where
    Bonjour,

    J'ai pas mal de difficultés à comprendre les contextes de calcul et les contextes d'affichage. Ce que je cherche à faire à l'air tout simple et pourtant je n'y arrive pas :'(

    J'ai 90 lignes de données avec (pour simplifier) 2 colonnes:
    - 90 identifiants différents
    - 90 montants (pas nécessairement différents les uns des autres)

    Je créé un tableau par moi-même, pas un tableau déjà fourni par BO.
    Dans ce tableau, je dois remplir 2 cellules:
    - nombre d'identifiants
    - nombre d'identifiants dont le montant est inférieur à 1000

    Pour le nombre d'identifiants, j'entre la formule suivante:
    =Nombre ( [ identifiant ] ; Tout )
    >> OK j'obtiens 90

    Pour le nombre d'identifiants dont le montant est inférieur à 1000, j'entre la formule suivante:
    =Nombre ( [ identifiant ] ; Tout ) Où ( [ montant ] < 1000 )
    >> KO, ça me met 0 au lieu de 5

    Si, pour le nombre d'identifiants dont le montant est inférieur à 1000, j'entre la formule suivante:
    =Nombre ( [ identifiant ] ) Où ( [ montant ] < 1000 )
    >> KO, ça me met 90 au lieu de 5

    [ identifiant ] est une dimension
    [ montant ] est un indicateur

    Comment faire comprendre à BO que je veux le nombre d'identifiants dont le montant est inférieur à 1000 ?

    Merci pour votre aide !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2008
    Messages : 259
    Points : 338
    Points
    338
    Par défaut
    Dans BO, un indicateur se calcule en fonction des dimensions avec lesquelles il est associées. C'est ce que l'on appelle le contexte de calcul. Quand il n'y a pas de dimension, le contexte est alors celui du rapport.

    Si je comprend bien, dans le tableau, il n'y a pas la dimension [identifiant], donc l'indicateur prend le montant total du rapport.
    Or le total de l'indicateur doit certainement être > à 1000 donc le nombre d'identifiant retourne donc 0

    Il faut donc forcer la prise en compte de la dimension [identifiant]. On peut utiliser l'opérateur PourChaque() mais aussi Dans()


    Cela donne (mais je n'ai pas BO sous la main) :

    =Nombre ([identifiant ]) Où ( [montant] PourChaque([ identifiant ]) < 1000 )

    Certaines versions de BO, n'accepte pas le où() avec un indicateur. Il faut alors "ruser" :
    =somme(si([montant] PourChaque([identifiant]) < 1000 ) alors 1)

    A tester...

  3. #3
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut


    =Nombre ([identifiant ]) Où ( [montant] PourChaque([ identifiant ]) < 1000 )
    ça fonctionne

    Du coup, j'ai des questions par rapport à cette formule:
    - la partie "Où ( [montant] PourChaque([ identifiant ]) < 1000 )" est bien le contexte de calcul ?
    - il n'y a donc pas de contexte d'affichage ici ?

    J'ai voulu tenter le même genre de formule mais cette fois, pas pour un calcul d'effectif mais pour un calcul de moyenne, et ça me sort un chiffre chelou...[EDIT: ce chiffre, dans les 4 cas, est en fait la somme et non la moyenne]

    Si je teste la formule suivante, ça fonctionne :
    Le pb est que parfois le montant est égal à -1, or c'est bien entendu une valeur qui ne doit pas être incluse dans les calculs. Donc j'ai testé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    =Moyenne([montant ])([montant] PourChaque([Identifiant]) <> -1)
    =Moyenne([montant]([montant] PourChaque([Identifiant]) <> -1))
     
    =Moyenne([montant])([montant] Dans([Identifiant]) <> -1)
    =Moyenne([montant]([montant] Dans([Identifiant]) <> -1))
    Pourquoi dans le calcul d'une moyenne, cette méhode ne fonctionne-t-elle pas ?

    Merci !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2008
    Messages : 259
    Points : 338
    Points
    338
    Par défaut
    zut, je viens de répondre, mais ça a buggé !

    je recommence

    =Nombre ([identifiant ]) Où ( [montant] PourChaque([ identifiant ]) < 1000 )
    ici, le contexte d'affichage : le rapport (l'endroit où est placé la formule)
    on compte des dimensions avec une restriction où([montant] PourChaque([ identifiant ]) < 1000 )


    Dans le cas de la moyenne, on cherche à compter un indicateur
    Or un indicateur a une fonction d'agrégat associée qui est la somme
    Donc [montant] placé dans le rapport --> affiche le total
    moyenne(montant]) placé dans le rapport --> affiche la moyenne du total : donc le total

    Il faut introduire une notion nouvelle : le contexte d'entrée (il faut que les montants pris en compte dans le calcul correspondent aux montants des identifiants et non au total. Ce contexte doit être à l'intérieur des parenthèses de la fonction moyenne

    je ferai :
    =moyenne([montant] PourPhaque([identifiant]) où ([montant] PourChaque([ identifiant ]) < 1000 )

    mais je n'ai pas BO sous la main...

  5. #5
    Membre expérimenté
    Avatar de bastoonet
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Septembre 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 011
    Points : 1 342
    Points
    1 342
    Par défaut
    et ça ça donne quoi : =Nombre ( [ identifiant ] Où ( [ montant ] < 1000 ) ; Tout )
    ~ Bastoonet ~

    Consultant BI

  6. #6
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Hello,

    Tout d'abord, un grand merci à toi de te pencher sur mon problème. Il y a une logique dans BO que je n'arrive pas à choper , j'espère que je finirai par y arriver ...

    J'ai testé ta formule, en bougeant les parenthèses de plusieurs manières mais j'obtiens toujours la somme et non la moyenne. Voici les tests:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    =Moyenne([montant]) PourChaque([Identifiant])([montant] PourChaque([Identifiant]) <> -1 )
    =Moyenne([montant] PourChaque([Identifiant]))([montant] PourChaque([Identifiant]) <> -1 )
    =Moyenne([montant] PourChaque([Identifiant])([montant] PourChaque([Identifiant]) <> -1 ))
    J'ai également testé d'ajouter la dimension montantDim (d'où est construit l'indicateur montant) dans le PourChaque mais ça ne fonctionne pas non plus.

    Une idée ?

  7. #7
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Salut bastoonet,

    Je n'avais pas vu ta réponse avant d'envoyer la mienne.
    Ta formule fonctionne. Pour les effectifs, la formule d'isalille fonctionne aussi.

    Mais en plus des effectifs, je dois calculer des moyennes, des écarts type, des minimum, des maximum.
    Du coup je voulais utiliser la même syntaxe en remplaçant juste Nombre par Moyenne ou Min, ...

    A noter que j'obtiens la bonne moyenne en faisant:
    =Somme([montant]) Où ( [montant] PourChaque([Identifiant]) <> -1) / Nombre([Identifiant]) Où ( [montant] PourChaque([Identifiant échantillon]) <> -1)

    Mais c'est pas hyper partique...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2008
    Messages : 259
    Points : 338
    Points
    338
    Par défaut
    Salut,
    on peut essayer de contourner le pb :

    1) créer une variable indicateur : mt bis
    = [montant]) PourChaque([Identifiant]

    2) faire la formule
    =Moyenne([mt bis]) Où ([mt bis] <> -1 )


    ça marche ?

  9. #9
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Hello !

    ça marche !!! MERCI

    mais je n'arrive pas à comprendre pourquoi ...

    si je créé une variable indicateur [montant bis] où montant bis= ( [montant] ) PourChaque ( [Identifiant] )
    et si je mets dans mon tableau la formule =Moyenne ( [montant bis] Où ( [montant bis] <> -1 ) )
    ça fonctionne.

    si je ne créé pas de variable indicateur
    et si je mets dans mon tableau la formule =Moyenne ( ( [montant] ) PourChaque ( [Identifiant] ) Où ( ( [montant] ) PourChaque ( [Identifiant] ) <> -1 ) )
    ça ne fonctionne pas.

    Pourquoi ?
    Somebody knows ?

Discussions similaires

  1. [RIA Services] Load d'un domain contexts avec plusieurs Where()
    Par abbepierre94 dans le forum Silverlight
    Réponses: 7
    Dernier message: 02/11/2011, 22h41
  2. Réponses: 6
    Dernier message: 19/10/2004, 13h46
  3. Resolution d'affichage avec x11
    Par cosmos38240 dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 06/06/2004, 23h26
  4. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21
  5. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 16h59

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