Exemple d’utilisation d’une procédure stockée SSAS : Création d’une action pour ajouter un named set au cube depuis Excel (2/2 : L’action)

Objectif

Cet article fait suite à celui-ci. L’objectif de cette série d’article est de présenter une solution reposant sur une procédure stockée SSAS pour inscrire depuis Excel des Named sets dans un cube. Pour plus d’information, consulter le premier article de la série.

Mise en oeuvre

Création d’une action de type rowset

Nous allons donc créer une action permettant de modifier le MDX du cube.
Pour rappel, les actions sont de petits scripts associés à des parties du cube qui peuvent être exécutés notamment à la demande depuis les outils clients.
Les actions sont typées suivant la nature du travail à réaliser. Les outils clients ne sont pas tous capable d’initier tous les types d’action disponible sur SSAS.
Dans notre cas, nous souhaitons associer une action qui modifiera le script du cube. Il n’existe pas à proprement parlé d’action de type « exécution de script MDX », cependant, lest actions de type Rowset permettent d’exécuter une requête MDX.
Nous allons donc définir une action de type rowset avec caractéristiques suivantes :

  • Name : Add Named Set
  • Target type : cells
  • Target Object : All cells
  • Condition : [Measures].CurrentMember is [Measures].[Customer Count]
  • Type : Rowset

Nous indiquons ici que l’action pourra être déclenchée depuis les éléments « cellule ». Nous avons également ajouté une condition pour faire en sorte que l’action ne soit disponible que sur la mesure Customer count.
Reste à établir le code de l’action. Il doit faire appel à la procédure stockée en lui indiquant la définition du set correspondant à la cellule depuis laquelle l’utilisateur a invoqué l’action.
Pour connaitre les membres retenus en ligne et en colonne sur le client, nous allons nous appuyer sur l’assembly ASSP téléchargeable à cet emplacement : http://asstoredprocedures.codeplex.com/wikipage?title=Installation%20Instructions
Cette assembly nous permet, entre autre, de disposer d’une méthode FindCurrentTuple qui retourne le tuple d’une cellule (et donc, l’essentiel de la définition du set qui nous intéresse).
Pour rappel, les sets de mon cas d’utilisation, sont des sets de clients filtrés par leur existence sur un groupe de mesure. J’utiliserai donc comme définition du Set le résultat de l’expression suivante :

EXISTS([Customer].[Customer].[Customer].members, 
                    {'+ASSP.FindCurrentTuple()+'}, 
                    "Internet Customer"
                    )

Cette définition peut-être simplifiée pour d’autre cas d’utilisation.
L’expression correspondant à l’action sera au global :

'CALL [MdxScriptUpdater].CreateCohorte("Cohorte", 
                    "EXISTS([Customer].[Customer].[Customer].members, 
                    {'+ASSP.FindCurrentTuple()+'}, 
                    ""Internet Customers""
                    )",
			"localhost",
			"'+[Measures].DefaultMember.Properties("CATALOG_NAME")+'",
			"'+[Measures].DefaultMember.Properties("CUBE_NAME")+'")'

A noter ici l’utilisation des propriétés Catalog_name et Cube_name pour éviter de spécifier en dur le nom du cube et de la base. Ce qui permet de dupliquer l’action plus aisément.

Pour que cet expression fonctionne il aura fallu inscrire l’assembly ASSP sur le serveur SSAS cible de la même manière que nous avions inscrit l’assembly contenant notre procédure stockée.

Attention à ne pas surestimer les capacité de la méthode FinCurrentTuple. Dès lors qu’excel passera par un sous-cube pour traduire le tableau croisé dynamique en MDX, la méthode ne connaîtra plus la totalité du contexte. Pour l’exercice, nous allons donc nous contenter de déposer des membres en ligne et en colonne, ou bien de faire des sélection simple dans la zone filtre. En effet, les sélections multiple en filtre sont traduites en sous-cube et la définition de notre set sera erroné.

A ce stade, nous disposons d’une action présente uniquement sur la mesure Nombre de clients permettant d’ajouter à la dimension client, un set dont la définition est régi par le croisement donnant lieu à l’agrégat sur lequel nous avons cliqué :

Action "add a cohorte "utilisée dans Excel

Action « add a cohorte « utilisée dans Excel

Le résultat ouvre un nouvel onglet pour nous donner le nom de la cohorte (du set) créé. En rafraîchissant la connexion au cube, nous pouvons utiliser ce set :

Resultat de l'action

Resultat de l’action

Le résultat n’est pas encore parfait. Etant donné la méthode utilisée pour construire ces Set, nous ne pouvons pas procéder de manière itérative (il n’est pas correct d’utiliser un set ainsi généré comme filtre pour un définir un autre set plus restreint).

Cette conception itérative de nos sets fera l’objet d’un prochain article.

Laisser un commentaire