Zum Hauptinhalt springen

Lange Wartezeiten beim Umgang mit Tableau sind nervig und sorgen für mehr Frust als Lust. Wie man trotz Live-Connection oder einem komplexen Datenmodell die Performance der Tableau-Datenquelle wieder in den Griff bekommt, beleuchten wir in dieser Case Study.

Ein paar Eckdaten zur Vergleichbarkeit

Wer nach Vorschlägen zur Performance-Verbesserung von Tableau-Datenquellen recherchiert, wird im Internet schnell fündig. Oft sind die dargestellten Lösungen aber sehr vage und es mangelt an Informationen zum Anwendungsfall. Daher stellen wir zur besseren Vergleichbarkeit ein paar Eckdaten aus einem beispielhaften Referenzprojekt dar:
 


In der Ausgangslage wurde die oben dargestellte Tableau-Datenquelle mit Tableau Desktop 2019.1.2 erstellt und dann auf Tableau Server einem breiteren Anwenderkreis zur Verfügung gestellt. Viele Operationen, z. B. Filter zu setzen oder Attribute in den Bericht zu ziehen, liefen häufig mehr als 60 Sekunden, in Extremfällen sogar bis zu 10 Minuten. Eine Umsetzung als Extrakt kam aufgrund einer beschränkten Speicherkapazität des Servers nicht in Frage.

Vorgehen und konkrete Maßnahmen gegen Performance-Engpässe

Um eine Idee davon zu bekommen, an welcher Stelle genau es zu Performance-Engpässen kommt, bietet es sich an, mit der Tableau-Performance-Aufzeichnung in der Arbeitsmappe zu arbeiten. Diese ist allerdings nur in Tableau Desktop verfügbar.

Folgende Maßnahmen führten bei uns zu Performance-Verbesserungen

Umstellung auf "logische Datenquelle" ab Tableau Version 2020.2

Die von Tableau generierten SQL-Abfragen können von Entwickler:innen der Quelle nur bedingt beeinflusst werden – sie hängen vor allem von den Operationen in der Arbeitsmappe ab und werden dynamisch von der Tableau Engine generiert. Vor der Version 2020.2 hat die Tableau Engine stets alle in der Datenquelle verbundenen Tabellen gemeinsam abgefragt, auch wenn nur ein Bruchteil der Tabellen tatsächlich in der Arbeitsmappe benötigt wurde. Durch die in Tableau 2020.2 eingeführte logische Ebene werden jetzt nur noch diejenigen Objekte abgefragt, die tatsächlich auch benötigt werden. Die generierten SQL-Abfragen werden dadurch deutlich schlanker.

Performance Option einsetzen

Ein weiteres Feature aus Tableau 2020.2: In den sogenannten Beziehungen zwischen Tabellen können jetzt Performance-Optionen gesetzt werden, die es Entwickler:innen ermöglichen, die generierten SQL-Abfragen zu optimieren.



Hier gilt grundsätzlich: Je genauer, desto besser: „Many-to-One“ ist besser als „Many-to-Many“, „All records match“ ist besser als „Some records match“. Die Angaben ersparen der Tableau Engine unnötiges Gruppieren und Aggregieren und bewirken dadurch performantere Abfragen.

Noch ein kleiner Tipp zum Schluss

Verwendet man dieselbe Abfrage mehrmals in einer Quelle (z. B., um in allen Objekten in die Historie zu stechen), lohnt es sich, sie als benutzerdefinierte Abfrage zu schreiben und am Ende mit einem „order by false“ zu bestücken. In zahlreichen Datenbanken wie z. B. Exasol wird so eine Materialisierung des Ergebnisses erzwungen, was sich bei wiederholenden Abfragen positiv auf die Performance auswirkt.

Ergebnisse

Anhand einer Referenz-Arbeitsmappe konnten wir an vielen Stellen Performanceverbesserungen feststellen. Beispielsweise hatte die Berechnung einer summierten Kennzahl vorher noch durchschnittlich 40 Sekunden gebraucht, danach lediglich rund 3 Sekunden. Auch nach der Umsetzung der neuen Datenquelle konnten wir beobachten, dass die Performance mit Zunahme der aktivierten Filter im Workbook abnimmt. Das erscheint auf den ersten Blick kontrovers, ist aber durch die Art und Weise, wie Filter in Tableau funktionieren, erklärbar. Abhilfe schaffen Kontextfilter:



Hierdurch werden Filter nicht mehr unabhängig voneinander berechnet, sondern nur noch auf die restliche Datenmenge nach Verwendung des Kontextfilters angewendet.

Du möchtest mehr zu Tableau erfahren? Erfahre hier, wie Du Tableau Prep zur Datenvorbereitung nutzen kannst.