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 :

Calcul d'un effectif à l'aide d'un flag et de la fonction NombreCumulatif


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 Calcul d'un effectif à l'aide d'un flag et de la fonction NombreCumulatif
    Bonjour tout le monde,

    Je cherche à calculer un effectif à partir de variables que j'ai créées sans avoir à afficher les enregistrements. J'avais eu le même problème dans un précédent post (ici) et pourtant en réappliquant les mêmes formules, ça ne fonctionne pas.

    J'ai plusieurs champs:
    - identifiantAdulte
    - identifiantEnfant
    - valeurDelai
    - méthode
    - dosage

    un identifiantAdulte peut avoir plusieurs identifiantEnfant
    un identifiantEnfant n'a qu'une seule valeurDelai
    les valeurDelai de 2 identifiantEnfant d'un même identifiantAdulte sont obligatoirement différentes

    je cherche à calculer des effectifs, des moyennes, des ecarts-types, …
    Commençons par les effectifs…

    J'ai créé les variables suivantes:

    Indicateur Dosage_valeur =Si ( [dosage] <> -1 Et Pas(EstNul([dosage] ) ) Et [méthode] DansListe("methodeA ") ) Alors [dosage]
    ' ça marche, ça me permet de ne pas avoir des valeurs vides et des valeurs à -1

    Indicateur NumeroIdentifiantEnfant =Si ( NombreCumulatif ( [valeurDelai] ; ( [identifiantAdulte] ; [méthode] ) ) = 1 ) Alors 1 Sinon 0
    ' ça marche, quand un identifiantAdulte a 2 identifiantEnfant, l'identifiantEnfant qui a la valeurDelai la plus grande a un NumeroIdentifiantEnfant = 0

    Indicateur Dosage_Effectif =Si ( [NumeroIdentifiantEnfant] = 1 ) Alors Nombre([Dosage_valeur];Tout) Dans([identifiantEnfant]) PourChaque([identifiantEnfant])
    ' ça ne marche pas, ça me met 3526 au lieu de 3522 car ça compte aussi les enregistrements qui ont NumeroIdentifiantEnfant = 0. Or moi, je ne veux sélectionner que les enregistrements pour lesquels NumeroIdentifiantEnfant = 1. Le problème vient-il du fait que ma variable Indicateur NumeroIdentifiantEnfant soit calculée avec NombreCumulatif et que donc elle ne voudrait rien dire s'il n'y a pas les lignes d'enregistrement avec ??

    Dans ce cas, comment afficher le nombre de dosage effectué en ne prenant en compte que les identifiantEnfant dont NumeroIdentifiantEnfant = 1 ?

    Merci pour votre aide !

  2. #2
    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
    oui le nombrecumulatif est un agregat qui dépend des valeurs dans ton tableau.

    C'est un peu comme si tu affichais le numéro de ligne et que tu voulais n'afficher que les n°de lignes impair...comme cela se recalcule en fonction du contexte d'affichage, cela n'a pas de sens

    Pourquoi à tu besoin du nombrecumulatif ?
    ~ Bastoonet ~

    Consultant BI

  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
    Salut !

    Merci pour ta réponse.

    La plupart des documents BO que je dois produire ne peut pas être construit à partir de dimensions que je croise entre elles, il faut que je remplisse des cellules vides uniques. Dans le cas présent, je cherche le nombre (et la moyenne et l'écart-type) de dosages non nuls et différents de - 1 de la méthode A sachant que si 2 (ou plus) identifiants enfant existent pour un même identifiant adulte, alors je ne conserve que le dosage correspondant à l'identifiant dont la valeur délai est la plus petite. La variable délai que j'ai créée est une dimension de type nombre.

    Je me suis servie de la fonction NombreCumulatif pour repérer quel identifiant enfant conserver si plusieurs existent pour un même identifiant adulte. ça marche si j'affiche tout le tableau, et comme tu dis, vu que nombrecumulatif est un agregat qui dépend des valeurs du tableau, alors cette fonction ne me sert à rien dans mes variables.

    J'ai un moyen de contourner le problème pour les effectifs bien que j'ai l'impression que c'est de la bidouille. Je m'explique. Si je créé la variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dimension dosage_ID = Si ([dosage] <> -1 Et Pas(EstNul([dosage])) Et [méthode] DansListe("méthodeA")) Alors [identifiantAdulte]
    Puis que dans une cellule vide je mets alors j'obtiens le bon chiffre car je compte les identifiantAdulte distinct

    En revanche, je ne peux pas appliquer la même chose pour la moyenne des dosages puisqu'il faut sélectionner d'abord celui correspondant à l'identifiant dont la valeur délai est la plus petite. Bref, je bloque... Une idée ?

    Merci !

  4. #4
    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
    Bonjour à tous,

    Je me permets un petit up car je n'ai toujours pas trouvé la solution à mon problème

    Pour simplifier, j'ai 3 lignes dans mes données sources:
    identifiant Adulte identifiant Enfant délai dosage
    identifiantAdulte_1 identifiantEnfant_a 5 10
    identifiantAdulte_2 identifiantEnfant_b 3 20
    identifiantAdulte_2 identifiantEnfant_c 6 30

    Je dois remplir une cellule vide (pas de croisement de dimensions) et y mettre la moyenne des dosages en sachant que si j'ai plusieurs fois le même identifiantAdulte, alors je ne garde dans les calculs que l'enregistrement dont la valeur délai est la plus petite. Dans mon exemple ci-dessus, j'ai 2 fois identifiantAdulte_2: la valeur délai la plus petite entre identifiantEnfant_b et identifiantEnfant_c est celle d'identifiantEnfant_b que je conserve donc. Au final, ma moyenne doit se calculer entre identifiantEnfant_a et identifiantEnfant_b donc moyenne (dosage) = (10 + 20) / 2 = 15. Mais je ne sais pas comment dire que je veux conserver identifiantEnfant_b et ne pas inclure identifiantEnfant_c.

    La fonction NombreCumulatif me permettait de repérer quel identifiant enfant conserver si j'affichais tout le tableau, mais comme indiqué par bastoonet, vu que nombrecumulatif est un agregat qui dépend des valeurs du tableau, alors cette fonction ne me sert à rien dans mes cellules vides.

    Comment faire ?
    Je suis perdue !

    Merci pour votre aide.

  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
    =moyenne( [dosage] où ([delai]=min([delai] pourchaque ([identifiant Adulte]) ) ) )
    ~ 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
    Salut tout le monde,

    Merci pour la solution proposée mais j'ai testé et ça ne fonctionne pas. J'ai réalisé pleins d'essais en bougeant les parenthèses et en ajoutant certains champs mais ça ne marche pas.
    Le tableau de données ressemble à cela (je rajoute la colonne méthode car je ne sais pas si elle a un impact dans les formules:

    identifiant Adulte identifiant Enfant délai dosage méthode
    identifiantAdulte_1 identifiantEnfant_a 5 10 methodeA
    identifiantAdulte_2 identifiantEnfant_b 3 20 methodeA
    identifiantAdulte_2 identifiantEnfant_c 6 30 methodeA



    Voici les combinaisons testées:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai] PourChaque ([identifiant Adulte]) )))
    => valeur multiple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai] ) PourChaque ([identifiant Adulte]) ))
    => 20 soit la moyenne incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai] )) PourChaque ([identifiant Adulte]) )
    => 20 soit la moyenne incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai] PourChaque ([identifiant Adulte];[identifiant Enfant]) )))
    => 20 soit la moyenne incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai] ) PourChaque ([identifiant Adulte];[identifiant Enfant]) ))
    => 20 soit la moyenne incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai] )) PourChaque ([identifiant Adulte];[identifiant Enfant]) )
    => 20 soit la moyenne incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai] PourChaque ([identifiant Adulte];[méthode]) )))
    => valeur multiple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai] ) PourChaque ([identifiant Adulte];[méthode]) ))
    => 20 soit la moyenne incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai] )) PourChaque ([identifiant Adulte];[méthode]) )
    => 20 soit la moyenne incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai] PourChaque ([identifiant Adulte];[identifiant Enfant];[méthode]) )))
    => 20 soit la moyenne incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai] ) PourChaque ([identifiant Adulte];[identifiant Enfant];[méthode]) ))
    => 20 soit la moyenne incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai] )) PourChaque ([identifiant Adulte];[identifiant Enfant];[méthode]) )
    => 20 soit la moyenne incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai]) PourChaque ([identifiant Adulte]) ))
    => 20 soit la moyenne incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai]) PourChaque ([identifiant Adulte];[identifiant Enfant]) ))
    => 20 soit la moyenne incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage]([délai]=Min([délai]) PourChaque ([identifiant Adulte];[identifiant Enfant];[méthode]) ))
    => 20 soit la moyenne incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage])([délai]=Min([délai]) PourChaque ([identifiant Adulte]) )
    => 60 soit la somme des dosages incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage])([délai]=Min([délai]) PourChaque ([identifiant Adulte];[identifiant Enfant]) )
    => 60 soit la somme des dosages incluant le double dosage de identifiantAdulte_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =Moyenne([dosage])([délai]=Min([délai]) PourChaque ([identifiant Adulte];[identifiant Enfant];[méthode]) )
    => 60 soit la somme des dosages incluant le double dosage de identifiantAdulte_2
    Merci pour votre aide !

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/01/2015, 11h45
  2. [WebI Xi3] Calcul d'un effectif selon catégorie
    Par debdev dans le forum Débuter
    Réponses: 15
    Dernier message: 05/08/2014, 10h26
  3. [WD-2003] calcul de l'age à l'aide de champs dans un formulaire
    Par dede tabby dans le forum Word
    Réponses: 8
    Dernier message: 28/09/2011, 20h32
  4. calcul sur excel a l'aide de Perl
    Par william atine dans le forum Modules
    Réponses: 1
    Dernier message: 19/08/2010, 16h16
  5. Réponses: 4
    Dernier message: 07/01/2006, 22h56

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