Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe u een gedistribueerde SQL Server-query uitvoert met OLAP Server.
Oorspronkelijke productversie: SQL Server
Oorspronkelijk KB-nummer: 218592
Samenvatting
In dit artikel wordt beschreven hoe u een gedistribueerde SQL Server-query uitvoert om gegevens op te halen uit een OLAP Services-kubus (of Analysis Services). Met Microsoft SQL Server kunt u query's uitvoeren op OLE DB-providers. Hiervoor kunt u een van de volgende opties gebruiken:
- Gebruik de
OPENQUERYof deOPENROWSETTransact-SQL-functies. - Gebruik een query met vierdelige namen, inclusief een naam van een gekoppelde server.
Bijvoorbeeld:
sp_addlinkedserver 'mylinkedserver', 'product_name', 'myoledbprovider', 'data_source','location', 'provider_string', 'catalog'
SELECT *
FROM OPENQUERY(mylinkedserver, 'select * from table1')
U kunt de OPENROWSET of de OPENQUERY functie in een SQL Server-instructie SELECT gebruiken om query's door te geven aan de gekoppelde OLAP-server. De query is beperkt tot de verkorte SELECT syntaxis die wordt ondersteund door OLAP Services. De query kan echter de MDX-syntaxis (Multidimensional Expressions) bevatten. Een query met MDX retourneert afgevlakte rijensets , zoals beschreven in de OLE DB-documentatie. Zie het onderwerp Ondersteunde SQL SELECT-syntaxis in OLAP Services Online voor meer informatie over de SELECT syntaxis van SQL Server OLAP Services.
Als u een query wilt uitvoeren op een lokale of externe OLAP-serverdatabase vanuit SQL Server, moet u de MSOLAP OLE DB-provider installeren op de computer waarop SQL Server wordt uitgevoerd. De MSOLAP OLE DB-provider wordt geïnstalleerd wanneer u de OLAP-clientonderdelen van de SQL Server installeert.
VOORBEELD VAN OPENROWSET en OPENQUERY
In het volgende voorbeeld van Transact-SQL-code ziet u hoe u gedistribueerde query's instelt en gebruikt met een OLAP-server met de OPENQUERY en de OpenRowset functies. U moet de namen en catalogusnaam van de gegevensbron zo nodig wijzigen.
------------------------------------------
--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])' )
Notitie
De query's van SQL Server doorgeven aan een gekoppeld OLAP Server-onderwerp , in OLAP Services Books Online, bevat een documentatiefout in het codevoorbeeld:
SELECT *
FROM OPENQUERY(olap_server, 'SELECT [customer], [quantity] FROM sales')
Alleen een beperkte vorm van SQL wordt ondersteund en alleen namen van niveaus of meting kunnen worden opgegeven. Wanneer u de query uitvoert, ontvangt u dit foutbericht:
Server: Msg 7399, Niveau 16, Status 1, Regel 1 OLE DB-provider MSOLAP heeft een fout gerapporteerd. [OLE/DB-provider geretourneerd bericht
:Kolomnaam 'klant' is ongeldig. Alleen namen van niveaus of meten kunnen worden opgegeven.]
Een manier om de query op te lossen, is door het volgende te gebruiken:
SELECT *
FROM OPENQUERY(olap_server, 'SELECT [unit sales] FROM sales')
Het doorgeven van SQL-instructies in dat formulier aan OLAP Server kan echter traag zijn en u krijgt mogelijk een time-outfout op sommige computers:
OLE DB-provider MSOLAP heeft een fout gerapporteerd. [OLE/DB-provider geretourneerd bericht: kan database 'foodmart' niet openen] [OLE/DB-provider geretourneerd bericht: OLAP-serverfout: de aangevraagde bewerking is mislukt vanwege time-out.]
Voorbeelden van gekoppelde servers met vierdelige namen
In het voorbeeld van Transact-SQL-code in deze sectie wordt het gebruik van een gekoppelde server met een vierdelige naam gedemonstreert om een query uit te voeren op een OLAP-kubus. In de code is de gekoppelde server met de naam Olap_server gemaakt in het vorige voorbeeld:
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]
Hoewel voorbeelden van gekoppelde servers met een vierdelige naam prima werken, kan het lang duren voordat een resultaat naar de client wordt geretourneerd. De syntaxis van de naam van vier delen is een SQL Server-concept. deze wordt gebruikt in een Transact-SQL-opdracht om te verwijzen naar een tabel in een gekoppelde server en heeft een beperkte syntaxis voor OLAP-query's. SQL Server kan bepalen dat de hele feitentabel van OLAP Server moet worden gelezen en dat het GROUP BY zelf moet worden uitgevoerd, wat aanzienlijke resources en tijd kan duren.
Microsoft raadt u aan een MDX-instructie via een OPENROWSET of een OPENQUERY functie te verzenden, zoals wordt weergegeven in de eerdere voorbeelden. Met deze methode kan SQL Server de opdracht rechtstreeks naar de gekoppelde OLAP-provider verzenden zonder deze te parseren. De opdracht kan MDX of de subset van SQL zijn die door de OLAP-provider wordt ondersteund. U kunt de rijenset gebruiken die wordt geretourneerd door de OPENQUERY functie in andere SQL-operators. Voor eenvoudige MDX-query's en GROUP BY query's die een relatief kleine hoeveelheid gegevens retourneren (zoals een schermvol), moet de resultatenset altijd in minder dan 10 seconden worden gemaakt, meestal in 5 seconden, ongeacht de grootte van de kubus. Als het langer duurt voor query's, kunt u meer aggregaties bouwen met behulp van de wizard Analyse op basis van gebruik.
Prestatietips
Hier volgen enkele prestatietips:
SQL Server opent twee verbindingen met de OLAP-provider voor elke query. Een van deze wordt opnieuw gebruikt voor latere query's; Als u de opdracht opnieuw uitvoert, kan de tweede query daarom sneller worden uitgevoerd.
Als u de snelheid wilt verhogen, groeperen op een andere dimensie (omdat u minder gegevens krijgt).
Een slechtst scenario zou zijn wanneer de kubus wordt opgeslagen via relationele OLAP (ROLAP) en er geen aggregatie is. Vervolgens opent de OLAP-server een verbinding met SQL Server om de feitentabelrijen te verkrijgen. Gebruik in dit geval geen gedistribueerde SQL Server-query.
Als u alleen een resultatenset van een OLAP-server of kubusbestand nodig hebt, voert u de SQL Server of de multidimensionale query rechtstreeks uit op de OLAP-server of een kubusbestand met behulp van een OLE DB C++-toepassing of een ADO(ADO*MD)-toepassing.
SQL Server installeert enkele OLE DB-providers en configureert deze om in het proces te laden. Omdat de MSOLAP-provider niet door SQL Server is geïnstalleerd, is deze geconfigureerd om out-of-process te laden. Microsoft raadt u ten zeerste aan de opties voor de OLAP-provider te wijzigen om te laden als in het proces, omdat deze configuratie de prestaties van uw OLAP-query's verbetert. Voer de volgende stappen uit om de wijziging aan te brengen:
- Klik in de map Beveiliging met de rechtermuisknop op Gekoppelde servers en klik vervolgens op Nieuwe gekoppelde server.
- Klik voor de providernaam om OLE DB-provider voor OLAP-services te selecteren.
- Klik op Opties.
- Klik om InProcess toestaan te selecteren.
- Klik op OK.
Verwijzingen
Zie SQL Server Books Online voor een gedetailleerde beschrijving van de
sp_addlinkedserverparameters voor opgeslagen procedures.Voor meer informatie over het instellen en gebruiken van gedistribueerde query's, zoeken op
sp_addlinkedserver,OPENQUERY,OPENROWSETen verwante onderwerpen, in SQL Server Books Online.Zie OLAP Services Books Online voor meer informatie over OLAP-technologie en MDX-syntaxis.