Aktivieren von DirectQuery für einen ODBC-basierten Connector
Die Verwendung der in M integrierten Funktion Odbc.DataSource ist der empfohlene Weg, um benutzerdefinierte Connectors für Datenquellen zu erstellen, die einen vorhandenen ODBC-Treiber haben und/oder eine SQL-Abfragesyntax unterstützen. Die Funktion Odbc.DataSource ermöglicht es Ihrem Connector, das Standardverhalten für das Query Folding zu übernehmen, das auf den von Ihrem Treiber gemeldeten Fähigkeiten basiert. Dieses Verhalten ermöglicht es der M-Engine, SQL-Anweisungen auf der Grundlage von Filtern und anderen Transformationen zu generieren, die vom Benutzer in Power Query definiert wurden, ohne diese Logik im Connector selbst bereitstellen zu müssen.
ODBC-Erweiterungen können optional den DirectQuery-Modus aktivieren, der es Power BI ermöglicht, dynamisch Abfragen zur Laufzeit zu generieren, ohne das Datenmodell des Benutzers im Voraus zu speichern.
Hinweis
Die Aktivierung der DirectQuery-Unterstützung erhöht den Schwierigkeits- und Komplexitätsgrad Ihres Connectors. Wenn DirectQuery aktiviert ist, verhindert Power BI, dass die M-Engine Vorgänge kompensiert, die nicht vollständig an die zugrunde liegende Datenquelle übertragen werden können.
Dieser Artikel setzt voraus, dass Sie mit der Erstellung eines einfachen benutzerdefinierten Connectors vertraut sind.
Die meisten Code-Beispiele in den folgenden Abschnitten finden Sie im SqlODBC-Beispiel. Weitere Beispiele sind im Verzeichnis ODBC samples zu finden.
Die M-Engine bietet zwei ODBC-bezogene Datenquellenfunktionen: Odbc.DataSource und Odbc.Query.
Die Funktion Odbc.DataSource bietet eine Standard-Navigationstabelle mit allen Datenbanken, Tabellen und Ansichten Ihres Systems. Diese Funktion unterstützt auch das Query Folding und ermöglicht eine Reihe von Anpassungsoptionen. Die meisten ODBC-basierten Erweiterungen verwenden diese Funktion als ihre primäre Erweiterungsfunktion. Die Funktion akzeptiert zwei Argumente - eine Verbindungszeichenfolge und einen Optionsdatensatz, der das Verhalten außer Kraft setzt.
Die Funktion Odbc.Query ermöglicht es Ihnen, SQL-Anweisungen über einen ODBC-Treiber auszuführen. Sie dient als Durchleitung für die Ausführung von Abfragen. Anders als die Funktion Odbc.DataSource bietet sie keine Abfrage-Folding-Funktionalität und erfordert, dass SQL-Abfragen vom Connector (oder Endbenutzer) bereitgestellt werden. Bei der Erstellung eines benutzerdefinierten Connectors wird diese Funktion in der Regel intern verwendet, um Abfragen zum Abrufen von Metadaten auszuführen, die möglicherweise nicht über reguläre ODBC-Kanäle zugänglich sind. Die Funktion akzeptiert zwei Argumente - eine Verbindungszeichenfolge und eine SQL-Abfrage.
Benutzerdefinierte Anschlüsse können eine beliebige Anzahl von Funktionsargumenten akzeptieren. Um jedoch mit den integrierten Datenquellenfunktionen von Power Query konsistent zu bleiben, werden die folgenden Richtlinien empfohlen:
Erfordert den minimalen Satz von Parametern, die zum Aufbau einer Verbindung zu Ihrem Server verwendet werden. Je weniger Parameter die Endbenutzer angeben müssen, desto einfacher ist Ihr Connector zu bedienen.
Obwohl Sie Parameter mit einer festen Anzahl von Werten definieren können (z. B. eine Dropdown-Liste in der Benutzeroberfläche), werden die Parameter eingegeben, bevor der Benutzer authentifiziert wird. Alle Werte, die nach der Authentifizierung des Benutzers programmatisch ermittelt werden können (z. B. Katalog- oder Datenbankname), müssen über den Navigator auswählbar sein. Das Standardverhalten für die Funktion Odbc.DataSource ist die Rückgabe einer hierarchischen Navigationstabelle, die aus Katalog (Datenbank), Schema und Tabellennamen besteht. Dieses Verhalten kann jedoch in Ihrem Connector außer Kraft gesetzt werden.
Wenn Sie der Meinung sind, dass Ihre Benutzer in der Regel wissen, welche Werte sie für Elemente eingeben müssen, die sie im Navigator auswählen würden (z. B. den Namen der Datenbank), machen Sie diese Parameter optional. Parameter, die programmatisch ermittelt werden können, müssen nicht vorgeschrieben werden.
Der letzte Parameter für Ihre Funktion sollte ein optionaler Datensatz namens „options“ sein. Mit diesem Parameter können fortgeschrittene Benutzer übliche ODBC-bezogene Eigenschaften (z. B.
CommandTimeout
) einstellen, das für Ihren Connector spezifische Verhalten außer Kraft setzen und zukünftige Erweiterungen ermöglichen, ohne die Rückwärtskompatibilität Ihrer Funktion zu beeinträchtigen.Argumente, die sich auf die Sicherheit bzw. den Berechtigungsnachweis beziehen, MÜSSEN niemals Teil der Parameter Ihrer Datenquellenfunktionen sein, da die im Verbindungsdialog eingegebenen Werte in der Abfrage des Benutzers beibehalten werden. Credential-bezogene Parameter müssen als Teil der vom Connector unterstützten Authentifizierungsmethoden angegeben werden.
Standardmäßig werden alle erforderlichen Parameter für Ihre Datenquellenfunktion in den Wert Datenquellenpfad aufgenommen, der zur Identifizierung der Benutzeranmeldeinformationen verwendet wird.
Während die Benutzeroberfläche der integrierten Funktion Odbc.DataSource ein Dropdown-Menü bietet, mit dem der Benutzer einen DSN auswählen kann, ist diese Funktionalität nicht über die Erweiterbarkeit verfügbar. Wenn Ihre Datenquellenkonfiguration so komplex ist, dass ein vollständig anpassbarer Konfigurationsdialog erforderlich ist, empfehlen wir, dass Ihre Endbenutzer einen System-DSN vorkonfigurieren müssen und dass Ihre Funktion den DSN-Namen als Textfeld übernimmt.