Was sind die Unterschiede zwischen CASE- und IF-Statements in berechneten Feldern in Tableau? Wie variieren unterschiedliche Typen von IF-Statements? Wann ist es besser, eines dieser Statements zu bevorzugen? Darüber schreibe ich in diesem Artikel.
Die unterschiedlichen Typen von IF-Statements
Bevor wir zu den CASE-Statements kommen, ist es wichtig, zuerst die verschiedenen IF-Statements in Tableau zu klären: Zum einen gibt es das klassische IF-THEN-Statement mit der Möglichkeit, weitere ELSEIF-Komponenten hinzuzufügen. Zum anderen gibt es das IIF-Statement, das unbekannte Ergebnisse der Berechnung anders behandelt und eine andere Syntax benutzt. Um das und weitere Unterschiede in diesem Artikel zu illustrieren, nutze ich ein einfaches Datenset zu (englischen) Schulnoten.
Nehmen wir an, dass für jede “A”-Note ein Zertifikat ausgestellt wird. Und ich möchte ein berechnetes Feld, das genau diese Fälle identifiziert. Ich könnte ein einfaches IF-THEN-Statement (Abbildung 1) oder ein IIF-Statement (Abbildung 2) nutzen.
Abbildung 1: Diese Formel teilt die booleschen Ergebnisse in zwei Kategorien: TRUE und alles andere (FALSE und UNKNOWN).
Abbildung 2: Diese Formel teilt die booleschen Ergebnisse in drei Kategorien: TRUE, FALSE und UNKNOWN. Wenn ein UNKNOWN-Wert nicht spezifiziert wird, wird die Formel NULL für diese Zeile ausgeben.
Abhängig von den Daten kann die Syntax der einzige Unterschied zwischen beiden Varianten sein. In diesen Fällen ist das IIF-Statement einfacher und weniger fehleranfällig. Wie auch immer, es könnte nicht ganz so lesbar sein, wenn der Benutzer nicht damit vertraut ist. Der primäre Unterschied zwischen beiden Statements wird klar, wenn die Daten einen Wert enthalten, der bei dem booleschen Vergleich ein “unbekannt” ausgibt. Das passiert gewöhnlich, wenn das Datenset Nullwerte enthält.
In diesen Fällen behandelt und benennt IF THEN die unbekannten Ergebnisse als FALSE, während das IIF-Statement ein NULL oder einen anderen spezifizierten Wert zurückgibt. Nehmen wir in unserem Beispiel mal an, der Mathelehrer hat vergessen einige Noten einzutragen. Die IF THEN Formel würde diesen Zeilen mit fehlenden Noten den “Do Nothing”-Wert zuweisen, doch die IIF Formel würde als NULL belassen. Abbildung 3 zeigt eine Kreuztabelle mit den hervorgehobenen Unterschieden.
Abbildung 3: Wenn IF-THEN-Statements unbekannte Werte nicht extra berücksichtigen, können sie Daten fehlinterpretieren, wie in diesem Beispiel.
Wie wir sehen, meldet die IIF-Berechnung akkuratere Daten und stellt heraus, wenn es Nullwerte gibt. In diesem Fall ist das IIF-Statement dem IF-THEN-Statement überlegen. Es gibt mit der ISNULL-Funktion einen einfachen Workaround für dieses Problem mit dem IF-THEN-Statement, doch das wirkt ziemlich unaufgeräumt (Abbildung 4).
Abbildung 4: IF-THEN-Statements können unbekannte Ergebnisse korrekt ausgeben, indem Funktionen wie ISNULL ergänzt werden.
IF-THEN-Statements, wie auch immer, sind weitaus besser als IIF-Statements, wenn Funktionen verschachtelt werden müssen. Nehmen wir beispielsweise an, dass ich all die A-F-Noten in numerische Noten übersetzen möchte, um den Notenschnitt (Student GPA) zu berechnen. Die IF- THEN Formel ist ziemlich eindeutig und einfach zu verstehen (Abbildung 5). Die IIF-Formel in Abbildung 6 hingegen ist weitaus schwieriger zu schreiben und zu verstehen.
Abbildung 5: IF THEN ELSEIFF … ist gewöhnlich die beste Methode, um diese Art von Funktionen zu schachteln.
Abbildung 6: Auch wenn diese Formel so funktioniert, ist es eine wirklich schlechte Methode, um diese Berechnung auszuführen.
Also, wenn es um IF-Statements in Tableau geht: Benutze das IIF-Statement, wenn die Berechnung einfach ist oder Du Dir nicht ganz im Klaren über die Datenqualität bist, die über das Feld getestet wird. Oft bist Du jedoch besser dran, ein normales IF-THEN-Statement zu benutzen – stelle nur sicher, dass Deine Formel unbekannte Werte korrekt verarbeitet.
Vergleich zu CASE-Statements
Um CASE- und IF-Statements zu vergleichen, werde ich den IF-THEN-Typ der IF-Statements nutzen. Für viele Berechnungen können sowohl CASE- als auch IF-Statements genutzt werden, um dasselbe Ergebnis zu erhalten. Um zum Beispiel die Buchstaben-Noten in numerische Noten zu übersetzen, wie oben gezeigt, funktioniert auch die CASE-Formel (Abbildung 7).
Abbildung 7: Die ELSE-Klausel ist optional. Ohne sie wird jedes nicht passende Ergebnis als NULL gewertet.
In diesem Beispiel sehen wir einen der Vorteile, manchmal ein CASE-Statement zu nutzen: Einfachheit. Hier ist das CASE-Statement nicht nur einfacher zu verstehen, es vereinfacht auch die Fehlervermeidung, wie bspw. das falsche Feld zu referenzieren. Ein anderer Vorteil der CASE-Statements gegenüber IF-Statements ist, dass die CASE-Statements schneller sind. Das liegt daran, dass sie wie eine Art Switch-Anweisung funktionieren.
Wie auch immer, CASE-Statements in Tableau sind stark beschränkt, weil sie keine boolesche Algebra beherrschen! Das kann schon mal verwirrend für jemanden sein, der SQL CASE-Statements gewohnt ist, die nicht so limitiert sind. Die Einschränkung bei Tableau’s CASE-Statements macht es in vielen Fällen extrem schwer bis unmöglich, sie für logische Berechnungen zu nutzen.
Nehmen wir an, ich möchte ein berechnetes Feld, das die Schüler in drei Gruppen einteilt, abhängig von ihrem Notenschnitt (GPA): Advanced, Average und Below Average. Das IF-Statement in Abbildung 8 bekommt das einfach hin.
Abbildung 8: Denk dran, dass IF THEN-Statements boolesche Ausdrücke benötigen – Ausdrücke, die entweder als TRUE oder FALSE bewertet werden.
CASE-Statements jedoch können diese Berechnung in Tableau nicht ausführen, weil sie den Ausdruck mit den exakten String-Werten vergleichen, die Du auflistest. Ein weiterer Vorteil von IF-Statements gegenüber CASE-Statements ist, dass IF-Statements einfacher sind, wenn mehrere Ausdrücke in einem einzigen berechneten Feld verglichen werden sollen.
Nehmen wir an, ein Lehrer möchte eine neue MINT-Gruppe (STEM group) für Mädchen starten und will dafür ein berechnetes Feld, das weibliche, geeignete Schüler vom Rest abgrenzt. Mit IF-Statements ist die Formel ziemlich simpel (Abbildung 9). Doch mit einem CASE-Statement (Abbildung 10) wird die Formel unübersichtlich und benötigt verschachtelte Statements.
Abbildung 9: Wo möglich, versuche logische Operatoren wie AND zu benutzen. Sie können Formelstrukturen vereinfachen und die Performance erhöhen.
Abbildung 10: Nicht nur ist die Verschachtelung mit CASE-Statements schwerer zu lesen, es ist auch einfacher Fehler zu machen. Versuche CASE-Verschachtelungen wie hier zu vermeiden, wann immer Du kannst.
Das finale Urteil
Zusammenfassend: Wenn Du die Wahl zwischen einem einfachen CASE-Statement und einem IF-Statement hast, nimm das CASE-Statement. Es ist klarer und schneller. Solltest Du jedoch ein CASE-Statement nutzen und stetig Fehlermeldungen bekommen, oder solltest Du Dich ertappen ein paar sehr komplizierte Formeln zu schreiben, bist Du mit einem IF-Statement vermutlich besser dran.
Für mehr Informationen über logische Funktionen in Tableau siehe auch