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

Designer Discussion :

Utilisation d'un alias


Sujet :

Designer

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 14
    Points
    14
    Par défaut Utilisation d'un alias
    Bonjour,

    Je débute en BO et j’ai un problème que je n’arrive pas à résoudre.

    J’ai dans mon univers une table qui contient des lignes dont l’identifiant est un id et une date, elle possède des champs critères et des montants :
    MaTable (Id, date, critereA, critereB, montant)

    J’ai besoin dans mon rapport, après avoir sélectionné mes 2 dates par invite, d’afficher pour un même Id sur une même ligne, les données à 2 dates différentes :

    Id date_1 date_2 montant_1 montant_2

    Pour cela j’ai créé un alias sur la table pour la seconde date. Cela fonctionne bien sauf dans le cas ou il faut sélectionner un critère à afficher ou en condition, car celui-ci n’est pas repris sur mon alias. Si j’ajoute une jointure entre mes critères, cela ne fonctionne plus lorsque je n’ai pas a prendre en compte les critères.

    Quelqu’un a-t-il une solution.
    Merci d’avance.

  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
    Bonjour,

    Si j'ai bien compris, les invites permettent de filtrer les Id sur 2 dates distinctes, et il faut que tu affiches sur une même ligne les informations provenant de ces deux dates ?

    Si c'est bien le cas, ne t'embête pas dans le designer. Tu laisses uniquement ta table initiale.

    Ensuite, dans ton rapport, plutôt que de poser tes deux conditions sur un seul fournisseur de données, il vaut mieux créer un fournisseur par condition.

    Tu auras donc deux requêtes, une avec les valeurs pour Date1, et une autre avec les valeurs pour Date2.
    Ensuite, il faudra lier les requêtes sur la dimension Id.
    Enfin, dans ton tableau, il faudra placer les éléments comme suit :
    Id(Requête 1) | Date(Requête 1) | Date(Requête 2) | Montant(Requête 1) | Montant(Requête 2)
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Merci, pour la réponse, mais je n’ai pas été très précis dans mes explication.

    En fait, ce que les utilisateurs demandent (ce n'est pas moi qui fait les rapports) c'est de n'avoir comme objets disponibles dans l’univers, que Id, critereA, critereB, montant_date1, montant_date2. Dans la seconde table, seul le montant doit être disponible pour servir de base de comparaison. L’utilisateur ne veut pas avoir a saisir les critère 2 fois.

  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
    OK. Alors, reprenons l'énoncé de tes problèmes :

    Pour cela j’ai créé un alias sur la table pour la seconde date.
    Cela me semble être la bonne solution en effet.
    Cela fonctionne bien sauf dans le cas ou il faut sélectionner un critère à afficher ou en condition, car celui-ci n’est pas repris sur mon alias.
    Effectivement, il me semble nécessaire que l'alias soit un alias complet. Et donc qu'il contienne les champs critères.
    Si j’ajoute une jointure entre mes critères, cela ne fonctionne plus lorsque je n’ai pas a prendre en compte les critères.
    C'est à dire ? Car s'il n'y a pas condition sur un critère, ça ne bloquera pas la jointure

    PS : Peux-tu préciser ta version de BO stp ?
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    L’utilisateur est libre de sélectionner ou non des critères et des conditions. Si ma table et mon alias ne sont joint que par id, lorsque l’utilisateur fait une condition sur le critereA. Ce critère n’est pas pris en compte sur mon alias et au lieu d’avoir le montant de mon id à la date2 pour le critèreA, j’ai le montant total de l’id à la date2

    Si j’ai comme données dans ma table :
    Id1 date1 a1 b1 10
    Id1 date1 a2 b2 20
    Id1 date2 a1 b1 30
    Id1 date2 a3 b3 50

    Mon rapport donne avec un critèreA = a1 :
    Id1 date1 date2 a1 10 80 (30+50)
    Au lieu de
    Id1 date1 date2 a1 10 30

    Est-ce plus clair ?

  6. #6
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    Bonjour,

    Je vais peut être dire une bêtise.

    Mais si tu crées deux objets:

    Montant 1 = CASE WHEN [DATE] = [Date 1] THEN [Montant] END

    Montant 2 = CASE WHEN [DATE] = [Date 2] THEN [Montant] END

  7. #7
    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
    >PtChat33 : OK dans ce sens là, ce que je n'ai pas compris c'est l'autre aspect :
    Si j’ajoute une jointure entre mes critères, cela ne fonctionne plus lorsque je n’ai pas a prendre en compte les critères.
    Cela veut dire que s'il n'y a pas de critère en condition, il faut faire la somme sur l'ID ?
    De plus, y a-t-il toujours correspondance des critères entre les différentes dates ?
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par milia Voir le message

    Montant 1 = CASE WHEN [DATE] = [Date 1] THEN [Montant] END

    Montant 2 = CASE WHEN [DATE] = [Date 2] THEN [Montant] END
    Je ne vois pas bien comment je peux faire ça.
    Je ne connais pas les dates par avance, elles sont saisie en invite lors du rafraîchissement du rapport et comme elles s'appliquent sur le même champs, il faut 2 tables distincts.

  9. #9
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    En faite il suffit que tes [Date 1] et [Date 2] contiennent le prompt.
    @prompt("Date 1", ...) et @Prompt("Date 2",...)

    Une question comme ça pour l'instant ton invite est où? Sur ton rapport ou sur ton univers?

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    La jointure entre les critereA de la table et de l'alias, oblige d’avoir le critereA en condition ou en affichage, car sinon j’ai :
    Id1 date1 date2 30 30
    Au lieu de
    Id1 date1 date2 30 80


    Citation Envoyé par TomDuBouchon Voir le message
    >
    Cela veut dire que s'il n'y a pas de critère en condition, il faut faire la somme sur l'ID ?
    Oui, dans mon exemple de données précédentes si je n’ai pas de critèreA, je dois avoir
    Id1 date1 date2 30 80

    Citation Envoyé par TomDuBouchon Voir le message
    >
    De plus, y a-t-il toujours correspondance des critères entre les différentes dates ?
    Non, comme dans mon exemple précédant je peux avoir pour mon Id1 un critereA = (a1 ou a2) à la date1 et critereA = (a1 ou a3) à la date2

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par milia Voir le message
    En faite il suffit que tes [Date 1] et [Date 2] contiennent le prompt.
    @prompt("Date 1", ...) et @Prompt("Date 2",...)

    Une question comme ça pour l'instant ton invite est où? Sur ton rapport ou sur ton univers?
    Pour l'instant j'ai un @promt sur chacun des "where" de mes objets Montant1 (@prompt("Date 1", ...) ) et Montant2 (@prompt("Date 2", ...))

  12. #12
    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
    Non, comme dans mon exemple précédant je peux avoir pour mon Id1 un critereA = (a1 ou a2) à la date1 et critereA = (a1 ou a3) à la date2
    Bon et bien dans ce cas je ne vois pas bien où est le problème...

    Si tu lies tes tables sur Id et critère et que tu places un critère en condition, la jointure fera qu'il ira chercher la valeur du montant pour le critère correspondant.
    Si tu ne places pas de critère, il prendra toutes les valeurs pour un Id et les sommera.
    Enfin, si tu places une condition sur un critère n'existant pas dans ton alias, le montant de l'alias sera à 0, ce qui semble correspondre à ce que tu cherches.

    EDIT : Désolé, fin de journée. Pour que le dernier cas fonctionne il faut bien sûr poser des jointures externes
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par TomDuBouchon Voir le message
    Si tu lies tes tables sur Id et critère et que tu places un critère en condition, la jointure fera qu'il ira chercher la valeur du montant pour le critère correspondant.
    Si tu ne places pas de critère, il prendra toutes les valeurs pour un Id et les sommera.
    Si je ne mets pas de critère j'ai quand même dans ma requète MaTable.CritereA=Alias.CritereA, du coup je n'ai pas le cas critereA=a3 de ma date2.

  14. #14
    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
    Effectivement , pardon...

    Donc, ce que tu peux faire en revanche, c'est créer une table dérivée qui te permettra de récupérer tous les résultats pour chaque date et chaque critère :

    Code sql : 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
    SELECT
    a.Id,
    a.critereA,
    a.critereB,
    b.date as date1,
    b.montant as montant1,
    c.date as date2,
    d.montant as montant2
    FROM
    MaTable a,
    (SELECT Id, critereA, critereB, date, montant
    FROM MaTable
    WHERE date = @prompt('Date 1','D',,,)) b,
    (SELECT Id, critereA, critereB, date, montant
    FROM MaTable
    WHERE date = @prompt('Date 2','D',,,)) c
    WHERE
    a.date IN (@prompt('Date 1','D',,,),@prompt('Date 2','D',,,))
    AND (a.Id = b.Id(+) AND a.critereA.Id = b.critereA (+) AND a.critereB = b.critereB (+))
    AND (a.Id = c.Id(+) AND a.critereA.Id = c.critereA (+) AND a.critereB = c.critereB (+))
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par TomDuBouchon Voir le message
    Donc, ce que tu peux faire en revanche, c'est créer une table dérivée qui te permettra de récupérer tous les résultats pour chaque date et chaque critère

    Cela semble une super idée seulement je ne suis que sur la version 5 (Désolé, j'ai oublié de le préciser) !

  16. #16
    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
    Question bête mais sur quel SGBD travailles-tu ?

    Car si tu es sur un SQL Server par exemple, il est sans doute possible de créer une jointure de type FULL JOIN. Celle-ci te permettra de résoudre le problème.
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

Discussions similaires

  1. Utiliser un alias de colonne dans une clause Where MS SQL
    Par sir dragorn dans le forum Langage SQL
    Réponses: 11
    Dernier message: 12/10/2011, 09h31
  2. Utilisation d'un alias comme nouveau champ calculé
    Par GROBIN dans le forum Access
    Réponses: 3
    Dernier message: 01/02/2007, 10h00
  3. [SQL2K][TSQL] Peut-on utiliser un alias dans une clause Where ?
    Par StormimOn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/05/2006, 09h25
  4. Utilisation d'alias avec Update
    Par Jacques - 06 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/01/2006, 00h31
  5. [Oracle 9.2]Utiliser un alias dans une contrainte ?
    Par belfaigore dans le forum Oracle
    Réponses: 5
    Dernier message: 29/06/2005, 14h18

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