Ausführen von initialen SQL-Befehlen
Hinweis: Ab Version 2019.2.2 unterstützt Tableau Prep Builder die Verwendung des initialen SQL-Befehls, allerdings noch nicht alle Optionen, die von Tableau Desktop unterstützt werden. Für weitere Informationen zur Verwendung von Initial SQL mit dem Tableau Prep Builder, siehe Verwenden von Initial SQL zum Abfragen Ihrer Verbindungen(Link wird in neuem Fenster geöffnet) in der Tableau Prep Builder Online-Hilfe.
Wenn Sie eine Verbindung zu bestimmten Datenbanken herstellen, können Sie einen SQL-Anfangsdatenbefehl angeben, der beim Herstellen der Verbindung zur Datenbank ausgeführt wird, zum Beispiel bei jedem Öffnen der Arbeitsmappe, Aktualisieren eines Extrakts, Anmelden bei Tableau Server oder Veröffentlichen in Tableau Server. Der SQL-Anfangsdatenbefehl wird jedoch nicht ausgeführt, wenn Sie Ihre Ansicht aktualisieren. Beachten Sie, dass sich diese SQL-Anfangsdaten von einer benutzerdefinierten SQL-Verbindung unterscheiden. Eine benutzerdefinierte SQL-Verbindung definiert eine Beziehung (oder Tabelle), für die Abfragen ausgeführt werden. Weitere Informationen finden Sie unter Herstellen einer Verbindung zu einer benutzerdefinierten SQL-Abfrage.
Mit diesem Befehlen können Sie Folgendes tun:
Temporäre Tabellen einrichten, die während der Sitzung verwendet werden.
Benutzerdefinierte Datenumgebung einrichten.
Sie haben die Möglichkeit, einen SQL-Anfangsdatenbefehl im Dialogfeld "Serververbindung" oder auf der Seite "Datenquelle" hinzuzufügen.
Hinweis: Wenn Ihre Datenquelle die Ausführung einer SQL-Anfangsanweisung unterstützt, wird der Link SQL-Anfangsdaten in der unteren linken Ecke des Dialogfelds "Serververbindung" angezeigt. Informationen zu Ihren Datenquellen finden Sie unter Unterstützte Connectoren.
So verwenden Sie SQL-Anfangsdaten
Klicken Sie im Dialogfeld "Serververbindung" auf SQL-Anfangsdaten, oder wählen Sie auf der Seite "Datenquelle" Daten > SQL-Anfangsdaten oder Daten > Abfragenverbund und SQL-Anfangsdaten aus, abhängig von der Datenbank, zu der Sie eine Verbindung herstellen.
Geben Sie den SQL-Befehl in das Dialogfeld SQL-Anfangsdaten ein. Über das Dropdown-Menü Einfügen können Sie Parameter an eine Datenquelle weitergeben.
Hinweis: Tableau untersucht die Anweisung nicht auf Fehler. Die SQL-Anweisung wird einfach bei der Herstellung der Verbindung an die Datenbank gesendet.
Unter Umständen ist es mit Ihrer Softwarelizenz nicht möglich, SQL-Anfangsdaten mit Ihrer Verbindung zu verwenden. Wenn Sie in Tableau Server veröffentlichen, muss der Server so konfiguriert sein, dass SQL-Anfangsdatenanweisungen zulässig sind. Standardmäßig ist die Serversoftware so konfiguriert, dass die Anweisungen ausgeführt werden können, wenn die Arbeitsmappe in einem Webbrowser geladen wird.
Administratoren können den Server mit dem Befehl tsm configuration set
so konfigurieren, dass anfängliche SQL-Anweisungen ignoriert werden.
tsm configuration set -k vizqlserver.initialsql.disabled -v true
Wenn der Server SQL-Anfangsdatenanweisungen nicht zulässt, wird die Arbeitsmappe zwar geöffnet, doch die SQL-Anfangsdatenbefehle werden nicht gesendet.
Für weitere Informationen über den Befehl tsm configuration set
, siehe Tableau Server-Hilfe(Link wird in neuem Fenster geöffnet).
Parameter in einer SQL-Anfangsdatenanweisung
Sie können Parameter in einer SQL-Anfangsdatenanweisung an Ihre Datenquelle weiterleiten. Dies ist aus mehreren Gründen hilfreich:
Sie können mit den Parametern TableauServerUser oder TableauServerUserFull einen Identitätswechsel konfigurieren.
Sofern Ihre Datenquelle dies unterstützt, können Sie die Sicherheitsfunktion auf Zeilenebene einrichten (z. B. für Oracle VPD oder SAP Sybase ASE), um sicherzustellen, dass die Benutzer nur die Daten sehen können, für die sie Anzeigeberechtigungen haben.
Sie können weitere Einzelheiten bei der Anmeldung wie z. B. die Tableau-Version oder den Arbeitsmappennamen bereitstellen.
Folgende Parameter werden in einer SQL-Anfangsdatenanweisung unterstützt:
Parameter | Beschreibung | Beispiel eines zurückgegebenen Werts |
TableauServerUser | Der Benutzername des aktuellen Serverbenutzers. Wird beim Einrichten des Identitätswechsels auf dem Server verwendet. Gibt einen Leerstring zurück, wenn der Benutzer nicht bei Tableau Server angemeldet ist. | jsmith |
TableauServerUserFull | Der Benutzername und die Domäne des aktuellen Serverbenutzers. Wird beim Einrichten des Identitätswechsels auf dem Server verwendet. Gibt einen Leerstring zurück, wenn der Benutzer nicht bei Tableau Server angemeldet ist. | domain.lan\jsmith |
TableauApp | Der Name der Tableau-Anwendung. | Tableau Desktop Professional Tableau Server |
TableauVersion | Die Version der Tableau-Anwendung. | 9.3 |
WorkbookName | Der Name der Tableau-Arbeitsmappe. Verwenden Sie ihn nur in Arbeitsmappen mit einer eingebetteten Datenquelle. | Finanzanalyse |
Warnung: Tableau Desktop schließt keine Domäne mit ein. Sie können eine mit einschließen, wenn Sie keine Delegierung verwenden und "tsm configuration set -k DelegationUseFullDomainName=-v true--force-keys" festlegen.
Die folgenden Beispiele zeigten unterschiedliche Möglichkeiten, wie Sie Parameter in einer SQL-Anfangsdatenanweisung nutzen können.
- Bei diesem Beispiel wird der Sicherheitskontext auf einem Microsoft SQL-Server festgelegt:
EXECUTE AS USER = [TableauServerUser] WITH NO REVERT;
Dieses Beispiel zeigt, wie Sie in einer DataStax-Datenquelle mit Parametern Details zur Anmeldung hinzufügen oder eine Sitzungsvariable einrichten können, um die Daten nachzuverfolgen:
SET TABLEAUVERSION [TableauVersion];
Dieses Beispiel kann herangezogen werden, um die Sicherheit auf Zeilenebene für Oracle-VPD einzurichten:
begin
DBMS_SESSION.SET_IDENTIFIER([TableauServerUser]);
end;
Hinweis: Oracle PL/SQL-Blöcke müssen mit einem nachgestellten Semikolon abgeschlossen werden. Informationen zur richtigen Syntax finden Sie in der Oracle-Dokumentation.
Verschieben der Ausführung einer Anweisung auf den Server
Sie können eine SQL-Anfangsdatenanweisung verschieben, sodass sie nur auf dem Server ausgeführt wird. Ein Grund für die Verschiebung der Ausführung einer Anweisung auf den Server ist, wenn Sie nicht die Berechtigung zum Ausführen der Befehle haben, die einen Identitätswechsel festlegen. Verwenden Sie die Tags <ServerOnly></ServerOnly>, um die nur auf dem Server auszuführenden Befehle einzuschließen.
Beispiel:
CREATE TEMP TABLE TempTable(x varchar(25)); INSERT INTO TempTable VALUES (1); <ServerOnly>INSERT INTO TempTable Values(2);</ServerOnly>
Sicherheit und Identitätswechsel
Falls Sie den Parameter TableauServerUser oder TableauServerUserFull in einer SQL-Anfangsdatenanweisung verwenden, müssen Sie eine entsprechende Verbindung erstellen, die nicht gleichzeitig von anderen Benutzern verwendet werden kann. Dadurch wird zudem die Zwischenspeicherfreigabe eingeschränkt, wodurch die Sicherheit erhöht, aber die Geschwindigkeit verringert werden kann.
Fehlerbehebung „Tabelle erstellen“ für MySQL- und Oracle-Verbindungen
Bei MySQL-Verbindungen werden Tabellen nicht aufgelistet, nachdem sie mithilfe von Initial SQL erstellt wurden.
Wenn Sie eine Verbindung mit MySQL herstellen und Initial SQL ausführen, werden Tabellen möglicherweise aufgrund der Art und Weise, wie Tableau die Abfrage erstellt, nicht angezeigt:
CREATE TABLE TestV1.testtable77(testID int);
Um dieses Problem zu beheben, fügen Sie der SQL-Anweisung IF NOT EXISTS
hinzu:
CREATE TABLE IF NOT EXISTS TestV1.TestTable(testID int);
Bei Oracle-Verbindungen führt die Verwendung von Initial SQL zum Erstellen einer Tabelle dazu, dass Tableau abstürzt.
Wenn Sie eine Verbindung zu Oracle herstellen und eine Initial SQL-Anweisung wie die folgende ausführen, bleibt Tableau aufgrund der Art und Weise, wie Tableau die Abfrage erstellt, in einer Endlosschleife hängen:
CREATE TABLE TEST_TABLE (TESTid int)
Verwenden Sie die folgende SQL-Anweisung, um dieses Problem zu beheben:
BEGIN EXECUTE IMMEDIATE 'create table test_table(testID int)'; EXCEPTION WHEN OTHERS THEN NULL; END;