vendredi 9 février 2007

Effectuer un process de cube dynamiquement...

Bonjour à tous !
Bon nombre d'entre vous ont peut-être souhaité un jour pouvoir effectuer un process de cube Analyses Services dynamiquement dans une application.
Le namespace DSO (Decision Support Objects) permet de se connecter au serveur Analysis Services simplement et offre une API intuitive en s'appuyant sur des composants COM via interop.
Le namespace DSO est disponible dans le framework 1.1 et permet de piloter Analysis Services 2000 et 2005.
Le namespace AMO (Analysis Management Object - Microsoft.AnalysisServices) a remplacé avantageusement le namespace DSO dans le framework 2.0.

Voici quelques bases pour l'utilisation de DSO...

Le code suivant permet d'effectuer une connexion au serveur local :
DSO.ServerClass dsoServer = new DSO.ServerClass();
dsoServer.Connect("localhost");

Puis il est possible de se positionner sur la base "Test" de la façon suivante :
DSO.Database dsoDB = dsoServer.MDStores.Item("Test");

Enfin, un cube ou une dimension donnés peuvent être identifiés de la façon suivante :
DSO.Cube dsoCube = dsoDB.MDStores.Item("MonCube");
DSO.Dimension dsoDim = dsoDB.Dimensions.Item("MaDimension");

Le process du cube ou d'une dimension est alors très aisément exécuté :
dsoDim.Process(DSO.ProcessTypes.processFull);
dsoCube.Process(DSO.ProcessTypes.processFull);

Si vous modifiez le cube dynamiquement (ajout ou suppression de dimension, modification des clauses de jointure, ...), il est nécessaire de mettre à jour le cube avant d'en effectuer le process :
dsoCube.Update();

Pensez à toujours vous déconnecter - typiquement dans le finally de vos blocs try-catch :
dsoServer.Disconnect();

... Et pour l'utilisation de AMO...

Le code suivant permet d'effectuer une connexion au serveur local :
Microsoft.AnalysisServices.Server amoServer = new Microsoft.AnalysisServices.Server();
amoServer.Connect("Data Source=localhost");

Le process du cube est tout aussi simple :
amoServer.Databases["Test"].Cubes["MonCube"].Process();

On notera les noms des collections beaucoup plus propres (Databases au lieu de MDStores).

Un pilotage simple pour des applications d'administration interactives ! Attention toutefois à ne pas oublier qu'un process de cube peut être une action coûteuse, et qu'il n'est souvent pas de très bon ton de rendre les données indisponibles pendant la journée ;-)

Aucun commentaire: