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

MS SQL Server Discussion :

Charger dans une table de fait des données provenant de plusieurs tables


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Charger dans une table de fait des données provenant de plusieurs tables
    Bonjour,

    Je suis en stage et débute avec SQL server 2005.
    Je dois réaliser un mini data warehouse.
    J'ai déja coneptualisé le modèle dimensionnel et je souhaite à présent
    le mettre en oeuvre.
    Javais déja réalisé en cours un exercice similaire sauf que je partais d'un fichier excel contenant l'ensemble des données.
    Aujourd'hui ma source est une base opérationnelle contenant plusieurs tables.

    le problème est simple jai quatre tables opérationelles principales :
    les carottes,
    les tomates,
    les celeris et
    les concombres.

    chacune des ses tables contient des champs similaires
    c pourquoi je souhaite charger les données relatives à ces tables dans
    une seule et même table de fait "légume" en ajoutant un champ
    "type de légume" pour les différencier.

    Ma question est la suivante:
    Comment réaliser le chargement dans ma table de fait avec des
    données provenant de tables différentes

    Par exemple comment indiquer que dans le champ "poid_légume"
    de ma table de fait que je souhaite récupérer les données du champs "poid" de chacune des tables opérationnelles?


    Merci d'avance pour vos réponses

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Si j'ai bien compris, tes 4 tables ont des champs en commun que tu veux "mutualiser" dans 1 seule table.
    Ce choix me semble discutable (voir methode2)

    methode2:
    Il me semble plus judicieux de ne faire qu'une seule table "legume" avec pour champs :
    -type (qui prendra pour valeurs "carottes, "tomates", "celeris", "concombres")
    -poids
    -prix
    -couleur
    -provenance
    ...
    (càd tous les champs communs à tes 4 types de légumes, ainsi que les champs spécifiques à chaque légume si il y en a)

    methode1:
    si tu veux quand même utilser 4 tables différentes + 1 table "legume" :
    tu devras mettre dans ta table mutualisée "légume" tous les champs communs ainsi qu'un champ additionel "type" qui te permettra de savoir à quelle table appartiennent tes données communes.
    Pour récupérer la valeur du champ "poids" correspondant à chacune de tes tables, il te suffira alors de faire une requête du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select poids from legume where type='carottes' ; select poids from legume where type='tomates' ; etc...

  3. #3
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci de ta réponse

    euh en fait jai une base opérationelle avec 4 tables

    et je veux dans ma table de fait (celle du modèle dimensionelle que je dois générer avec sql server) mutualisé comme tu dis les données de ces quatres tables en ajoutant un champ "type_legume" pour savoir lorsqu'il s'agit d'une
    tomate ou d'un concombre...

    ma question c plutôt de savoir avec "integration service" quelle démarche je
    dois suivre.

    je ne peux pas récupérer en une seule requête les données des quatre tables donc comment je fais?

    est ce que je charge séparemment les différentes tables puis j 'utlise
    l'outil "merge join"

    En fait ma question est sur la démarche générale...

    je suis un peu perdu avec tous les outils proposé par "integration_service"

    je voudrais savoir comment je charge,dans quel ordre ,omment je mutualise
    et quels sont les outils adéquat pour le faire

    je n'ai pas trouver de tutoriel avec un exemple ou la source est une base de données avec pluseurs table.

    Je ne trouve que des tutoriaux avec comme type de données source un fichier plat unique ou un tableaur excel...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Je comprends mieux ce que tu cherches a faire : en une opération, exporter toutes les données de type commun depuis les 4 tables vers la table de fait "mutualisée"

    par ex, si
    dans "carottes" on a un enregistrement (id=1,poids=10)
    dans "tomates" on a un enregistrement (id=12,poids=25)
    la table legume doit se remplire avec les 2 enregistrements : (id=1,poids=10,type_legume=carottes) et (id=2,poids=25,type_legume=tomates)

    Je ne vois pas comment le faire ni avec le DTS de SQL Server ni avec une requête (peut-être en utilisant le Merge comme tu dit, mais je ne connaît pas du tout);

    Personellement si je devais faire cela, j'aurais recours à un langage de programmation, par exemple PHP : je ferais des select sur les 4 tables pour récupérer les données à mutualiser, puis des insert pour les "injecter" dans la table de fait en positionnant le champs type_legume selon la table de provenance.

  5. #5
    Membre éclairé
    Avatar de Reskibil
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 815
    Points
    815
    Par défaut
    Je suis pas un pro de SSIS mais à 1ere vue, je dirais :
    4 DTF, 1 par table
    et dans chaque DTF :
    1 datareader
    1 Derived column pour ajouter le type
    1 destination pour ta table globale

    Chaque DTF se lance à la suite

    Après tu peux ajouter un lookup pour faire un insert si la ligne n'existe pas ou un update si elle existe et que tu veux la mettre à jour (ou juste un insert pour n'avoir que les nouvelles lignes).

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/03/2012, 10h59
  2. Réponses: 4
    Dernier message: 09/01/2008, 21h10
  3. Réponses: 11
    Dernier message: 18/10/2007, 13h49
  4. Réponses: 2
    Dernier message: 21/02/2007, 12h22
  5. Réponses: 11
    Dernier message: 08/12/2006, 22h39

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