[SSAS] Rowset Action et SQL, une procédure pour les exécuter toutes (les requêtes)!

Il est écrit dans Books Online que la Rowset/DataSet action supporte les requêtes MDX – logique jusque là – mais aussi SQL sur « n’importe quel provider OLE DB ». Or je ne connais personne qui soit capable de faire un exemple fonctionnel de requête SQL dans une action de cube.

Je me suis donc demandé s’il ne serait pas possible de passer par un biais différent: MDX permet l’appel à des procédures stockées managées, et les clients (Excel, OWC) peuvent théoriquement afficher des DataTables. Pourquoi ne pas créer une fonction qui prendrait en paramètre une chaine de connexion, une requête et renverrait une DataTable? C’est très bête mais j’ai donc essayé hier soir.

J’ai donc créé cette petite fonction qui marche de la manière suivante:

  1. Création d’une connexion OLE DB grâce à la chaine fournie en paramètre.
  2. Création d’un DataAdapter se basant sur une commande OLE DB sur cette connexion avec la requête fournie en paramètre
  3. Remplissage d’une DataTable via le DataAdapter
  4. Retour de la DataTable

namespace FJSP
{
public class MyOpenRowsetClass
{
public DataTable MyOpenRowset(string OleDbConnectionString, string SqlQuery)
{
DataTable dt = new DataTable(« ResultSet »);
OleDbConnection conn = null;
b
{
conn = new OleDbConnection(OleDbConnectionString);
conn.Open();
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = new OleDbCommand(SqlQuery, conn);
da.Fill(dt);
}
finally
{
if (conn != null)
conn.Close();
}
return dt;
}
}
}

que j’ai ensuite compilé et ajoutée à ma base SSAS en utilisant l’ajout d’assembly.

En exécutant la requête suivante dans Management Studio…

CALL FJSP.MyOpenRowset(
« Provider=SQLNCLI10.1;Persist Security Info=False;User ID=sa;Pwd=Pa$$w0rd;Initial Catalog=AdventureWorksDW2008;Data Source=(local); »
,« SELECT * FROM FactInternetSales »);

J’obtient exactement ce que je cherchais🙂


Ne reste plus ensuite qu’à exécuter un ajout d’action sur le cube SSAS comprenant un appel CALL de ma procédure stockée…


Un deploy plus tard, clic droit, « Action » sur une cellule et… miracle ça marche aussi dans le browser de BIDS!


Et dans Excel? C’est encore mieux! On se connecte en PivotTable, un petit clic sur actions sur une cellule…


Et voilà le résultat!


Imaginez les potentialités offertes par ce petit bout de code de mauvais développeur .NET : n’importe quelle requête, paramétrée de toutes les façons imaginables, sur tous les systèmes possibles supportant OLE DB🙂.
Je vous fournis la DLL sur mon SkyDrive ici.

J’attends vos retours!

A bientôt!

Edit du 20 Juin 2009: Gurvan Guyader précise justement en commentaire que l’assembly doit être paramétré comme Unrestricted et non pas Safe, cela pour permettre l’accès aux objets de System.Data.OleDb.

Une réflexion sur “[SSAS] Rowset Action et SQL, une procédure pour les exécuter toutes (les requêtes)!

  1. Pingback: Techdays 2013, épilogue | François Jehl sur Microsoft BI

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s