Zum Ausführen einer verteilten Abfrage SQL Server OLAP-Server

IN DIESER AUFGABE

Zusammenfassung

Dieser Artikel beschreibt, wie eine verteilte SQL Server-Abfrage zum Abrufen von Daten aus einem Cube OLAP Services (oder Analysis Services) ausführen. Mit Microsoft SQL Server, Version 7.0 können Sie Abfragen für OLE DB-Provider. Hierzu können Sie folgende Aktionen ausführen:

  • Verwenden Sie die OPENQUERY oder OPENROWSET Transact-SQL-Funktionen. – oder –

  • Verwenden Sie eine Abfrage mit vierteiligen Namen einen verknüpften Server enthält.

Zum Beispiel:

sp_addlinkedserver 'mylinkedserver', 'product_name', 'myoledbprovider', 'data_source','location', 'provider_string', 'catalog'

SELECT * FROM OPENQUERY(mylinkedserver, 'select * from table1')

Die OPENROWSET- oder OPENQUERY-Funktion können in einer SQL Server-SELECT-Anweisung Sie den Verbindungsserver OLAP-Abfragen übergeben. Die Abfrage ist auf abgekürzte SELECT-Syntax, die von OLAP Services unterstützt; die Abfrage kann jedoch MDX (Multidimensional Expressions) Syntax enthalten. MDX enthält eine Abfrage mit "Abgeflachte Rowsets zurückgibt" wie in der OLE DB-Dokumentation beschrieben. Weitere Informationen über SELECT-Syntax von SQL Server OLAP Services unterstützt finden Sie "Unterstützt SQL SELECT-Standardsyntax" in OLAP Services-Onlinedokumentation.

Um eine lokale oder remote OLAP-Server-Datenbank von SQL Server abzufragen, müssen Sie MSOLAP OLE DB-Anbieter auf dem Computer installieren, auf dem SQL Server ausgeführt wird. MSOLAP OLE DB-Provider wird installiert, wenn Sie OLAP-Clientkomponenten von SQL Server 7.0-CD installieren.


OPENROWSET und OPENQUERY-Beispiel

Transact-SQL-Code wird das Einrichten und Verwenden von verteilten Abfragen mit einem OLAP-Server mit der OPENQUERY und OpenRowset Funktionen veranschaulicht. Sie müssen den Datenquellennamen und Katalog entsprechend ändern.

------------------------------------------
--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])' )

Hinweis Das Thema "Übergeben Abfragen von SQL Server zu einer verknüpften OLAP-Server" hat in OLAP Services-Onlinedokumentation Dokumentation Fehler im Codebeispiel:

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

Nur eine eingeschränkte Form des SQL unterstützt, und nur die Namen der Ebene oder Measure angegeben werden. Wenn Sie die Abfrage ausführen, erhalten Sie diese Fehlermeldung:

Server: Msg 7399, Ebene 16, Status 1, Zeile 1 OLE DB-Provider 'MSOLAP' meldete einen Fehler. [OLE/DB-Provider meldete: Spalte 'Debitor' ist ungültig. Nur können Ebene oder Measure angegeben werden.]

Eine Möglichkeit, die Abfrage zu beheben ist folgende:

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

SQL-Anweisung übergibt jedoch, Formular OLAP-Server sehr langsam sein kann, und möglicherweise einen Timeoutfehler auf einigen Computern:

OLE DB-Provider 'MSOLAP' meldete einen Fehler. [OLE/DB-Provider meldete: Datenbank "Foodmart" kann nicht geöffnet werden.] [OLE/DB-Provider meldete: OLAP-Server-Fehler: die angeforderte Operation wurde aufgrund eines Timeouts.]

Beispiele für Verbindungsserver vierteiligen Namen

Transact-SQL-Code-Beispiel in diesem Abschnitt veranschaulicht die Verwendung eines Verbindungsservers mit einem vierteiligen Namen einen OLAP-Cube Abfragen. Im Code wurde im vorherigen Beispiel der Verbindungsserver namens Olap_server erstellt:

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]

Obwohl Server Beispiele mit einem vierteiligen Namen einwandfrei, dauern sie lange ein Ergebnis an den Client zurückgegeben. Syntax der vierteiligen Namen ist ein SQL Server-Konzept. Hiermit wird eine Transact-SQL-Befehl eine Tabelle auf einem Verbindungsserver und beschränkte Syntax für OLAP-Abfragen. SQL Server kann bestimmen, muss die gesamte Faktentabelle von OLAP-Server lesen und Ausführen der Gruppe, die erhebliche Ressourcen und Zeit in Anspruch nehmen kann.

Microsoft empfiehlt, eine MDX-Anweisung durch eine OPENROWSET- oder OPENQUERY-Funktion senden, wie in den vorherigen Beispielen gezeigt. Diese Methode ermöglicht SQL Server den Befehl direkt an verknüpfte OLAP-Provider senden, ohne ihn zu analysieren. Der Befehl kann MDX oder Teil der OLAP-Provider unterstützt SQL. Das Rowset zurückgegeben von der OPENQUERY-Funktion in anderen SQL-Operatoren können. Grundlegende MDX-Abfragen und GROUP BY-Abfragen, die eine relativ kleine Datenmenge (z. B. einer Seite) zurückgeben, muss das Resultset immer in weniger als 10 Sekunden in 5 Sekunden, unabhängig von der Größe des Cubes erstellt werden. Wenn Abfragen länger dauern, können Sie mithilfe des Assistenten Verwendung Analyse mehr Aggregationen erstellen.

Tipps zur Leistungssteigerung

Hier sind einige Tipps:

  • SQL Server Öffnet zwei Anschlüsse an den OLAP-Anbieter für jede Abfrage. Eine davon ist bei späteren Abfragen wiederverwendet. Wenn Sie den Befehl erneut ausführen, kann die zweite Abfrage daher schneller ausgeführt.

  • Gruppe von einer anderen Dimension Geschwindigkeit erhöhen (da Sie weniger Daten abrufen).

  • Schlimmsten wäre der Cube über relationale OLAP (ROLAP) gespeichert ist und keine Aggregation. Danach öffnet der OLAP-Server eine Verbindung zu SQL Server zu der Tatsache Tabellenzeilen. Verwenden Sie eine verteilte Abfrage von SQL Server in diesem Fall nicht.

  • Benötigen Sie nur eine Ergebnismenge aus einem OLAP-Server oder eine Cube-Datei, führen Sie SQL Server oder multidimensionalen Abfrage direkt mit OLAP-Server oder eine Cubedatei mit einem OLE DB-C++-Anwendung oder ADO(ADO*MD).

  • SQL Server OLE DB-Provider installiert und konfiguriert die im Prozess geladen. Da MSOLAP-Anbieter von SQL Server nicht installiert ist, wird es von prozessexternen laden konfiguriert. Microsoft empfiehlt, Ändern der Optionen für der OLAP-Provider als in-Process-, da diese Konfiguration die Leistung von OLAP-Abfragen verbessert. Gehen Sie folgendermaßen vor, um die Änderung vorzunehmen:

    1. Im Ordner Sicherheit Maustaste auf Verbindungsserver, und klicken Sie dann auf Neuer Verbindungsserver.

    2. Name des Anbietersauf Microsoft OLE DB Provider for OLAP Services.

    3. Klicken Sie auf Optionen.

    4. Klicken Sie auf InProcess zulassen.

    5. Klicken Sie auf OK.

Referenzen

Eine ausführliche Beschreibung von Sp_addlinkedserver Parameter von gespeicherten Prozeduren finden Sie unter SQL Server 7.0-Onlinedokumentation.

Weitere Informationen zum Einrichten und Verwenden von verteilten Abfragen suchen Sie auf Sp_addlinkedserver, "OPENQUERY", "OPENROWSET" und Verwandte Themen in der Onlinedokumentation zu SQL Server 7.0.

Weitere Informationen zu OLAP-Technologie und MDX-Syntax finden Sie unter OLAP Services-Onlinedokumentation. Informationen zur Verwendung von Sicherheit mit OLAP Services finden Sie im folgenden Artikel der Microsoft Knowledge Base:

242025 wie Sie Sicherheit für Verbindungsserver zu OLAP Services

Benötigen Sie weitere Hilfe?

Ihre Office-Fähigkeiten erweitern
Schulungen erkunden
Neue Funktionen als Erster erhalten
Microsoft Insider beitreten

War diese Information hilfreich?

Vielen Dank für Ihr Feedback!

Vielen Dank für Ihr Feedback. Es klingt, als ob es hilfreich sein könnte, Sie mit einem unserer Office-Supportmitarbeiter zu verbinden.

×