Comment effectuer une requête distribuée SQL Server avec OLAP Server

Cet article explique comment effectuer une requête distribuée SQL Server avec OLAP Server.

Version du produit d’origine : SQL Server
Numéro de base de connaissances d’origine : 218592

Résumé

Cet article explique comment effectuer une requête distribuée SQL Server pour récupérer des données à partir d’un cube OLAP Services (ou Analysis Services). Avec Microsoft SQL Server, vous pouvez effectuer des requêtes sur des fournisseurs OLE DB. Pour ce faire, vous pouvez utiliser l’une des options suivantes :

  • Utilisez les OPENQUERY OPENROWSET fonctions Transact-SQL ou Transact-SQL.
  • Utilisez une requête avec des noms en quatre parties, y compris un nom de serveur lié.

Par exemple :

sp_addlinkedserver 'mylinkedserver', 'product_name', 'myoledbprovider', 'data_source','location', 'provider_string', 'catalog'
SELECT *
FROM OPENQUERY(mylinkedserver, 'select * from table1')

Vous pouvez utiliser ou la OPENROWSET OPENQUERY fonction dans une instruction SQL Server SELECT pour transmettre des requêtes au serveur OLAP lié. La requête est limitée à la syntaxe abrégée SELECT prise en charge par OLAP Services . Toutefois, la requête peut inclure la syntaxe MDX (Multidimensional Expressions). Une requête qui inclut MDX retourne des ensembles de lignes aplaties, comme décrit dans la documentation OLE DB. Pour plus d’informations sur la SELECT syntaxe prise en charge par SQL Server OLAP Services, consultez la rubrique syntaxe SQL SELECT prise en charge dans la documentation en ligne des services OLAP.

Pour interroger une base de données de serveur OLAP locale ou distante à partir de SQL Server, vous devez installer le fournisseur OLE DB MSOLAP sur l’ordinateur exécutant SQL Server. Le fournisseur OLE DB MSOLAP est installé lorsque vous installez les composants clients OLAP à partir de SQL Server.

EXEMPLE OPENROWSET et OPENQUERY

L’exemple de code Transact-SQL suivant montre comment configurer et utiliser des requêtes distribuées avec un serveur OLAP avec les fonctions et les OPENQUERY OpenRowset fonctions. Vous devez modifier les noms des sources de données et le nom du catalogue en fonction des besoins.

------------------------------------------
--OPENROWSET for OLAP Server
------------------------------------------

SELECT a.*
FROM OpenRowset('MSOLAP','DATASOURCE=myOlapServer; Initial Catalog=FoodMart;',
'SELECT Measures.members ON ROWS,
[Product Category].members ON COLUMNS
FROM [Sales]') as a
go

-- Example of MDX with slicing --

SELECT a.*
FROM OpenRowset('MSOLAP','DATASOURCE=myOlapServer; Initial Catalog=FoodMart;',
'SELECT
 { Time.Year.[1997] } ON COLUMNS,
NON EMPTY Store.MEMBERS ON ROWS
FROM Sales
WHERE ( Product.[Product Category].[Dairy] )') as a

--------------------------------------------------
-- Linked Server Examples with OPENQUERY
--------------------------------------------------

EXEC sp_addlinkedserver
    @server='olap_server',
    @srvproduct='',
    @provider='MSOLAP',
    @datasrc='server',
    @catalog='foodmart'

go

-- MDX in OPENQUERY --

SELECT *
FROM OPENQUERY(olap_server,
'SELECT
{ Time.Year.[1997] } ON COLUMNS,
NON EMPTY Store.MEMBERS ON ROWS
FROM Sales
WHERE ( Product.[Product Category].[Dairy])' )

Note

Le passage de requêtes de SQL Server à une rubrique olAP Server liée, dans la documentation en ligne des services OLAP, contient un bogue de documentation dans l’exemple de code :

SELECT *
FROM OPENQUERY(olap_server, 'SELECT [customer], [quantity] FROM sales')

Seule une forme limitée de SQL est prise en charge et seuls les noms de niveau ou de mesure peuvent être spécifiés. Lorsque vous exécutez la requête, vous recevez ce message d’erreur :

Serveur : Msg 7399, Level 16, State 1, Line 1 du fournisseur OLE DB « MSOLAP » a signalé une erreur. [Message retourné par: le fournisseur OLE/DB Le nom de colonne « customer » n’est pas valide. Seuls les noms de niveau ou de mesure peuvent être spécifiés.]

Une façon de corriger la requête consiste à utiliser les éléments suivants :

SELECT *
FROM OPENQUERY(olap_server, 'SELECT [unit sales] FROM sales')

Toutefois, le passage d’instructions SQL dans ce formulaire au serveur OLAP peut être lent et vous pouvez recevoir une erreur de délai d’attente sur certains ordinateurs :

Le fournisseur OLE DB « MSOLAP » a signalé une erreur. [Message retourné par le fournisseur OLE/DB : Impossible d’ouvrir la base de données 'foodmart'] [Message retourné par le fournisseur OLE/DB : erreur du serveur OLAP : L’opération demandée a échoué en raison du délai d’expiration.]

Exemples de serveur lié avec des noms en quatre parties

L’exemple de code Transact-SQL de cette section illustre l’utilisation d’un serveur lié avec un nom en quatre parties pour interroger un cube OLAP. Dans le code, le serveur lié nommé Olap_server a été créé dans l’exemple précédent :

Select [Store:Store Name]
from Olap_server.FoodMart..[sales]
WHERE [Store:Store State]='WA'
go
Select [Product:Product Category], count ([Store:Store Name])
from Olap_server.FoodMart..[sales]
WHERE [Store:Store State]='WA'
GROUP BY [Product:Product Category]

Bien que les exemples de serveur lié avec un nom en quatre parties fonctionnent correctement, ils peuvent prendre beaucoup de temps pour retourner un résultat au client. La syntaxe de nom en quatre parties est un concept SQL Server ; il est utilisé dans une commande Transact-SQL pour faire référence à une table d’un serveur lié et a une syntaxe limitée pour les requêtes OLAP. SQL Server peut déterminer qu’il doit lire l’ensemble de la table de faits à partir du serveur OLAP et effectuer lui-même GROUP BY , ce qui peut prendre des ressources et du temps importants.

Microsoft vous recommande d’envoyer une instruction MDX par le biais d’une ou d’une OPENROWSET OPENQUERY fonction, comme indiqué dans les exemples précédents. Cette méthode permet à SQL Server d’envoyer la commande directement au fournisseur OLAP lié, sans essayer de l’analyser. La commande peut être MDX ou le sous-ensemble de SQL pris en charge par le fournisseur OLAP. Vous pouvez utiliser l’ensemble de lignes retourné par la OPENQUERY fonction dans d’autres opérateurs SQL. Pour les requêtes ET GROUP BY requêtes MDX de base qui retournent une quantité relativement faible de données (comme un écran), le jeu de résultats doit toujours être créé en moins de 10 secondes, généralement en 5 secondes, quelle que soit la taille du cube. Si les requêtes prennent plus de temps, vous pouvez générer davantage d’agrégations à l’aide de l’Assistant Analyse basée sur l’utilisation.

Astuces pour les performances

Voici quelques conseils sur les performances :

  • SQL Server ouvre deux connexions au fournisseur OLAP pour chaque requête. L’une de celles-ci est réutilisée pour les requêtes ultérieures ; par conséquent, si vous réexécutez la commande, la deuxième requête peut s’exécuter plus rapidement.

  • Pour augmenter la vitesse, regroupez par une autre dimension (car vous obtenez moins de données).

  • Le pire scénario serait que le cube soit stocké par le biais d’OLAP relationnel (ROLAP) et qu’il n’y a pas d’agrégation. Ensuite, le serveur OLAP ouvre une connexion à SQL Server pour obtenir les lignes de table de faits. N’utilisez pas de requête distribuée SQL Server dans ce cas.

  • Si vous avez simplement besoin d’un jeu de résultats à partir d’un serveur OLAP ou d’un fichier de cube, essayez d’exécuter le serveur SQL Server ou la requête multidimensionnelle directement sur le serveur OLAP, ou tout fichier de cube, à l’aide d’une application OLE DB C++ ou d’une application ADO(ADO*MD).

  • SQL Server installe certains fournisseurs OLE DB et les configure pour charger en cours. Étant donné que le fournisseur MSOLAP n’est pas installé par SQL Server, il est configuré pour charger hors processus. Microsoft vous recommande vivement de modifier les options du fournisseur OLAP à charger en tant que processus, car cette configuration améliore les performances de vos requêtes OLAP. Pour apporter la modification, procédez comme suit :

    1. Dans le dossier Sécurité, cliquez avec le bouton droit sur Serveurs liés, puis cliquez sur Nouveau serveur lié.
    2. Pour le nom du fournisseur, cliquez pour sélectionner le fournisseur OLE DB pour les services OLAP.
    3. Cliquez sur Options.
    4. Cliquez pour sélectionner Autoriser inProcess.
    5. Cliquez sur OK.

References

  • Pour obtenir une description détaillée des paramètres de procédure stockée, consultez la sp_addlinkedserver documentation en ligne de SQL Server.

  • Pour plus d’informations sur la configuration et l’utilisation de requêtes distribuées, la recherche sur sp_addlinkedserver , OPENQUERYet OPENROWSETles rubriques connexes, dans la documentation en ligne de SQL Server.

  • Pour en savoir plus sur la technologie OLAP et la syntaxe MDX, consultez la documentation en ligne des services OLAP.