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

EPM (Hyperion) Discussion :

Récupération de données Essbase en Excel VBA


Sujet :

EPM (Hyperion)

  1. #1
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 168
    Points : 123
    Points
    123
    Par défaut Récupération de données Essbase en Excel VBA
    Bonjour,

    Je cherche à recuperer les données d'un cube Essbase afin de les insérer par la suite dans un tableau Excel. Pour cela je me sers de VBA et des macros dediées à Essbase.

    Je ne connais pas grand chose à Essbase, mais j'ai déjà pas mal d'experience en VBA.

    Pour commencer j'ai réussi à me connecter à mon cube grâce à la fonction
    EssVConnect. C'est ensuite que les choses se corsent

    Je pensais utiliser la fonction EssVRetrieve mais je ne comprend pas comment celle-ci fonctionne. En effet, elle me demande une plage alors que je ne connais que les axes de mon cubes (cycle, periode, client, devise, produit et centre). De plus celle-ci ne semble pas renvoyer des valeurs en soit mais une entier pour verifier si l'instruction c'est bien deroulé!

    Je suis donc un peu perdu et aurais besoin d'un peu d'aide. Deja savoir si la fonction EssVRetrieve est bien celle que j'utiliserais et comment à partir de mes axes récuperer les données dans le cube.

    PS: Si vous voulez voir le peu de code que j'ai pour le moment (connection, recuperation des libellés des Axes et deconnection) veuillez me le faire savoir.

    En esperant un coup de pouce de votre part
    Bonne journée.

    chipss,

  2. #2
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    J'ai trouvé la fonction EssVCell qui me permet de récuperer les données en mettant la liste des axes souhaité. Mais celle-ci ne me permet que de récuperer les valeurs une à une, ce qui n'est pas l'idéal pour mon cas car j'ai près de 200 valeurs à extraire!

  3. #3
    Membre régulier
    Homme Profil pro
    Certifié Oracle Essbase/Planning
    Inscrit en
    Juin 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Certifié Oracle Essbase/Planning

    Informations forums :
    Inscription : Juin 2002
    Messages : 42
    Points : 117
    Points
    117
    Par défaut
    Bonjour,

    une fois ta feuille connectée à un cube, tu peux utiliser la fonction suivante pour faire un retrieve de toute la feuille :

    x = EssVRetrieve(Null, Null, 1)

    1er argument : nom de la feuille (null = feuille courante)
    2ème argument : nom de la plage de cellules (null = toute la feuille)
    3ème argument : 1 = pas de lock des cellules


    => Il est préférable d'éviter d'utiliser plusieurs fois le EssVCell dans une même feuille car chaque utilisation revient à un faire un retrieve pour obtenir la valeur d'une seule cellule, ce qui est très consommateur en ressources système.


    voila voila

  4. #4
    Membre confirmé
    Avatar de sroux
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 516
    Points
    516
    Par défaut
    Bonjour,

    S'agit-il d'automatiser l'extraction de données sans format particulier? Dans ce cas pour quoi ne pas passer par un report script?

    Je t'invite à jeter un coup d'oeil à l'API Essbase, utilisable en VBA.

    Voici la fonction permettant d'exécuter un rapport :
    http://docs.oracle.com/cd/E12825_01/...htm?launch.htm

    Voici la fonction permettant de générer et d'exécuter un rapport à la volée :
    http://docs.oracle.com/cd/E12825_01/...f/mavfrepo.htm

    Voici la doc au sujet des report script :
    http://docs.oracle.com/cd/E12825_01/...mands_chap.htm

    exemples : http://docs.oracle.com/cd/E12825_01/...es_rwriter.htm

  5. #5
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    Tout d'abord merci de vos réponses.

    Asphp j'ai bien conscience que l'utilisation de EssVCell n'est pas des plus optimal mais c'est la seul technique que j'ai trouvé pour récuperer les données du cube. En effet, j'avais déjà la fonction EssVRetrieve(Null,Null,1) me permettant de faire un Retrieve sur toute la feuille. Sauf que je ne comprend pas vraiment ce que vous appelez un 'Retrieve' et je ne comprend pas comment récuperer les données une fois celle-ci réalisé. La fonction me rend en effet un Integer suivant comment la fonction a réagi, et non des données brutes de mon cubes.

    Sroux je cherche simplement a récuperer les données contenus dans mon cube pour les insérer dans un reporting financier! Je vais jetter un coup d'oeil aux fonctions que tu m'as conseillé et je te dis si cela semble pouvoir m'aider

    Merci encore.
    Bonne fin de journée,

    Chipss

  6. #6
    Membre régulier
    Homme Profil pro
    Certifié Oracle Essbase/Planning
    Inscrit en
    Juin 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Certifié Oracle Essbase/Planning

    Informations forums :
    Inscription : Juin 2002
    Messages : 42
    Points : 117
    Points
    117
    Par défaut
    Pour voir le retrieve :

    1. Dans une feuille Excel, crée un bouton.
    2. Sur le clic de ce bouton, met le code VBA suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    x = EssMenuVRetrieve
    End Sub
    3. Connecte ta feuille à un cube Essbase

    4. Clic sur le bouton : un retrieve va se produire dans la feuille.
    Deux situations peuvent alors se présenter : soit ta feuille contient les dimensions du cube et alors les données seront rafraichies ; soit ta feuille est vide et le retrieve va ramener par défaut toutes les dimensions au niveau le plus haut.

    Tu peux ensuite aller + loin avec la fonction EssVRetrieve en choisissant des plages de données pour faire des retrieves sur des parties de feuille.

  7. #7
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    D'accord. Et donc pour recuperer les données je navigue dans mon cube avec des Retrieve et ensuite je recupere les données que je veux avec un simple data = Range(xx).value?

    Pour le coup je trouve que EssVCell est bien plus intuitive pour faire ça. Après si tu me dit que cela va être plus long à l'execution je vais essayer de faire comme tu me conseilles

    Sroux j'ai regardé un peu ce que tu m'as conseillé mais je n'ai pas compris grand chose. Et comme mon maitre de stage m'a conseillé d'utiliser EssVRetrieve je pense que je vais plutot utilisé cette fonction. Mais merci quand même de t'être penché sur mon problème!

    Chipss,

  8. #8
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    Une petite question : EssMenuRetrieve() et EssVRetrieve(Null,Null,1) sont equivalentes?

  9. #9
    Membre confirmé
    Avatar de sroux
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 516
    Points
    516
    Par défaut
    je cherche simplement a récuperer les données contenus dans mon cube pour les insérer dans un reporting financier
    Dans ce cas le plus simple consiste à préparer une restitution à la main, via l'add-in excel dans un ou plusieurs onglets. Il s'agit ensuite de faire une procédure qui sélectionne chacun des onglet et qui effectue ensuite un EssMenuRetrieve() ou un EssVRetrieve(), qui sont équivalents. Dans ce cas j'opterai pour EssMenuRetrieve qui simule l'action du menu (Essbase / retrieve).

    Cet exemple est d'ailleurs détaillé dans la bible Essbase, chap Essbase et Visual Basic, Atelier : un bouton pour rafraichir tous les onglets (page 625).

  10. #10
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par sroux Voir le message
    Dans ce cas le plus simple consiste à préparer une restitution à la main, via l'add-in excel dans un ou plusieurs onglets. Il s'agit ensuite de faire une procédure qui sélectionne chacun des onglet et qui effectue ensuite un EssMenuRetrieve() ou un EssVRetrieve(), qui sont équivalents. Dans ce cas j'opterai pour EssMenuRetrieve qui simule l'action du menu (Essbase / retrieve).
    Je suis desolé mais je n'ai absolument rien compris :/ Qu'est ce qu'une restitution à la main?

  11. #11
    Membre régulier
    Homme Profil pro
    Certifié Oracle Essbase/Planning
    Inscrit en
    Juin 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Certifié Oracle Essbase/Planning

    Informations forums :
    Inscription : Juin 2002
    Messages : 42
    Points : 117
    Points
    117
    Par défaut
    Si tu as fais l'exemple dans Excel, le clic sur le bouton déclenche un Retrieve de la feuille entière. Si dans cette feuille, tu as une requête Essbase où tu as choisi une valeur pour chaque dimension, les données seront rafraîchies.

    Exemple sur cette copie d'écran :
    10, 15, 20 sont les valeurs de l'indicateur "vente" issues du Retrieve pour le croisement des dimensions temps (jan, fev, mar), géo (france), devise (local), scenario (realise), produit (tele) :







    Citation Envoyé par Chipss Voir le message
    D'accord. Et donc pour recuperer les données je navigue dans mon cube avec des Retrieve et ensuite je recupere les données que je veux avec un simple data = Range(xx).value?

    Pour le coup je trouve que EssVCell est bien plus intuitive pour faire ça. Après si tu me dit que cela va être plus long à l'execution je vais essayer de faire comme tu me conseilles

    Chipss,

  12. #12
    Membre confirmé
    Avatar de sroux
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 516
    Points
    516
    Par défaut
    Chipps ne serait-ce pas à ton "maître de stage" de te montrer au moins les fondamentaux avant de t'envoyer en aveugle sur ce sujet...?

  13. #13
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    D'accord je pense avoir compris. Mais pour obtenir un cube sous cette forme tu as utilsé d'autres fonctions qu'un simple EssVRetrieve nan? Genre je pense nottament a des EssVZoomIn ou encore des EssVKeepOnly...

    Enfin par exemple supposons que je veuille recuperer la valeur de Janvier, je fait un simple copier/coller de la valeur dans mon tableau?

    Merci encore de prendre un peu de temps pour m'aider.

    Chipss,

  14. #14
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    Malheureusement, il se sert de Essbase de façon mannuel uniquement. Et n'a donc pas forcement de connaissances très poussées en VBA/ESsbase...

    Citation Envoyé par sroux Voir le message
    Chipps ne serait-ce pas à ton "maître de stage" de te montrer au moins les fondamentaux avant de t'envoyer en aveugle sur ce sujet...?

  15. #15
    Membre régulier
    Homme Profil pro
    Certifié Oracle Essbase/Planning
    Inscrit en
    Juin 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Certifié Oracle Essbase/Planning

    Informations forums :
    Inscription : Juin 2002
    Messages : 42
    Points : 117
    Points
    117
    Par défaut
    Dans mon exemple, j'ai saisi directement dans Excel une valeur pour chaque dimension en page (france, local, realise, tele), en colonne (jan, fev, mar), et en ligne (vente).

    Avec cette disposition sous forme de tableau multi-dimensionnel, Essbase va récupérer la valeur de ce croisement à la suite d'un retrieve.

    Après avec VBA et les fonctions Essbase, tu peux récupérer dynamiquement les valeurs de chaque dimension.


    Citation Envoyé par Chipss Voir le message
    D'accord je pense avoir compris. Mais pour obtenir un cube sous cette forme tu as utilsé d'autres fonctions qu'un simple EssVRetrieve nan? Genre je pense nottament a des EssVZoomIn ou encore des EssVKeepOnly...

    Enfin par exemple supposons que je veuille recuperer la valeur de Janvier, je fait un simple copier/coller de la valeur dans mon tableau?

    Merci encore de prendre un peu de temps pour m'aider.

    Chipss,

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 54
    Points : 16
    Points
    16
    Par défaut re
    Bonjour tout le monde,

    asphp pourrais tu me filais le code pour le bouton retrieve.
    Je te remercie beaucoup
    bonne journée

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

Discussions similaires

  1. extraction de données xml vers excel (VBA)
    Par gibba88 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 25/04/2012, 12h33
  2. Récupération de données Word dans Excel en VBA
    Par infoexcel dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 14/01/2009, 11h01
  3. Récupération de données entre fichiers Excel
    Par SlySylvain dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/01/2009, 14h35
  4. Comment écrire dans une base de données ODBC via Excel (VBA)
    Par Shark777 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/04/2008, 05h56
  5. erreur de conexion a une base de donneés access avec excel(vba)
    Par leo13 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 27/11/2006, 10h09

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