Berechnete Spalten auf Basis von Bedingungen

Wenn Sie Spalten berechnen, möchten Sie möglicherweise unterschiedliche Ergebnisse eines Ausdrucks erhalten, abhängig davon, ob bestimmte Bedingungen erfüllt sind oder nicht. Bedingungen können in Ausdrücken mithilfe der logischen Funktionen If() oder Case() eingerichtet werden.

If()

Wenn Sie die Funktion If() verwenden, geben Sie eine Bedingung an, die entweder wahr oder falsch ist, gefolgt von dem, was zurückgegeben werden soll, wenn die Bedingung erfüllt oder nicht erfüllt ist.

Beispiele

Der Ausdruck

If(([Amount]<10),"low","high")

bedeutet, dass im Falle eines Zeilenwerts in der Spalte „Betrag“, der kleiner als 10 ist, der Wert „Niedrig“ als Ergebnis zurückgegeben wird, aber bei einem Wert, der 10 oder höher ist, der Wert „Hoch“ zurückgegeben wird.

Dies ist im Folgenden dargestellt:



Mit anderen Worten unterteilt die If()-Funktion die Zeilen in zwei Gruppen: eine Gruppe, die aus den Zeilen besteht, für die die angegebene Bedingung „true“ ist (durch Rückgabe von „Niedrig“ als Ergebnis) und die andere Gruppe, die aus den Zeilen besteht, für die die angegebene Bedingung „false“ ist (durch Rückgabe von „Hoch“ als Ergebnis).

Anmerkung:

Wenn die zurückzugebenden Werte aggregierte Werte sind, werden die beiden Gruppen getrennt behandelt. Dies wird in der folgenden Tabelle durch den hinzugefügten Ausdruck

If(([Amount]<10),Avg([Amount]),Avg([Amount]))

veranschaulicht, der die durchschnittlichen Aggregationen enthält. In diesem Fall wird für beide Gruppen die gleiche Aggregation angegeben, es können jedoch unterschiedliche Aggregationen verwendet werden.



Für die Zeilenwerte, die kleiner als 10 sind, also die „true“-Gruppe, wird der Durchschnitt 6 zurückgegeben ((5+7)/2) und für die „false“-Gruppe der Durchschnitt 13 ((14+10+15)/3).

Die if()-Funktion kann auch in Kombination mit and oder or verwendet werden. Zur Veranschaulichung: Der Ausdruck führt

If(([Customer age]<20) and ([Gender]="Female"),"girl","other")

zur folgenden hinzugefügten berechneten Spalte:



Case()

Wenn Sie einen Ausdruck schreiben möchten, dessen Bedingungsergebnisse nicht auf „true“ und „false“ beschränkt sind, können Sie die case()-Funktion verwenden. Case() kann auf zwei verschiedene Arten verwendet werden, die im Folgenden anhand von Beispielen beschrieben werden.

Beispiel 1

Angenommen, die Preise für Bücher und Videos unten wurden um 10 % bzw. 50 % reduziert, und die Preisliste muss aktualisiert werden.



Da die Reduzierung je nach Produkttyp unterschiedlich ist, wird ein case()-Ausdruck verwendet, um die neuen Preise zu berechnen:

case [Type]
when "Book" then [Price]*0.9
when "Video" then [Price]*0.5
else [Price]
end



Hier vergleicht case() einfach „Typ“ mit jeder einzelnen when-Option im Ausdruck.

Beispiel 2

Im zweiten Beispiel wird case() verwendet, um Testergebnisse für eine Reihe von Schülern auszuwerten. Es gibt drei Bewertungsstufen: Durchgefallen (insgesamt weniger als 100), Bestanden und Ausgezeichnet (insgesamt 160 oder mehr).



In diesem Fall bewertet Case() die Bedingungen für jede einzelne when-Option unabhängig voneinander:

case  
when ([Test A] + [Test B])<100 then "Failed" 
when ([Test A] + [Test B])>=160 then "Excellent"
else "Passed"
end

Auf diese Weise können komplexere Bedingungen implementiert werden als in Beispiel 1.

Die fertige berechnete Spalte ist unten abgebildet:



Anmerkung: In beiden case()-Formen können mehrere when / then-Bedingungen in den Ausdruck aufgenommen werden.

Sortieren der Ausführung der Bedingungen

Die Ausführung der verschiedenen Teile der case()-Ausdrücke erfolgt von oben nach unten. Ein Beispiel finden Sie im Ausdruck unten und in der resultierenden Spalte:

case
when [Number]<40 then "yes"
when [Number]<70 then "no"
else "x"
end



Zahlen unter 40 werden also auf „ja“ gesetzt und ändern sich nicht. Der nächste Teil im Ausdruck, also das Setzen der Zahlen unter 70 auf „nein“, wirkt sich nur auf die restlichen Zeilen aus.