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 :

Résultat d'un requête dans une variable


Sujet :

Designer

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Résultat d'un requête dans une variable
    Bonjour,

    J'utilise une requête pour connaître la date de rafraîchissement de mon data warehouse. La requête me retourne une seule ligne avec un seul champs contenant la date/heure. Jusque là, ok.

    Maintenant, je voudrais faire des calculs de date entre cette date et une date présente dans chaque enregistrement. Et là, je n'arrive pas à faire une formule avec ces données sans avoir un #ERREUR ou un #CONTEXT.
    Il ne veut pas prendre la valeur dans cette requête car les tables ne sont pas liées.

    J'aimerai pouvoir :
    - soit lier ces tables (qui n'ont rien en commun)
    - soit créer une sorte de variable globale ou statique dont le résultat ne serait pas recalculé à chaque nouvel enregistrement, un peu comme la fonction [CurrentDate], dans l'éditeur de variable.

    Avez-vous des idées ? Merci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 364
    Points : 551
    Points
    551
    Par défaut
    Bonjour,

    Je tenterais bien ce qui suit :

    Avant dans l'univers on a 3 objets :

    <Date référence> qui pointe sur la ligne unique.
    <Date facture> qui pointe sur la ligne à comparer.
    <montant> indicateur sur les ventes (par exemple).

    Cela génère 2 requêtes.

    Je ne pense pas qu'on puisse faire de SQL à la carte avec la synchronisation de requêtes donc :

    Soit : Dans le Designer, modification de l'objet <Date référence> pour qu'il pointe aussi sur la ligne à comparer <Date facture>.
    Soit : Création d'un objet personnel dans Desktop Intelligence qui fait la même chose.

    Cela doit normalement ne générer qu'une seule requête.

    Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT
      dbo.DimTime.FullDateAlternateKey,
      dbo.DimTime.FullDateAlternateKey,
      sum(Internet_ventes.SalesAmount)
    FROM
      dbo.DimTime,
      dbo.FactInternetSales  Internet_ventes
    WHERE
      ( Internet_ventes.ShipDateKey=dbo.DimTime.TimeKey  )
    GROUP BY
      dbo.DimTime.FullDateAlternateKey, 
      dbo.DimTime.FullDateAlternateKey
    (Ici sur SQL SERVER, à adapter suivant le moteur de base de données).

    Modifier la requête en faisant un produit cartésien sur la table qui n'a qu'une ligne.

    Cela donne une requête du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT
      dbo.DateTest.Date_Choisie,
      dbo.DimTime.FullDateAlternateKey,
      sum(Internet_ventes.SalesAmount)
    FROM
      dbo.DimTime,
      dbo.FactInternetSales  Internet_ventes,
      dbo.DateTest
    WHERE
      ( Internet_ventes.ShipDateKey=dbo.DimTime.TimeKey  )
    GROUP BY
      dbo.DateTest.Date_Choisie, 
      dbo.DimTime.FullDateAlternateKey
    L'astuce consiste à ce qu'il y ait le même nombre de champs de même type dans le Select que dans le panneau Conditions du résultat.

    A l'exécution, les variables devraient être liées.

    Evidemment, ajouter un objet intermédiaire à l'univers peut nuire à sa lisibilité, je ne sais pas si c'est acceptable dans ton cas.

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Merci pour votre réponse. En fait, c'est exactement ça. Ce qu'il me faut, c'est de faire un produit cartésien entre ma requête principale et la requête pour la date, qui ne retourne qu'une ligne.

    Par contre, quand vous dites :
    Soit : Dans le Designer, modification de l'objet <Date référence> pour qu'il pointe aussi sur la ligne à comparer <Date facture>.
    Soit : Création d'un objet personnel dans Desktop Intelligence qui fait la même chose.
    Comment fait-on pointer l'objet <Date référence> sur la ligne avec <Date facture> ???

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 364
    Points : 551
    Points
    551
    Par défaut
    Tu crées 2 objets distincts dans le designer pour lesquels l'équivalent Select est le même.

    Dans mon exemple l'objet <Date de référence> et l'objet <Date Facture> ont pour équivalent select : dbo.DimTime.FullDateAlternateKey.

    Et c'est dans le SQL à la carte (au niveau de la construction du rapport) que tu fais le produit cartésien et que tu échange le champ de l'objet.

    A la réflexion, si tu as accès au Designer et que ta version de BO est >= 6.5 tu devrais aussi pouvoir remplacer la table qui supporte <Date Facture> par une table dérivée dans laquelle tu construis ton produit cartésien.

    En procédant de cette façon tu n'as même plus besoin de faire de SQL à la carte et tu ne perturbes plus les autres utilisateurs de l'univers avec un objet bizarre.

    Une fois que tu as construit ta table dérivée, tu peux créer un objet sur <Date Facture> et un objet sur <Date référence> qui pointent sur leur champ réel, tu remplaces ta table originale par la table dérivée (reconstruction des jointures, des contextes, et modification de tous les objets qui pointaient sur la table originale obligatoire) et le tour est joué.

Discussions similaires

  1. [Tableaux] résultat requête dans une variable
    Par jedi186 dans le forum Langage
    Réponses: 4
    Dernier message: 22/02/2007, 13h43
  2. Cmt stocker le résultat d'une requête dans une variable ?
    Par innova dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 07/02/2007, 09h41
  3. avoir le résultat d'une requête dans une variable
    Par idiot dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 09/09/2006, 18h19
  4. Réponses: 3
    Dernier message: 22/07/2005, 12h12
  5. Résultat d'une requête dans une variable...
    Par Hoegaarden dans le forum Bases de données
    Réponses: 6
    Dernier message: 28/04/2004, 13h51

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