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

Deski Discussion :

afficher une valeur selon la ligne du tableau [Vxi3]


Sujet :

Deski

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut afficher une valeur selon la ligne du tableau
    Bonjour

    Je suis BO deski XI 3.1

    J'ai une requête qui me ramène les prestataires qui ont été affrétés au départ d'un lieu et vers une destination. (requete 1)
    J'ai une autre requête qui me ramène les prestataires qui auraient du etre affretés sur cette ligne.(requete 2)
    Cette requête est calculée de cette facon:
    Les prestataires qui ont le plus gd nb de voyage sur cette destination sont les prestataires qui auraient du être affrété. (J'ai donc fait un calcul dans la zone condition sur le max(nb_voyage). La requête me renvoie bien une ligne par destination.

    J'ai réussi a mettre ces données dans un tableau (grâce à la désynchronisation d'objet dans le cube).

    Il faut ensuite que j'insère les tarifs du prestataire qui a été affrété et les tarifs du prestataire qui aurait du être affrété dans ce même tableau.

    Mais je n'arrive pas à récupérer correctement le tarif des prestataires qui auraient du être affrétés.

    J'ai testé :

    -d'insérer dans la requête 2:l'objet tarif, mais du coup la requête me retourne plusieurs lignes (Ts les tarifs par prestataires sur cette ligne) et je n'arrive pas à récupérer un seul tarif pour le prestataire en question.

    -de faire une requête simple qui me renvoie les tarifs par prestataire sur une destination.
    Puis de faire les synchro qui convient ds le cube et d'afficher l'objet de cette facon ds le tableau: <tarif> dans (<lieu_exp>,<lieu_destination>,<prestataire_recommande>)
    Mais là il me fait qd même la somme des tarifs de ts les prestataires sur cette destination...


    Comment puis-je récupéré tout simplement le tarif du prestataire qui aurait du être affrété?

    Merci à vous.

  2. #2
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Salut,

    Es-tu sûre que le fait d'ajouter l'objet Tarif dans ta 2e requête n'a pas d'impact sur le calcul effectué en condition ? (globalement, par objet, etc...)

    Sinon je pense que le mieux serait de passer par une table dérivée créée dans le designer et qui mettrait en évidence ligne par ligne, le prestataire qui devrait être affrété ainsi que son tarif.

    Si tu ne peux pas modifier l'univers (ou demander de modification) postes le SQL de ta requête 2 pour qu'on puisse identifier d'où vient le problème.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    Salut

    Je pense qu'il ya moyen de le faire dans la requête.
    Car en fait, je peux modifier l'univers mais mon pb, c'est que j'ai 2 tableaux de bord a faire mais le tarif ne se calcule pas de la même façon pour les 2. Dc je veux éviter de faire plusieurs tables dérivées...

    Au pire je le ferais si je ne trouve pas de solution mais j'aurais je pense, besoin d'aide pour faire la requete...

    Donc voici mes requêtes de test:
    Requête 2 sans <tarif> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    SELECT 
       max(GE1B.QTRAB1) as nb_voyage, 
      substr(decode(GE1B.CTRA1X,null,GE1B.CTRAL7,GE1B.CTRA1X),1,5) as lieu_livraison, 
      GE4A.LSTOCD as depot_exp_code , 
      GE4A.CSTODN as depot_exp, 
      substr(GE1B.CTRAL2,1,5) as lieu_dep, 
      max(GE1B.LTRPRR) as prest 
    FROM 
      GE1B, 
      GE4A, 
      GI3G 
    WHERE 
      ( substr(GE1B.CTRAL2,1,5)=substr(GE4A.CTRAL,1,5)  ) 
      AND  ( GE1B.CTRAN=GI3G.CTRAN and GE1B.NTRAN=GI3G.NTRAN  ) 
      AND  ( 
      GI3G.LTABC  =  'ROUTE' 
      AND  GE4A.CSTODN  =  @variable('Code BCE de départ :') 
      AND  GE1B.XDAAN  =  @variable('Année de date (budget) : format YY') 
      AND  GE1B.CFMLRO  IN  ('1000') 
      AND  GE1B.QTRAB1  IN   
             ( 
             SELECT 
               max( SubAlias__1.QTRAB1 ) 
             FROM 
               GE1B  SubAlias__1, 
               GE4A  SubAlias__5 
             WHERE 
               (substr(SubAlias__1.CTRAL2,1,5)=substr(SubAlias__5.CTRAL,1,5)) 
               AND  SubAlias__5.CSTODN = GE4A.CSTODN 
               AND  SubAlias__1.CFMLRO = GE1B.CFMLRO 
               AND  substr(SubAlias__1.CTRAL2,1,5) = substr(GE1B.CTRAL2,1,5) 
               AND  substr(decode(SubAlias__1.CTRA1X,null,SubAlias__1.CTRAL7,SubAlias__1.CTRA1X),1,5) = substr(decode(GE1B.CTRA1X,null,GE1B.CTRAL7,GE1B.CTRA1X),1,5) 
             ) 
      AND  ( length(GE1B.CTRAL2)<7  ) 
      ) 
    GROUP BY 
      substr(decode(GE1B.CTRA1X,null,GE1B.CTRAL7,GE1B.CTRA1X),1,5), 
      GE4A.LSTOCD, 
      GE4A.CSTODN , 
      substr(GE1B.CTRAL2,1,5)
    J'obtiens : 25, Paris, 0001, PA, Marseille, Toto.
    Donc OK.



    Requete 2 avec tarif:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    SELECT 
      max(GE1B.QTRAB1) as nb_voyage, 
      substr(decode(GE1B.CTRA1X,null,GE1B.CTRAL7,GE1B.CTRA1X),1,5)  as lieu_livraison, 
      GE4A.LSTOCD as depot_exp_code , 
      GE4A.CSTODN as depot_exp, 
      substr(GE1B.CTRAL2,1,5) as lieu_dep, 
      max(GE1B.LTRPRR) as prest, 
      decode(GE1B.PTRAN,0,GE1B.MTRAFO,GE1B.PTRAN) as tarif 
    FROM 
      GE1B, 
      GE4A, 
      GI3G 
    WHERE 
      ( substr(GE1B.CTRAL2,1,5)=substr(GE4A.CTRAL,1,5)  ) 
      AND  ( GE1B.CTRAN=GI3G.CTRAN and GE1B.NTRAN=GI3G.NTRAN  ) 
      AND  ( 
      GI3G.LTABC  =  'ROUTE' 
      AND  GE4A.CSTODN  =  @variable('Code BCE de départ :') 
      AND  GE1B.XDAAN  =  @variable('Année de date (budget) : format YY') 
      AND  GE1B.CFMLRO  IN  ('1000') 
      AND  GE1B.QTRAB1  IN   
             ( 
             SELECT 
               max( SubAlias__1.QTRAB1 ) 
             FROM 
               GE1B  SubAlias__1, 
               GE4A  SubAlias__5 
             WHERE 
               (substr(SubAlias__1.CTRAL2,1,5)=substr(SubAlias__5.CTRAL,1,5)) 
               AND  SubAlias__5.CSTODN = GE4A.CSTODN 
               AND  SubAlias__1.CFMLRO = GE1B.CFMLRO 
               AND  substr(SubAlias__1.CTRAL2,1,5) = substr(GE1B.CTRAL2,1,5) 
               AND  substr(decode(SubAlias__1.CTRA1X,null,SubAlias__1.CTRAL7,SubAlias__1.CTRA1X),1,5) = substr(decode(GE1B.CTRA1X,null,GE1B.CTRAL7,GE1B.CTRA1X),1,5) 
             ) 
      AND  ( length(GE1B.CTRAL2)<7  ) 
      ) 
    GROUP BY 
      substr(decode(GE1B.CTRA1X,null,GE1B.CTRAL7,GE1B.CTRA1X),1,5), 
      GE4A.LSTOCD, 
      GE4A.CSTODN, 
      substr(GE1B.CTRAL2,1,5), 
      decode(GE1B.PTRAN,0,GE1B.MTRAFO,GE1B.PTRAN)
    J'obtiens :
    25, Paris, 0001, PA, Marseille, Toto, 20. => je veux récupérer cette ligne (un max sur (Prestataire) )
    25, Paris, 0002, PA, Marseille, Mama, 15
    25, Paris, 0003, PA, Marseille, Fifi, 45


    Je pense qu'il ne manque pas gd chose....mais quoi?

  4. #4
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Comment as-tu créé ton calcul sur le nb_voyages, tu l'as fait globalement, par objet, etc... ? Car il y a peut être l'objet tarif à rajouter dans ce cas là.

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    le nb_voyage, je l'ai calculé avec la fonction "calcul" dans l'éditeur de requête BO.

    Voici les paramètres que j'ai mis (dans l'ordre d'affichage):
    -nb_voyage
    -maximum
    -globalement
    -Pour chaque valeur de plusieurs objets : 'lieu_dep, lieu_livraison, '
    -Toutes les valeurs

    Je ne peux pas mettre "le tarif" dans cette condition car c'est un indicateur....

  6. #6
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Bon, et sinon avec ta deuxième méthode (requête pour prestataire / destination / tarif)

    Une fois que tu as bien synchronisé tes objets prestataire et destination, essaies d'appliquer la fonction MultiCube() à ton objet tarif (pas de besoin de contexte à priori si tu n'as qu'une ligne pour chaque prestataire / destination)

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    Le multicube ne fonctionne pas....
    Ca me renvoie pas les bons tarifs sur chaque ligne.

  8. #8
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Tu n'as bien qu'une ligne par "prestataire / destination / tarif" dans le cube pour cette requête ?

  9. #9
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    Non c'est bien ce pb.

    Soit j'ai une ligne prestataire/destination qd je n'insere pas <tarif>

    Soit j'ai plusieurs lignes prestataire / destination / tarif qd j'insère <tarif>.

    Et mon objectif est de n'avoir qu'une ligne....Après ça sera simple.

    Donc je pensais, soit résoudre le pb ds la requete, soit résoudre le pb avec une variable avec des contextes...mais je n'arrive à faire ni l'un ni l'autre...

  10. #10
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Si ton cube te ramène plusieurs lignes uniquement si tu ajoutes l'objet <tarif>, il y a trois raisons possibles à mes yeux:

    - Soit dans ta bdd il y a plusieurs tarifs associés à un "binôme" prestataire / destination et c'est donc normal. Dans ce cas, il te suffit de savoir comment gérer les tarifs (moyenne, minimum, maximum) et d'appliquer la fonction correspondante sur l'objet <tarif> dans ton tableau.

    - Soit il y a un problème dans ton univers : table intermédiaire pour accéder au tarif qui double les occurences de ta première table par exemple. Dans ce cas, soit tu zappes la table intermédiaire, soit tu crées un raccourci jointure en sautant la table intermédiaire (si tu as les éléments pour de chaque côté bien sûr) soit tu crées un alias de table tarif, soit enfin tu crées une table dérivée comme décrit dans le post ci-dessus.
    Ta seule option pour ne rien changer dans ce cas là serait que les valeurs de tarif ne soient que des doublons, et d'appliquer une fonction Moyenne() dans ton tableau.

    - Soit les tarifs de tous les prestataires / destinations sont sommés pour chaque occurence dans ton tableau et dans ce cas il y a un problème de synchronisation entre tes fournisseurs.

  11. #11
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    J'ai résolu le pb en créant 2 autres objets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        max(QTRAB1) keep (dense_rank first ORDER BY max(GE1B.LTRPRR) DESC)
    nb_voyage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     max(decode(GE1B.PTRAN,0,GE1B.MTRAFO,GE1B.PTRAN)) keep (dense_rank first ORDER BY max(GE1B.LTRPRR) DESC)
    tarif

    Ce qui me permet de récuperer qu'une ligne par prestataire/destination/tarif

    Merci pour votre contribution et votre patience

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/01/2010, 17h08
  2. [AC-2003] afficher une valeur selon une condition
    Par Souri84 dans le forum IHM
    Réponses: 3
    Dernier message: 19/11/2009, 11h10
  3. afficher une valeur en rouge selon son signe
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/05/2008, 17h54
  4. Réponses: 3
    Dernier message: 24/07/2007, 21h27
  5. Afficher Une Liste Selon La Valeur D'une Cellule
    Par Kevin_18 dans le forum Excel
    Réponses: 10
    Dernier message: 02/07/2007, 19h22

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