Herstellen einer Verbindung zu einer benutzerdefinierten SQL-Abfrage
Hinweis: Die Verwendung von benutzerdefiniertem SQL kann sich auf die Leistung einer Arbeitsmappe auswirken. Die Zusammenarbeit mit Ihrem DBA gewährleistet die bestmögliche benutzerdefinierte SQL-Abfrage. Um die zum Erstellen von Ansichten in Tableau Desktop erforderlichen Vorgänge ausführen zu können, muss Tableau in der Lage sein, WHERE, GROUP BY und andere SQL-Klauseln zu steuern. Da eine benutzerdefinierte SQL-Abfrage diese Elemente enthalten kann und Tableau sie nicht in die vorhandene SQL einfügen kann, muss Tableau die benutzerdefinierte SQL-Anweisung in eine Select-Anweisung einbinden. Wenn die Leistung einer benutzerdefinierten SQL-Verbindung langsam ist oder ein Fehler auftritt, ist dies häufig auf den von Tableau Desktop durchgeführten Umbruch in der benutzerdefinierten SQL zurückzuführen.
Bei den meisten Datenbanken können Sie eine Verbindung mit einer bestimmten Abfrage herstellen und nicht mit dem gesamten Datensatz. Da jede Datenbank eine leicht unterschiedliche SQL-Syntax aufweist, kann sich die benutzerdefinierte SQL für die Verbindung mit einer Datenbank von der benutzerdefinierten SQL für die Verbindung mit einer anderen Datenbank unterscheiden. Die Verwendung von benutzerdefinierter SQL kann jedoch nützlich sein, wenn Sie die erforderlichen Informationen genau kennen und mit dem Erstellen von SQL-Abfragen vertraut sind.
Obwohl benutzerdefinierte SQL aus verschiedenen häufigen Gründen genutzt wird, können Sie benutzerdefinierte SQL verwenden, um Ihre Daten in unterschiedlichen Tabellen zu vereinen, Felder für datenbankübergreifende Vereinigungen umzuwandeln, die Größe Ihrer Daten zu Analysezwecken zu verringern oder neu zu strukturieren usw.
Bei Excel- und Textdatei-Datenquellen steht diese Option nur in Arbeitsmappen, die mit einer Version vor Tableau Desktop 8.2 erstellt wurden, oder dann zur Verfügung, wenn Tableau Desktop unter Windows mit einer älteren Verbindung verwendet wird. Zum Herstellen einer Verbindung zu Excel- oder Textdateien über eine ältere Verbindung stellen Sie eine Verbindung zur Datei her. Klicken Sie dazu im Dialogfeld "Öffnen" auf das Dropdown-Menü Öffnen, und wählen Sie die Option Über ältere Verbindung öffnen aus.
HINWEIS: Ab Tableau 2020.2 werden ältere Excel- und Textverbindungen nicht mehr unterstützt. Alternativen zur Verwendung der alten Verbindung finden Sie in dem Dokument Alternativen zur alten Verbindung in der Tableau Community.
Herstellen einer Verbindung zu einer benutzerdefinierten SQL-Abfrage
Nachdem Sie die Verbindung zu den Daten hergestellt haben, doppelklicken Sie auf der Datenquellenseite auf Neue benutzerdefinierte SQL.
Geben Sie die Abfrage in das Textfeld ein, bzw. fügen Sie diese ein. Die Abfrage muss eine einzelne SELECT*-Anweisung sein.
OK, wenn Sie fertig sind.
Wenn Sie auf "OK" klicken, wird die Abfrage ausgeführt, und die benutzerdefinierte SQL-Abfragetabelle wird auf der logischen Ebene des Verknüpfungsbereichs angezeigt. Im Datenraster auf der Datenquellenseite werden lediglich die relevanten Felder aus der benutzerdefinierten SQL-Abfrage angezeigt.
Weitere Informationen zu den logischen und physischen Ebenen des Verknüpfungsbereichs finden Sie unter Das Tableau-Datenmodell.
Beispiele für benutzerdefinierte SQL-Abfragen
Vertikales Kombinieren Ihrer Tabellen (vereinigen)
Wenn Sie Daten an andere Daten anhängen müssen, können Sie die Vereinigungsoption auf der physischen Ebene des Verknüpfungsbereichs in Tableau verwenden. Es kann vorkommen, dass Ihre Datenbank diese Option nicht unterstützt. In solchen Fällen können Sie stattdessen benutzerdefinierte SQL verwenden.
Angenommen, Sie verfügen über die folgenden beiden Tabellen: November und Dezember
November | Dezember |
---|---|
Mithilfe der folgenden benutzerdefinierten SQL-Abfrage können Sie die zweite Tabelle für den Dezember an die erste Tabelle für den November anhängen:
SELECT * FROM November UNION ALL SELECT * FROM December
Das Abfrageergebnis sieht im Datenraster folgendermaßen aus:
Weitere Informationen zur Vereinigungsoption finden Sie unter Vereinigen von Daten.
Ändern des Datentyps eines Feldes zum Durchführen einer datenbankübergreifenden Verknüpfung
Wenn Sie zwei Tabellen auf der physischen Ebene des Verknüpfungsbereichs vereinigen möchten, müssen die zu vereinigenden Felder den gleichen Datentyp aufweisen. In Fällen, in denen sich der Datentyp der Felder unterscheidet, können Sie mithilfe von benutzerdefinierter SQL den Datentyp des Feldes vor der Verknüpfung ändern (konvertieren).
Angenommen, Sie möchten zwei Tabellen, d. h. die Haupttabelle und die untergeordnete Tabelle, mithilfe der Felder "Stamm" und "ID" verknüpfen. Bei dem Stammfeld handelt es sich um einen Nummerntyp, und bei dem ID-Feld handelt es sich um einen Zeichenfolgentyp. Sie können über die folgende benutzerdefinierte SQL-Abfrage den auf "Stamm" festgelegten Datentyp in eine Zahl oder Zeichenfolge ändern, damit Sie die Haupt- und untergeordneten Tabellen mithilfe der Felder "Stamm" und "ID" verknüpfen können.
SELECT
[Main].[Root] AS [Root_Number]
CAST([Main].[Root] AS INT] AS [Root_String]
FROM [Main]
Im Ergebnis dieser Abfrage wird das ursprüngliche Stammfeld und das in eine Zeichenfolge umgewandelte Stammfeld angezeigt.
Weitere Informationen zu Verknüpfungen und datenbankübergreifenden Verknüpfungen finden Sie unter Verknüpfen Ihrer Daten.
Verringern der Größe Ihrer Daten
Bei der Arbeit mit sehr großen Datensätzen ist es empfehlenswert, als Erstes die Größe des Datensatzes zu verringern, denn so sparen Sie Zeit bei der Arbeit mit diesen Daten.
Beispiel: Sie verfügen über eine große Tabelle mit dem Namen "FischerIris". Über die folgende benutzerdefinierte SQL-Abfrage können Sie die angegebenen Spalten und Datensätze abfragen und auf diese Weise die Größe des Datensatzes verringern, mit dem Sie von Tableau aus eine Verbindung herstellen.
SELECT
[FischerIris].[Species] AS [Species],
[FischerIris].[Width] AS [Petal Width],
COUNT([FischerIris].[ID]) AS [Num of Species]
FROM [FischerIris]
WHERE [FischerIris].[Organ] = 'Petal'
AND [FischerIris].[Width] > 15.0000
GROUP BY [FischerIris].[Species], [FischerIris].[Width]
Umstrukturieren Ihrer Daten (Pivot)
In manchen Fällen arbeiten Sie ggf. mit einer Tabelle, für die vor der Analyse eine Umstrukturierung erforderlich ist. Obwohl diese Art von Aufgaben auf der physischen Ebene des Verknüpfungsbereichs in Tableau mithilfe von Optionen wie Pivot durchgeführt werden kann, unterstützt Ihre Datenbank dies möglicherweise nicht. In diesem Fall können Sie stattdessen benutzerdefinierte SQL verwenden.
Angenommen, Ihnen liegt die folgende Tabelle vor:
Verwenden Sie die folgende SQL-Abfrage zum Ändern der Struktur und für die Optimierung der Daten zur Analyse in Tableau:
SELECT Table1.Season ID AS [Season ID],
Table1.Items - Don't like AS [Quantity],
"Don't Like" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS [Season ID],
Table.Items - Defective AS [Quantity],
"Defective" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS [Season ID],
Table1.Items - Too big AS [Quantity],
"Too Big" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS Season ID,
Table1.Items - Too small AS [Quantity]
"Too Small" AS [Reason]
FROM Table1
Das Abfrageergebnis sieht im Datenraster folgendermaßen aus:
Weitere Informationen zur Pivotoption finden Sie unter Pivotieren von Daten von Spalten in Zeilen.
Kombinieren (Verknüpfen) und Aggregieren Ihrer Daten
Wenn Sie Tabellen kombinieren und Ihre Daten aggregieren müssen, können Sie sowohl eine Verknüpfungsoption als auch einen Standardaggregationstyp auf der physischen Ebene des Verknüpfungsbereichs in Tableau verwenden. In manchen Fällen ist stattdessen ggf. die Verwendung von benutzerdefinierter SQL erforderlich.
Angenommen, Sie verfügen über die folgenden beiden Tabellen: Aufträge und Anbieter
Aufträge | Anbieter |
---|---|
Über die folgende benutzerdefinierte SQL-Abfrage können Sie die Gesamtanzahl der Aufträge ermitteln und die Verknüpfung links für die Tabellen "Aufträge" und "Anbieter" durchführen:
SELECT Vendors.Name,COUNT(Orders.Order) AS Number Of Orders
FROM Orders
LEFT JOIN Vendors
ON Orders.VendorID=Vendors.VendorID
GROUP BY Name;
Das Ergebnis der Abfrage sieht wie folgt aus:
Weitere Informationen zu Verknüpfungen finden Sie unter Verknüpfen Ihrer Daten.
Es werden Fehler beim Duplizieren von Spalten referenziert.
Wenn die benutzerdefinierte SQL-Abfrage auf doppelte Spalten verweist und Sie eine dieser Spalten zu Analysezwecken in Tableau verwenden, treten unter Umständen Fehler auf. Dies kann auch eintreten, wenn die Abfrage gültig ist. Angenommen, Sie verwenden die folgende Abfrage:
SELECT * FROM
authors, titleauthor WHERE authors.au_id = titleauthor.au_id
Die Abfrage ist gültig, aber das Feld au_id ist mehrdeutig, da es in diesem Fall sowohl in der Tabelle "authors" als auch in der Tabelle "titleauthor" enthalten ist. Tableau stellt eine Verbindung für die Abfrage her, aber es tritt immer ein Fehler auf, wenn Sie das Feld au_id verwenden möchten. Das liegt daran, dass Tableau nicht weiß, auf welche Tabelle Sie verweisen.
Hinweis: Als Best Practice hat sich bewährt, Spaltenaliasse in einer benutzerdefinierten SQL-Abfrage wenn möglich mit einer AS-Klausel zu definieren. Dies hängt damit zusammen, dass jede Datenbank über eigene Regeln hinsichtlich der automatischen Erzeugung eines Spaltennamens verfügt, wenn kein Alias verwendet wird.
Bearbeiten einer benutzerdefinierten SQL-Abfrage
Gehen Sie wie folgt vor, um eine benutzerdefinierte SQL-Abfrage zu bearbeiten:
- Doppelklicken Sie auf der Datenquellenseite im Verknüpfungsbereich auf die benutzerdefinierte SQL-Abfrage auf der logischen Ebene.
- Zeigen Sie mit der Maus auf die benutzerdefinierte SQL-Tabelle auf der physischen Ebene, bis der Pfeil angezeigt wird.
- Klicken Sie auf den Pfeil, und wählen Sie dann Benutzerdefinierte SQL-Abfrage bearbeiten aus.
- Bearbeiten Sie die benutzerdefinierte SQL-Abfrage im Dialogfenster.
Ändern eines benutzerdefinierten SQL-Abfrage-Namens
Wenn Sie eine benutzerdefinierte SQL-Abfrage in die logische Ebene des Verknüpfungsbereichs ziehen, weist Tableau ihr einen Standardnamen zu: Benutzerdefinierte SQL-Abfrage, Benutzerdefinierte SQL-Abfrage1 usw. Sie können den Standardnamen in einen aussagekräftigeren Namen ändern.
- Wählen Sie auf der Datenquellenseite auf der logischen Ebene des Verknüpfungsbereichs den Dropdown-Pfeil in der benutzerdefinierten SQL-Abfragetabelle und dann Umbenennen aus.
- Geben Sie den Namen ein, den Sie für die benutzerdefinierte SQL-Abfrage verwenden möchten.
Verwenden von Parametern in einer benutzerdefinierten SQL-Abfrage
Durch die Angabe von Parametern in einer benutzerdefinierten SQL-Abfrageanweisung können Sie einen konstanten Wert durch einen dynamischen Wert ersetzen. Anschließend können Sie den Parameter in der Arbeitsmappe aktualisieren, um die Verbindung zu ändern. Beispielsweise können Sie eine Verbindung zu einer benutzerdefinierten SQL-Abfrage herstellen, die Daten zum Webdatenverkehr für eine bestimmte, durch einen "pageID"-Wert angegebene Seite liefert. Statt in der SQL-Abfrage für den "pageID"-Wert einen konstanten Wert anzugeben, können Sie einen Parameter einfügen. Nachdem Sie die Bearbeitung der Verbindung abgeschlossen haben, können Sie in der Arbeitsmappe ein Parametersteuerelement anzeigen. Mit dem Parametersteuerelement können Sie den "pageID"-Wert ändern und Daten für alle interessierenden Seiten abrufen, ohne die Verbindung bearbeiten oder duplizieren zu müssen.
In Tableau Desktop können Sie Parameter direkt im Dialogfeld "Benutzerdefinierte SQL" erstellen oder einen in der Arbeitsmappe vorhandenen Parameter verwenden. Wenn Sie einen neuen Parameter erstellen, steht dieser anschließend wie jeder andere Parameter in der Arbeitsmappe zur Verfügung. Weitere Informationen finden Sie unter Erstellen von Parametern.
Bei der Webdokumenterstellung (in Tableau Cloud oder Tableau Server) können Sie einen bestehenden Parameter verwenden, der über Tableau Desktop veröffentlicht wurde. Sie können bei der Webdokumenterstellung keinen neuen Parameter erstellen.
So fügen Sie einen Parameter zu einer benutzerdefinierten SQL-Abfrage hinzu
- Bewegen Sie auf der Datenquellenseite im Arbeitsbereich den Mauszeiger über die Tabelle, bis das Bearbeitungssymbol angezeigt wird, und klicken Sie dann auf die Bearbeitungsschaltfläche.
- Klicken Sie unten im Dialogfeld auf Parameter einfügen.
- Wählen Sie in der SQL-Anweisung einen konstanten Wert aus, und wählen Sie dann über das Dropdown-Menü Parameter einfügen unten im Dialogfeld den Parameter aus, den Sie stattdessen verwenden möchten. Wenn Sie noch keinen Parameter erstellt haben, wählen Sie Neuen Parameter erstellen aus. Befolgen Sie die Anweisungen unter Erstellen von Parametern, um einen Parameter zu erstellen.
Hinweis: Parameter können nur Literalwerte ersetzen. Ausdrücke oder Bezeichner, wie z. B. Tabellennamen, können nicht durch Parameter ersetzt werden.
Im Beispiel unten gibt die benutzerdefinierte SQL-Abfrage alle Bestellungen zurück, deren Priorität auf "Urgent" festgelegt ist. In der benutzerdefinierten SQL-Anweisung ist die Bestellpriorität der konstante Wert. Wenn Sie die Verbindung so ändern möchten, dass die Bestellungen mit hoher Priorität angezeigt werden, müssen Sie die Datenquelle bearbeiten.
Statt viele Varianten derselben Abfrage zu erstellen und zu verwalten, können Sie den konstanten Wert für die Bestellpriorität durch einen Parameter ersetzen. Der Parameter muss alle möglichen Werte für "Order Priority" enthalten.
Nachdem Sie einen Parameter erstellt haben, können Sie diesen in die SQL-Anweisung einfügen und so den konstanten Wert ersetzen.
Nachdem Sie die Bearbeitung der Verbindung abgeschlossen haben, finden Sie den neuen Parameter im Bereich Parameter am unteren Rand des Datenbereichs, und das Parametersteuerelement wird rechts von der Ansicht angezeigt. Die Verbindung wird aktualisiert, wenn Sie einen anderen Wert auswählen.
Hinweis: Wenn Sie einen Extrakt verwenden, müssen Sie diesen aktualisieren, damit die Parameteränderungen wirksam werden. Bei der Veröffentlichung einer Datenquelle, die benutzerdefinierte SQL-Parameter verwendet, werden die Parameter eingeschlossen. Die Parameter werden in alle Arbeitsmappen übertragen, die eine Verbindung zu der Datenquelle herstellen.
Support von Tableau Catalog für benutzerdefinierte SQL
Die Unterstützung für benutzerdefiniertes SQL in Tableau Catalog hängt von der benutzerdefinierten SQL-Abfrage ab.
Tableau Catalog ist als Teil des Datenverwaltung-Angebots für Tableau Server und Tableau Cloud erhältlich. Weitere Informationen zu Tableau Catalog finden Sie unter "Über Tableau Catalog" in der Hilfe zu Tableau Server oder Tableau Cloud.
Unterstützte Abfragen
Catalog unterstützt benutzerdefinierte SQL-Abfragen, die den ANSI SQL-2003-Standard erfüllen, mit drei bekannten Ausnahmen:
- Zeitzonenausdrücke
- Multiset-Ausdrücke
- Tableau-Parameter
Ab 2021.4 unterstützt Tableau Catalog auch die Verwendung des Transact-SQL (T-SQL)-Dialekts in benutzerdefinierter SQL, mit den folgenden Ausnahmen:
- Hinweise
- FOR-Klauseln
- OPENROWSET-, OPENXML- und OPENJSON-Funktionen
- ODBC-Skalarfunktionen
- FOR SYSTEM_TIME
- TABLESAMPLE
- MATCH-Ausdruck
- CONTAINS-Ausdruck
- FREETEXT-Ausdruck
Ab Tableau Cloud Oktober 2023 und Tableau Server 2023.3 bietet Tableau Catalog auch Unterstützung für benutzerdefinierte SQL-Abfragen, die PostgreSQL verwenden, mit den folgenden Ausnahmen:
- XML-Funktion
- JSON-Funktionen und -Operatoren
Unterstützte Features und Funktionen
Catalog unterstützt die folgenden zusätzlichen Funktionen für Datenquellen, Arbeitsmappen und Schemas mit Verbindungen, welche die Treiber MySQL oder PostgreSQL verwenden, z. B. Amazon Aurora für MySQL, Amazon RedShift, Pivotal Greenplum Database, MemSQL, Denodo und andere.
- MySQL GROUP_CONCAT-Funktion
- PostgreSQL-Arrays
- PostgreSQL EXTRACT()-Funktion
Andere benutzerdefinierte SQL-Szenarien und -Funktionen funktionieren möglicherweise, Tableau testet sie jedoch nicht speziell und unterstützt sie nicht gezielt.
Unterstützte Verzweigung
Wenn ein Asset benutzerdefinierte SQL verwendet, wird auf der Registerkarte Verzweigung der Asset-Seite eine Meldung mit einer Schaltfläche Benutzerdefinierte SQL-Abfrage anzeigen angezeigt. Klicken Sie auf die Schaltfläche, um die in der Verbindung verwendete benutzerdefinierte SQL zu sehen. Wenn Sie die benutzerdefinierte SQL in Ihre Zwischenablage kopieren möchten, klicken Sie auf Kopieren.
Einige Arten von benutzerdefinierter SQL können dazu führen, dass die vorgelagerte Verzweigung unvollständig ist. Wenn dies der Fall ist, wird eine Meldung mit diesen Informationen angezeigt. Felddetailkarten enthalten möglicherweise keine Verknüpfungen zu verbundenen Spalten oder zeigen überhaupt keine verbundenen Spalten an. Karten mit Spaltendetails enthalten möglicherweise keine Verknüpfungen zu Feldern, die die Spalte verwenden, oder es werden überhaupt keine Felder angezeigt.
Wenn Sie die Verzweigung einer Tabelle untersuchen, beachten Sie, dass Catalog die Anzeige von Spalteninformationen in der Verzweigung von Tabellenmetadaten, die mit benutzerdefinierter SQL gesammelt wurden, nicht unterstützt. Wenn jedoch andere Assets dieselbe Tabelle nutzen und keine benutzerdefinierte SQL verwenden, kann Tableau Catalog möglicherweise Informationen über die Spalten anzeigen, die durch diese anderen Assets entdeckt wurden.
Im folgenden Screenshot wurde die factAccountOpportunityByQuarter-Tabelle indiziert, da sie von einer Datenquelle verwendet wird. Da auf sie jedoch durch eine benutzerdefinierte SQL-Abfrage verwiesen wird, sind die Spalteninformationen nicht verfügbar.
In einem Fall, in dem mehr als eine Datenquelle, Arbeitsmappe oder Schema eine Tabelle verwendet, werden alle Assets, die nach dieser Tabelle eine benutzerdefinierte SQL-Abfrage verwenden, ausgeschlossen, wenn Filter auf Spaltenebene angewendet werden. Infolgedessen werden weniger nachgelagerte Assets in der Verzweigung angezeigt, als tatsächlich verwendet werden.
Weitere Informationen zur Verwendung der Verzweigung finden Sie unter "Verwenden Sie 'Verzweigung' für die Wirkungsanalyse" in der Tableau Server(Link wird in neuem Fenster geöffnet)- oder Tableau Cloud(Link wird in neuem Fenster geöffnet)-Hilfe.