Linked Server SSAS

 

Ça faisait longtemps que je n’avais pas écrit d’article 😮

C’est une question posée par Steve Simon sur une mailing liste « secrète » qui m’a poussé à faire quelques tests et valider le fonctionnement de la commande OpenQuery() sur un cube tabulaire en DAX !

 

Linked Server

La création de serveurs liés dans SQL Server n’est plus à présenter, cela permet au moteur de base de données SQL Server d’exécuter des commandes sur des sources de données OLEDB situées en dehors de l’instance.

Linked Server

En général, les serveurs liés sont configurés pour permettre d’exécuter une instruction Transact-SQL qui inclut des tables situées dans une autre instance ou dans une autre base de données comme Oracle, DB2, Access, Excel,… A ce titre j’avais écrit un article sur la création d’un serveur lié sur une base de données Informix : https://pulsweb.azurewebsites.net/serveur-lie-informix/.

Un autre exemple que j’aime bien sur l’utilisation d’un serveur lié : Klout avait besoin de créer un cube multidimensionnel sur des données hébergées dans un clusteur Hadoop. La solution fut d’utiliser SQL Server comme relais ou proxy pour exécuter des commandes sur une source de données OLEDB (MSDASQL) via le driver Hive ODBC :

HiveLinkedServer

 

SSAS Multidimensionnel (MDX)

La commande T-SQL sp_addlinkedserver permet de créer un serveur lié, ici sur un cube SSAS Multidimensionnel :

EXEC master.dbo.sp_addlinkedserver
	@server='MSSAS',
	@srvproduct='ssas',
	@provider='MSOLAP',
	@datasrc='CASTERESROMAIN',
	@catalog= ‘AdventureWorksDW2012Multidimensional’;

La commande OPENQUERY() permet d’exécuter une requête sur le serveur lié spécifié.

Remarque : OPENQUERY peut également être utilisé comme table cible d’une instruction INSERT, UPDATE ou DELETE. Cela dépendant des capacités du fournisseur OLEDB.

Voici une requête MDX sur le cube multidimensionnel référencé par le serveur lié « MSSAS » :

SELECT * FROM OPENQUERY([MSSAS], 'SELECT [Measures].[Reseller Sales Amount] ON 0 FROM [MyCube]') as tmp;

 

SSAS Tabulaire (MDX & DAX)

Voici la requête T-SQL permettant d’ajouter un serveur lié SSAS Tabulaire :

EXEC master.dbo.sp_addlinkedserver
	@server='TSSAS',
	@srvproduct='ssas',
	@provider='MSOLAP',
	@datasrc='CASTERESROMAIN\TAB',
	@catalog='AdventureWorks Tabular Model SQL 2012';

Voici une requête MDX sur le cube tabulaire référencé par le serveur lié « TSSAS » :

SELECT * FROM OPENQUERY([TSSAS], 'SELECT [Measures].[Internet Total Units] ON 0 FROM [Internet Operation]') as tmp;

Et le meilleur pour la fin, une requête DAX sur le même cube tabulaire :

SELECT * FROM OPENQUERY([TSSAS], 'EVALUATE(''Internet Sales'')') AS tmp;

Cela laisse entrevoir pas mal de cas d’utilisations 🙂 Ainsi il est intéressant de pouvoir extraire des données en DAX, en MDX, en HiveQL, en DMX, … puis de pouvoir les remanier facilement a l’aide de T-SQL.

 

Bonus : Linked Server Hadoop Hive

Requête T-SQL permettant d’ajouter un serveur lié Hive :


EXEC master.dbo.sp_addlinkedserver
	@server = 'HiveDW', 
	@srvproduct='HIVE',
	@provider='MSDASQL', 
	@datasrc='hdiapvx16',
	@provstr='Provider=MSDASQL.1;Persist Security Info=True;User ID=###; Password=###;'

Pour afficher la liste des tables Hive :

SELECT * FROM OPENQUERY ([HiveDW],'SHOW TABLES;');

 

3 Comments

Comments are closed.