Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
ifelse
wertet einen Satz von if-then-Ausdruckspaaren aus und gibt den Wert des then-Arguments für das erste if-Argument zurück, das als "true" ausgewertet wird. Wenn keines der if-Argumente "true" ergibt, wird der Wert des else-Arguments zurückgegeben.
Syntax
ifelse(
if-expression-1
,then-expression-1
[,if-expression-n
,then-expression-n
...],else-expression
)
Argumente
ifelse
erfordert mindestens ein oder mehrere if,then-Ausdruckspaar/e sowie genau einen Ausdruck für das else-Argument.
- if-expression
-
Der als "true" oder "false" auszuwertende Ausdruck. Es kann sich dabei um einen Feldnamen wie
address1
, einen literalen Wert wie'Unknown'
oder um eine Funktion wietoString(salesAmount)
handeln. Ein Beispiel istisNotNull(FieldName)
.Wenn Sie mehrere AND- und OR-Operatoren im
if
-Argument verwenden, schließen Sie die Anweisungen in Klammern ein, um die Verarbeitungsreihenfolge zu bestimmen. Die folgendeif
-Argument gibt beispielsweise Datensätze mit den Monaten 1, 2 oder 5 und das Jahr 2000 zurück.ifelse((month = 5 OR month < 3) AND year = 2000, 'yes', 'no')
Das nächste
if
-Argument verwendet dieselben Operatoren, gibt aber Datensätze mit dem Monat 5 und einem beliebigem Jahr oder den Monaten 1 oder 2 und dem Jahr 2000 zurück.ifelse(month = 5 OR (month < 3 AND year = 2000), 'yes', 'no')
- then-expression
-
Der Ausdruck, der zurückgegeben werden soll, wenn dessen if-Argument als "true" ausgewertet wird. Es kann sich dabei um einen Feldnamen wie
address1
, einen literalen Wert wie'Unknown'
oder um den Aufruf einer anderen Funktion handeln. Der Ausdruck muss vom gleichen Datentyp wie die anderenthen
-Argumente und das Argumentelse
sein. - else-expression
-
Der Ausdruck, der zurückgegeben werden soll, wenn keines der if-Argument als "true" ausgewertet wird. Es kann sich dabei um einen Feldnamen wie
address1
, einen literalen Wert wie'Unknown'
oder um eine Funktion wietoString(salesAmount)
handeln. Der Ausdruck muss vom gleichen Datentyp wie allethen
-Argumente sein.
Rückgabetyp
ifelse
gibt einen Wert desselben Datentyps wie die Werte in then-expression zurück. Alle Ausdrücke, die then und else zurückgegeben haben, müssen denselben Datentyp haben oder in denselben Datentyp konvertiert werden.
Beispiele
Im folgenden Beispiel wird eine Spalte mit Aliasnamen für das Feld country
generiert.
ifelse(country = "United States", "US", country = "China", "CN", country = "India", "IN", "Others")
In solchen Anwendungsfällen wird jeder Wert in einem Feld anhand einer Liste von Literalen ausgewertet und das Ergebnis zurückgegeben, das dem ersten übereinstimmenden Wert entspricht. Um Ihre Arbeit zu vereinfachen, wird ein Funktionswechsel empfohlen. Das vorherige Beispiel kann als folgende Anweisung mit switch umgeschrieben werden:
switch(country,"United States","US","China","CN","India","IN","Others")
Im folgenden Beispiel wird der Umsatz pro Kunde in für Menschen lesbare Stufen unterteilt.
ifelse(salesPerCustomer < 1000, “VERY_LOW”, salesPerCustomer < 10000, “LOW”, salesPerCustomer < 100000, “MEDIUM”, “HIGH”)
Das folgende Beispiel verwendet AND, OR und NOT, um mehrere Ausdrücke mit konditionalen Operatoren zu vergleichen und Top-Kunden, die mehr als 10 Bestellungen getätigt haben und NICHT in Washington oder Oregon angesiedelt sind, eine bestimmte Werbung zukommen zu lassen. Wenn keine Werte zurückgegeben werden, wird der Wert 'n/a'
verwendet.
ifelse(( (NOT (State = 'WA' OR State = 'OR')) AND Orders > 10), 'Special Promotion XYZ', 'n/a')
In den folgenden Beispielen wird nur ODER verwendet, um eine neue Spalte zu generieren, die den Namen des jeweiligen Kontinents enthält, der country
entspricht.
ifelse(country = "United States" OR country = "Canada", "North America", country = "China" OR country = "India" OR country = "Japan", "Asia", "Others")
Das vorherige Beispiel kann vereinfacht werden, wie im nächsten Beispiel gezeigt. Im folgenden Beispiel wird ifelse
undin verwendet, um einen Wert in einer neuen Spalte für jede Zeile zu erstellen, in der sich der getestete Wert in einer literalen Liste befindet. Sie könnten auch ifelse
mit notIn verwenden.
ifelse(in(country,["United States", "Canada"]), "North America", in(country,["China","Japan","India"]),"Asia","Others")
Autoren können eine literale Liste in einem mehrwertigen Parameter speichern und sie in den in- oder notIn-Funktionen verwenden. Das folgende Beispiel entspricht dem vorherigen Beispiel, mit der Ausnahme, dass die literalen Listen in zwei mehrwertigen Parametern gespeichert werden.
ifelse(in(country,${NorthAmericaCountryParam}), "North America", in(country,${AsiaCountryParam}),"Asia", "Others")
Im folgenden Beispiel wird eine Gruppe basierend auf dem Gesamtumsatz zu einem Verkaufsdatensatz zugewiesen. Die Struktur der einzelnen if-then
-Phrasen ahmt das Verhalten von between nach, einem Schlüsselwort, das derzeit in berechneten Feldausdrücken nicht funktioniert. Das Ergebnis des Vergleichs salesTotal >= 0 AND salesTotal < 500
gibt beispielsweise dieselben Werte zurück wie der SQL-Vergleich salesTotal between 0 and 499
.
ifelse(salesTotal >= 0 AND salesTotal < 500, 'Group 1', salesTotal >= 500 AND salesTotal < 1000, 'Group 2', 'Group 3')
Im folgenden Beispiel wird geprüft, ob ein NULL-Wert vorliegt, wobei coalesce
verwendet wird, um den ersten Wert zurückzugeben, der nicht NULL ist. Anstatt sich die Bedeutung einer NULL in einem Datumsfeld merken zu müssen, können Sie stattdessen eine lesbare Beschreibung verwenden. Wenn das Verbindungsdatum NULL ist, gibt das Beispiel das Sperrdatum zurück, es sei denn, beide Werte sind NULL. Dann gibt coalesce(DiscoDate, SuspendDate, '12/31/2491')
'12/31/2491'
zurück. Der Rückgabewert muss mit den anderen Datentypen übereinstimmen. Dieses Datum mag wie ein ungewöhnlicher Wert erscheinen, aber ein Datum im 25. Jahrhundert simuliert vernünftigerweise das „Ende der Zeit“, definiert als das höchste Datum in einem Data Mart.
ifelse ( (coalesce(DiscoDate, SuspendDate, '12/31/2491') = '12/31/2491'), 'Active subscriber', 'Inactive subscriber')
Das Folgende zeigt ein komplexeres Beispiel in einem besser lesbaren Format, nur um zu zeigen, dass Sie Ihren gesamten Code nicht in eine lange Zeile komprimieren müssen. Dieses Beispiel ermöglicht mehrere Vergleiche des Werts eines Umfrageergebnisses. Es verarbeitet potenzielle NULL-Werte für dieses Feld und kategorisiert zwei zulässige Bereiche. Es kennzeichnet auch einen Bereich, der mehr Tests erfordert, und einen anderen, der ungültig ist (außerhalb des zulässigen Bereichs). Für alle verbleibenden Werte wird die else
-Bedingung angewendet, und die Zeile wird so gekennzeichnet, dass drei Jahre nach dem Datum in dieser Zeile ein erneuter Test erforderlich ist.
ifelse
(
isNull({SurveyResult}), 'Untested',
{SurveyResult}=1, 'Range 1',
{SurveyResult}=2, 'Range 2',
{SurveyResult}=3, 'Need more testing',
{SurveyResult}=99, 'Out of Range',
concat
(
'Retest by ',
toString
(
addDateTime(3, "YYYY", {Date})
)
)
)
Im folgenden Beispiel wird einer Gruppe von Bundesstaaten ein „manuell“ erstellter Regionsname zugewiesen. Außerdem werden Leerzeichen und Kommentare in /* */
gepackt verwendet, um die Verwaltung des Codes zu vereinfachen.
ifelse
( /* NE REGION*/
locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0,
'Northeast',
/* SE REGION*/
locate('Georgia, Alabama, South Carolina, Louisiana',{State}) > 0,
'Southeast',
'Other Region'
)
Die Logik für die Kennzeichnung von Regionen gliedert sich wie folgt:
-
Wir listen die Staaten auf, die wir für jede Region benötigen, und setzen jede Liste in Anführungszeichen, sodass jede Liste zu einer Zeichenfolge wie der Folgenden wird:
-
'New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire'
-
'Georgia, Alabama, South Carolina, Louisiana'
-
Sie können weitere Sets hinzufügen oder Länder, Städte, Provinzen oder What3Words verwenden, wenn Sie möchten.
-
-
Wir fragen, ob der Wert für
State
(für jede Zeile) in der Liste gefunden wurde, indem wir dielocate
-Funktion verwenden, um einen Wert ungleich Null zurückzugeben, wenn das Bundesland in der Liste wie im Folgenden gefunden wird.locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) and locate('Georgia, Alabama, South Carolina, Louisiana',{State})
-
Die
locate
-Funktion gibt eine Zahl statt einesTRUE
oderFALSE
zurück, aberifelse
benötigt aber den booleschen WertTRUE
/FALSE
. Um dies zu umgehen, können wir das Ergebnis vonlocate
mit einer Zahl vergleichen. Wenn der Status in der Liste enthalten ist, ist der Rückgabewert größer als Null.-
Fragen Sie, ob der Staat vorhanden ist.
locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0
-
Wenn es die Region gibt, kennzeichnen Sie sie als die spezifische Region, in diesem Fall als Nordostregion.
/*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast',
-
-
Da wir Bundesstaaten haben, die nicht in einer Liste enthalten sind, und weil
ifelse
einen einzigenelse
-Ausdruck erfordert, stellen wir'Other Region'
als Bezeichnung für die übrigen Bundesstaaten zur Verfügung./*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast', /*The else expression:*/ 'Other Region'
-
Wir packen das alles in die
ifelse( )
-Funktion, um die endgültige Version zu erhalten. Im folgenden Beispiel werden die Bundesstaaten der Region Südosten, die im Original enthalten waren, weggelassen. Sie können sie anstelle des
-Tags wieder hinzufügen.<insert more regions here>
Wenn Sie weitere Regionen hinzufügen möchten, können Sie weitere Kopien dieser beiden Zeilen erstellen und die Liste der Bundesstaaten an Ihren Zweck anpassen. Sie können den Namen der Region so ändern, dass er zu Ihnen passt, und den Feldnamen von
State
beliebig nach Bedarf ändern.ifelse ( /*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast', /*
<insert more regions here>
*/ /*The else expression:*/ 'Other Region' )Anmerkung
Es gibt andere Möglichkeiten, den ersten Vergleich für den if-Ausdruck durchzuführen. Nehmen wir zum Beispiel an, Sie stellen die Frage „Welche Staaten fehlen in dieser Liste nicht?“ statt „Welche Staaten stehen auf der Liste?“ Wenn Sie dies tun, könnten Sie es anders formulieren. Sie könnten die Locate-Anweisung mit Null vergleichen, um Werte zu finden, die in der Liste fehlen, und sie dann mit dem NOT-Operator folgendermaßen als „nicht fehlend“ klassifizieren.
/*The if expression:*/ NOT (locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) = 0),
Beide Versionen sind korrekt. Die Version, die Sie wählen, sollte für Sie und Ihr Team am sinnvollsten sein, sodass Sie sie problemlos verwalten können. Wenn alle Optionen gleich erscheinen, wählen Sie die einfachste.