Best Practices für die Erstellung von Berechnungen in Tableau

In diesem Artikel werden verschiedene Tipps und Richtlinien zum Erstellen effizienter Berechnungen in Tableau beschrieben. Diese Richtlinien sollen Ihnen beim Optimieren der Arbeitsmappenleistung helfen. Weitere Informationen zu sämtlichen Methoden zur Verbesserung der Arbeitsmappenleistung finden Sie in der Reihe Optimieren der Arbeitsmappenleistung

Allgemeine Regel: Vermeiden Sie die mehrmalige Verwendung eines berechnetes Feldes in einer anderen Berechnung.

Der mehrmalige Verweis auf dasselbe berechnete Feld in einer anderen Berechnung führt zu Leistungsproblemen. Wenn Sie in einer Berechnung ein berechnetes Feld verwenden (dies wird auch als Erstellen einer verschachtelten Berechnung bezeichnet), versuchen Sie, nur einmal in der Berechnung darauf zu verweisen.

Beachten Sie, dass sich die Leistung durch den mehrmaligen Verweis auf ein Feld (Terminalfeld) in einer Berechnung nicht verschlechtern sollte.

Beispiel

Angenommen, Sie erstellen ein berechnetes Feld mit einer komplizierten Berechnung über mehrere Zeilen zum Suchen von Erwähnungen oder Twitter Handles in Tweets. Das berechnete Feld hat den Titel "Twitter Handle". Alle zurückgegebenen Handles beginnen mit dem Zeichen "@" (Beispiel: @user).

Für Ihre Analyse sollten Sie das Symbol "@" entfernen.

Dazu können Sie die folgende Berechnung verwenden, um das erste Zeichen aus der Zeichenkette zu entfernen:

RIGHT([Twitter Handle], LEN([Twitter Handle]) -1)

Diese Berechnung ist recht einfach. Da sie jedoch zweimal auf die Twitter Handle-Berechnung verweist, wird diese Berechnung für jeden Datensatz in Ihrer Datenquelle zweimal ausgeführt: einmal für die RIGHT-Funktion und noch einmal für die LEN-Funktion.

Um die mehrmalige Durchführung derselben Berechnung zu verhindern, können Sie die Berechnung so umschreiben, dass die Twitter Handle-Berechnung nur einmal verwendet wird. In diesem Beispiel können Sie mit MID dasselbe Ziel erreichen:

MID([Twitter Handle], 2)

Tipp 1: Konvertieren Sie mehrere Vergleiche bezüglich der Gleichheit in einen CASE-Ausdruck oder eine Gruppe.

Angenommen, es handelt sich um die folgende Berechnung, in der das berechnete Feld "Person (calc)" mehrmals verwendet wird und in dem eine Reihe von OR-Funktionen angewendet werden. Obwohl es sich bei dieser Berechnung um einen einfachen logischen Ausdruck handelt, verursacht sie Probleme bezüglich der Abfrageleistung, da die Berechnung von "Person (calc)" mindestens zehnmal durchgeführt wird.

IF [Person (calc)] = 'Henry Wilson'
OR [Person (calc)] = 'Jane Johnson'
OR [Person (calc)] = 'Michelle Kim'
OR [Person (calc)] = 'Fred Suzuki'
OR [Person (calc)] = 'Alan Wang'
THEN 'Lead'
ELSEIF [Person (calc)] = 'Susan Nguyen'
OR [Person (calc)] = 'Laura Rodriguez'
OR [Person (calc)] = 'Ashley Garcia'
OR [Person (calc)] = 'Andrew Smith'
OR [Person (calc)] = 'Adam Davis'
THEN 'IC'
END

Statt einen Vergleich bezüglich der Gleichheit zu verwenden, sollten Sie die folgenden Lösungen probieren.

Lösung 1

Verwenden Sie einen CASE-Ausdruck. Beispiel:

CASE [Person (calc)]
WHEN 'Henry Wilson' THEN 'Lead'
WHEN 'Jane Johnson' THEN 'Lead'
WHEN 'Michelle Kim' THEN 'Lead'
WHEN 'Fred Suzuki' THEN 'Lead'
WHEN 'Alan Wang' THEN 'Lead'

WHEN 'Susan Nguyen' THEN 'IC'
WHEN 'Laura Rodriguez' THEN 'IC'
WHEN 'Ashley Garcia' THEN 'IC'
WHEN 'Andrew Smith' THEN 'IC'
WHEN 'Adam Davis' THEN 'IC'
END

In diesem Beispiel erfolgt nur ein Verweis auf das berechnete Feld "Person (calc)". Demzufolge wird die Berechnung nur einmal ausgeführt. Zudem werden CASE-Ausdrücke in der Abfrage-Pipeline weiter optimiert, sodass Sie einen zusätzlichen Leistungsvorteil erzielen können.

Lösung 2

Erstellen Sie eine Gruppe anstelle eines berechneten Feldes. Weitere Informationen finden Sie unter Gruppieren Ihrer Daten.

Tipp 2: Konvertieren Sie mehrere Zeichenfolgenberechnungen in einen einzelnen REGEXP-Ausdruck.

Hinweis: REGEXP-Berechnungen sind nur bei der Verwendung von Tableau-Datenextrakten oder dann verfügbar, wenn eine Verbindung zu Textdatei-, Hadoop Hive-, Google BigQuery-, PostgreSQL-, Tableau Data Extract-, Microsoft Excel-, Salesforce-, Vertica-, Pivotal Greenplum-, Teradata- (Version 14.1 und höher) und Oracle-Datenquellen besteht. Weitere Informationen finden Sie unter Zusätzliche Funktionen.


Beispiel 1: CONTAINS

Angenommen, es handelt sich um die folgende Berechnung, in der das berechnete Feld "Category (calc)" mehrmals verwendet wird. Obwohl es sich auch bei dieser Berechnung um einen einfachen logischen Ausdruck handelt, verursacht sie Probleme bezüglich der Abfrageleistung, da die Berechnung von "Category (calc)" mehrmals durchgeführt wird.

IF CONTAINS([Segment (calc)],'UNKNOWN')
OR CONTAINS([Segment (calc)],'LEADER')
OR CONTAINS([Segment (calc)],'ADVERTISING')
OR CONTAINS([Segment (calc)],'CLOSED')
OR CONTAINS([Segment (calc)],'COMPETITOR')
OR CONTAINS([Segment (calc)],'REPEAT')
THEN 'UNKNOWN'
ELSE [Segment (calc)] END

Sie können einen REGEXP-Ausdruck verwenden, um dieselben Ergebnisse ohne derartig viele Wiederholungen zu erzielen.

Lösung

IF REGEXP_MATCH([Segment (calc)], 'UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT') THEN 'UNKNOWN'
ELSE [Segment (calc)] END


Bei Zeichenfolgenberechnungen mit einem ähnlichen Muster können Sie denselben REGEXP-Ausdruck verwenden.

Beispiel 2: STARTSWITH

IF STARTSWITH([Segment (calc)],'UNKNOWN')
OR STARTSWITH([Segment (calc)],'LEADER')
OR STARTSWITH([Segment (calc)],'ADVERTISING')
OR STARTSWITH([Segment (calc)],'CLOSED')
OR STARTSWITH([Segment (calc)],'COMPETITOR')
OR STARTSWITH([Segment (calc)],'REPEAT')
THEN 'UNKNOWN'

Lösung

IF REGEXP_MATCH([Segment (calc)], '^(UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT)') THEN 'UNKNOWN'
ELSE [Segment (calc)] END

Beachten Sie, dass in dieser Lösung das Symbol "^" verwendet wird.

Beispiel 3: ENDSWITH

IF ENDSWITH([Segment (calc)],'UNKNOWN')
OR ENDSWITH([Segment (calc)],'LEADER')
OR ENDSWITH([Segment (calc)],'ADVERTISING')
OR ENDSWITH([Segment (calc)],'CLOSED')
OR ENDSWITH([Segment (calc)],'COMPETITOR')
OR ENDSWITH([Segment (calc)],'REPEAT')
THEN 'UNKNOWN'
ELSE [Segment (calc)] END

Lösung

IF REGEXP_MATCH([Segment (calc)], '(UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT)$') THEN 'UNKNOWN'
ELSE [Segment (calc)] END

Beachten Sie, dass in dieser Lösung das Symbol "$" verwendet wird.

Tipp 3: Bearbeiten Sie Zeichenfolgen mit REGEXP anstelle von LEFT, MID, RIGHT, FIND, LEN.

Reguläre Ausdrücke können ein sehr wirksames Hilfsmittel sein. Ziehen Sie bei komplexen Bearbeitungen von Zeichenfolgen die Verwendung regulärer Ausdrücke in Erwägung. Die Verwendung eines regulären Ausdrucks führt in vielen Fällen zu kürzeren und effizienteren Berechnungen. Weitere Informationen zu regulären Ausdrücken finden Sie unter dem Beitrag Become a regex regular and wrangle imperfect data(Link wird in neuem Fenster geöffnet) im Tableau-Blog.

Beispiel 1

Angenommen, es handelt sich um die folgende Berechnung, mit deren Hilfe Protokolle aus URLs entfernt werden. Beispiel: "https://www.tableau.com" wird zu "www.tableau.com".

IF (STARTSWITH([Server], "http://")) THEN
MID([Server], Len("http://") + 1)
ELSEIF(STARTSWITH([Server], "https://")) THEN
MID([Server], Len("https://") + 1)
ELSEIF(STARTSWITH([Server], "tcp:")) THEN
MID([Server], Len("tcp:") + 1)
ELSEIF(STARTSWITH([Server], "\\")) THEN
MID([Server], Len("\\") + 1)
ELSE [Server]
END

Lösung

Sie können die Berechnung vereinfachen und die Leistung verbessern, indem Sie eine REGEXP_REPLACE-Funktion verwenden.

REGEXP_REPLACE([Server], "^(http://|https://|tcp:|\\\\)", "")

Beispiel 2

Angenommen, es handelt sich um die folgende Berechnung, die den zweiten Teil einer IPv4-Adresse zurückgibt. Beispiel: "172.16.0.1" wird zu "16".

IF (FINDNTH([Server], ".", 2) > 0) THEN
MID([Server],
FIND([Server], ".") + 1,
FINDNTH([Server], ".", 2) - FINDNTH([Server], ".", 1) - 1
)
END

Lösung

Sie können die Berechnung vereinfachen und die Leistung verbessern, indem Sie eine REGEXP_EXTRACT-Funktion verwenden.

REGEXP_EXTRACT([Server], "\.([^\.]*)\.")

Tipp 4: Verwenden Sie in Berechnungen keine Sätze.

Wenn Sie in einer Berechnung Sätze verwenden, sollten Sie sie durch eine alternative, aber äquivalente Berechnung ersetzen.

Beispiel

Angenommen, es handelt sich um die folgende Berechnung, in der der Satz "Top Customers (set)" verwendet wird.

IF ISNULL([Customer Name]) OR [Top customers (set)] THEN [Segment] ELSE [Customer Name] END

Lösung 1

Wenn es sich um einen einfachen Satz handelt, können Sie ein berechnetes Feld erstellen, das dasselbe Ergebnis wie der Satz zurückgibt. Beispiel:

CASE [Customer Name]
WHEN 'Henry Wilson' THEN True
WHEN 'Jane Johnson' THEN True
WHEN 'Michelle Kim' THEN True
WHEN 'Fred Suzuki' THEN True
WHEN 'Alan Wang' THEN True
ELSE False
END


Hinweis: in dieser Situation wird die Verwendung des Musters WHEN TRUE … ELSE empfohlen, um Leistungsprobleme aufgrund der Verwendung von Sätzen zu vermeiden. In den meisten Szenarien handelt es sich nicht um ein empfohlenes Muster.

Lösung 2

Wenn der Satz komplexer ist, ziehen Sie die Erstellung einer Gruppe in Erwägung, mit deren Hilfe alle Elemente in dem Satz einem bestimmten Wert oder Attribut wie "IN“ zugeordnet werden. Ändern Sie anschließend die Berechnung, sodass dieser Wert/dieses Attribut überprüft wird. Beispiel:

IF ISNULL([Customer Name]) OR [Top Customers(group)]='IN' THEN [Segment] ELSE [Customer Name] END

Weitere Informationen finden Sie unter Gruppieren Ihrer Daten und Erstellen von Sätzen.

Tipp 5: Verwenden Sie zum Gruppieren Ihrer Daten keine Sätze.

Sätze dienen dem Vergleich mit Teilmengen von Daten. Gruppen sind zum Kombinieren zugehöriger Elemente in einem Feld konzipiert. Vom Konvertieren von Sätzen in Gruppen, wie im folgenden Beispiel gezeigt, wird abgeraten:

IF [Americas Set] THEN "Americas"
ELSEIF [Africa Set] THEN "Africa"
ELSEIF [Asia Set] THEN "Asia"
ELSEIF [Europe Set] THEN "Europe"
ELSEIF [Oceania Set] THEN "Oceania"
ELSE "Unknown"
END

Dies wird aus folgenden Gründen nicht empfohlen:

  • Sätze sind nicht immer exklusiv. Einige Elemente können in mehreren Sätzen vorkommen. Russland könnte beispielsweise sowohl im Satz für Europa als auch im Satz für Asien platziert werden.

  • Sätze können nicht immer in Gruppen übersetzt werden. Wenn die Sätze nach Ausschluss, Bedingungen oder Grenzen definiert sind, kann die Erstellung einer äquivalenten Gruppe schwierig oder sogar unmöglich sein.

Lösung

Gruppieren Sie Ihre Daten mithilfe der Gruppierungsfunktion. Weitere Informationen finden Sie unter Gruppieren Ihrer Daten.

Siehe auch

Erstellen effizienter Berechnungen

Optimieren der Arbeitsmappenleistung

Berechnungstypen in Tableau

Funktionen in Tableau

Vielen Dank für Ihr Feedback!Ihr Feedback wurde erfolgreich übermittelt. Vielen Dank.