Comment exécuter une requête distribuée de SQL Server avec un serveur OLAP


Résumé


Cet article décrit comment exécuter une requête distribuée de SQL Server pour récupérer des données d’un cube OLAP Services (ou Analysis Services). De Microsoft SQL Server version 7.0, vous pouvez effectuer des requêtes sur les fournisseurs OLE DB. Pour ce faire, vous pouvez :
  • Utilisez le OPENQUERY ou bien des fonctions OPENROWSET de Transact-SQL. ou
  • Utiliser 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 OPENROWSET ou la fonction OPENQUERY dans une instruction SELECT de SQL Server pour transmettre les requêtes au serveur OLAP lié. La requête est limitée à la syntaxe SELECT abrégée qui est pris en charge par les Services OLAP ; Toutefois, la requête peut inclure de syntaxe d’Expressions multidimensionnelles (MDX). Une requête qui inclut MDX renvoie « aplatie ensembles de lignes » comme décrit dans la documentation OLE DB. Pour plus d’informations sur la syntaxe SELECT pris en charge par les Services OLAP de SQL Server, consultez la rubrique « Prise en charge de la syntaxe SQL SELECT » dans la documentation en ligne de OLAP Services.

Pour interroger un local ou une base de données de serveur OLAP distant à partir de SQL Server, vous devez installer le fournisseur MSOLAP OLE DB sur l’ordinateur qui exécute SQL Server. Le fournisseur MSOLAP OLE DB est installé lorsque vous installez les composants clients OLAP à partir du CD-ROM de SQL Server 7.0.


Exemple OPENROWSET et de OPENQUERY

L’exemple de code Transact-SQL suivant illustre comment définir et utiliser des requêtes distribuées avec un serveur OLAP avec le fonctions OPENQUERY et les OpenRowset . Vous devez modifier les noms de source de données et le nom de catalogue comme il convient.
------------------------------------------
--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])' )
Remarque La rubrique « En passant des requêtes à partir de SQL Server à un lié OLAP serveur » dans la documentation en ligne de OLAP Services, a un bogue de documentation dans l’exemple de code :
SELECT * FROM OPENQUERY(olap_server,
'SELECT [customer], [quantity] FROM sales')
Uniquement une forme limitée de SQL est pris en charge, et seulement 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, niveau 16, état 1, ligne 1 fournisseur Oledb 'MSOLAP' a signalé une erreur. [Fournisseur OLE/DB a renvoyé ce message : nom de colonne 'client' est non valide. Uniquement les noms de niveau ou de mesure peuvent être définis.]
Une méthode pour résoudre la requête consiste à utiliser les éléments suivants :
SELECT * FROM OPENQUERY(olap_server,
'SELECT [unit sales] FROM sales')
Toutefois, en passant les instructions SQL dans ce formulaire au serveur OLAP peut être très lent, et vous pouvez recevoir une erreur de délai d’attente sur certains ordinateurs :
Le fournisseur OLE DB « MSOLAP » a signalé une erreur. [Fournisseur OLE/DB a renvoyé ce message : Impossible d’ouvrir la base de données 'foodmart'] [Fournisseur OLE/DB a renvoyé ce message : erreur du serveur OLAP : l’opération demandée a échoué en raison du délai d’attente.]

Exemples de serveur lié avec des noms en quatre parties

L’exemple de code Transact-SQL dans 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 lié correctement les exemples de serveur avec un travail de nom en quatre parties, ils peuvent prendre du temps pour renvoyer un résultat au client. La syntaxe de nom en quatre parties est un concept de SQL Server ; Il est utilisé dans une commande Transact-SQL pour faire référence à une table dans un serveur lié, et il a limité la syntaxe pour les requêtes OLAP. SQL Server peut déterminer qu’il doit lire la table de faits entière du serveur OLAP et effectuer la clause GROUP BY, qui peut prendre du temps et des ressources importantes.

Microsoft recommande que vous envoyez une instruction MDX, par le biais de OPENROWSET ou une fonction OPENQUERY, comme illustré dans les exemples précédents. Cette méthode permet de 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 qui prend en charge par le fournisseur OLAP. Vous pouvez utiliser le jeu de lignes retourné par la fonction OPENQUERY dans d’autres opérateurs SQL. Pour les requêtes MDX de base et les requêtes GROUP BY qui retournent une petite quantité de données (par exemple, un écran), le jeu de résultats doit toujours être créé en moins de 10 secondes, généralement dans les 5 secondes, quelle que soit la taille du cube. Si les requêtes prennent plus de temps, vous pouvez créer plusieurs agrégations à l’aide de l’Assistant analyse de l’utilisation.

Optimiser les performances

Voici quelques conseils de performances :
  • SQL Server s’ouvre deux connexions au fournisseur OLAP pour chaque requête. Un de ceux est réutilisé pour les requêtes ultérieures ; Par conséquent, si vous exécutez de nouveau la commande, la deuxième requête peut s’exécuter plus rapidement.
  • Pour augmenter la vitesse, le groupe à une autre dimension (parce que vous obtenez moins de données).
  • Le pire scénario serait lorsque le cube est stocké par le biais de ROLAP (OLAP relationnel) et qu’il n’y a aucune agrégation. Ensuite, le serveur OLAP ouvre une connexion à SQL Server pour obtenir des lignes de la table de fait. N’utilisez pas dans ce cas une requête distribuée de SQL Server.
  • Si vous devez simplement un jeu de résultats à partir d’un serveur OLAP ou un fichier de cube, essayez d’exécuter le SQL Server ou la requête multidimensionnelle directement sur le serveur OLAP ou un fichier de cube, à l’aide d’une application C++ OLE DB ou une application ADO(ADO*MD).
  • SQL Server installe certains fournisseurs OLE DB et configure les pour charger dans le processus. Dans la mesure où le fournisseur MSOLAP n’est pas installé par SQL Server, il est configuré pour charger out-of-process. Microsoft recommande vivement que vous modifiez les options pour le fournisseur OLAP charger en tant que processus, parce que cette configuration améliore les performances de vos requêtes OLAP. Pour que la modification, procédez comme suit :
    1. Dans le dossier sécurité , cliquez sur Serveurs liés, puis cliquez sur Nouveau serveur lié.
    2. Pour le Nom du fournisseur, sélectionnez Fournisseur Microsoft OLE DB pour OLAP Services.
    3. Cliquez sur Options.
    4. Cliquez sur Autoriser InProcess.
    5. Cliquez sur OK.

Références


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

Pour plus d’informations sur le paramétrage et l’utilisation des requêtes distribuées, recherchez sp_addlinkedserver, « OPENQUERY », « OPENROWSET » et les rubriques connexes, dans la documentation en ligne de SQL Server 7.0.

Pour en savoir plus sur la technologie OLAP et la syntaxe MDX, reportez-vous à la documentation en ligne de OLAP Services. Pour plus d’informations sur l’utilisation de la sécurité avec les Services OLAP, consultez l’article suivant dans la Base de connaissances Microsoft :
242025 comment configurer la sécurité du serveur lié aux Services OLAP