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

Conception/Modélisation Discussion :

Mise en place de la dimension temps sous oracle


Sujet :

Conception/Modélisation

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Points : 5
    Points
    5
    Par défaut Mise en place de la dimension temps sous oracle
    Bonjour,
    J'ai trouvé des exemples de mise en place traité dans des universités avec solution. Voilà le problème :
    1- Dans la solution la dimension temps implémentée sous forme de vue matérialisé avec mise à jour complet (pas possible de faire de faste (faste refusé) tenant compte de l'expression de la requête construisant la vue) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Create materialized view temps_Dw 
    build immediate
    -- refresh fast on demand //pas possibleici
    refresh force on demand
    as select distinct to_char(datecommande,'mm/yyyy') as idtemps,to_char(datecommande,'Q/yyyy') as semester, to_char(datecommande,'yyyy') as annee
    from Vente;
    execute DBMS_MVIEW.refresh(' temps_Dw ');
    La mise à jour de cette vue à la demande, avec la procedure ci-dessus, affiche une erreur :
    ERREUR Ó la ligne 1 :
    ORA-12008: erreur dans le chemin de regénération de la vue matÚrialisÚe
    ORA-02292: violation de contrainte (DW.FK_VNT3) d'intÚgritÚ – enregistremenfils existant
    Cette erreur est attendu tout simplement parce que la clé primaire de temps_dw est référencé dans la table de fait vente_dw comme clé étrangère (voir 2) . Or la mise à jour complet vide la vue avant d'y chargé les données.
    (2) la table de fait vente_dw et définit comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE MATERIALIZED VIEW Vente_Dw
    build immediate 
    -- refresh force on commit
    refresh force on demand
    as select noclient,noarticle,to_char(datecommande,'mm/yyyy') as idtemps, SUM(montant) as CA FROM vente
    group by noclient,noArticle,to_char(datecommande,'mm/yyyy');
    alter table vente_Dw add constraint pk_vnt PRIMARY KEY(noclient,noarticle,idtemps);
    alter table Vente_Dw add constraint fk_vnt1 FOREIGN KEY(noarticle) REFERENCES article(noarticle);
    alter table Vente_Dw add constraint fk_vnt2 FOREIGN KEY(noclient) REFERENCES client(noclient);
    alter table Vente_Dw add constraint fk_vnt3 FOREIGN KEY(idtemps) REFERENCES temps_dw(idtemps);
    sachant que la table vente est la table source :
    vente(noclient,noarticle,datecommande,montant)
    Datecommande est sous forme : dd/mm/yyyy.

    Je ne sais pas s'il y a un détail que je ne comprends pas pour exécuter correctement cette solution. Si c’est le cas, prière de m'expliquer.
    Et si cette solution n’est pas bonne, j'aimerai bien si vous avez une solution à ce problème. Dites mois svp comment implémenter la table de dimension temps et de fait vente sous Oracle et comment les alimenter a partir des tables sources(vente) pour le moment sans utiliser d’ETL

    Merci par avance.

  2. #2
    Membre éprouvé Avatar de Jester
    Inscrit en
    Septembre 2003
    Messages
    813
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 813
    Points : 1 058
    Points
    1 058
    Par défaut
    Il faut sans doutes désactiver les contraintes le temps du refresh de la vue.

    Cependant en général on charge les dimensions puis on charge la table de fait en faisant des lookup dans les dimensions.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create view vente_dw as 
    select dim_date.idtemps, dim_produit.idproduit, montant
    from vente
    left outer join dim_date on dim_date.date = vente.date
    left outer join dim_client ...
    voir le concept des surrogate key.

    Passer par des tables et un script SQL au lieu de vues matérialisées dans un premier temps sinon.

  3. #3
    Expert confirmé
    Avatar de doc malkovich
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2008
    Messages
    1 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 884
    Points : 4 285
    Points
    4 285
    Billets dans le blog
    1
    Par défaut
    Hello,

    Normalement la dimension temps n'est pas alimentée à partir des faits, elle est alimentée à part en one-shot ou une fois par an. Tu trouveras des exemples de scripts sql oracle ici ou .

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/04/2008, 14h59
  2. Mise en place d'un serveur syslog sous Windows
    Par Mans91 dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 20/06/2007, 18h08
  3. Réponses: 2
    Dernier message: 06/10/2005, 16h10

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