

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
<a name="ifelse-function"></a>

`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
<a name="ifelse-function-syntax"></a>

```
ifelse(if-expression-1, then-expression-1 [, if-expression-n, then-expression-n ...], else-expression)
```

## Argumente
<a name="ifelse-function-arguments"></a>

`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 wie `toString(salesAmount)` handeln. Ein Beispiel ist `isNotNull(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 folgende `if`-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 anderen `then`-Argumente und das Argument `else` 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 wie `toString(salesAmount)` handeln. Der Ausdruck muss vom gleichen Datentyp wie alle `then`-Argumente sein. 

## Rückgabetyp
<a name="ifelse-function-return-type"></a>

`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
<a name="ifelse-function-example"></a>

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 [https://docs.aws.amazon.com/quicksight/latest/user/switch-function.html](https://docs.aws.amazon.com/quicksight/latest/user/switch-function.html) 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` und[https://docs.aws.amazon.com/quicksight/latest/user/in-function.html](https://docs.aws.amazon.com/quicksight/latest/user/in-function.html) 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 [https://docs.aws.amazon.com/quicksight/latest/user/notIn-function.html](https://docs.aws.amazon.com/quicksight/latest/user/notIn-function.html) 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 [https://docs.aws.amazon.com/quicksight/latest/user/in-function.html](https://docs.aws.amazon.com/quicksight/latest/user/in-function.html)- oder [https://docs.aws.amazon.com/quicksight/latest/user/notIn-function.html](https://docs.aws.amazon.com/quicksight/latest/user/notIn-function.html)-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:

1. 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. 

1. Wir fragen, ob der Wert für `State` (für jede Zeile) in der Liste gefunden wurde, indem wir die `locate`-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})
   ```

1. Die `locate`-Funktion gibt eine Zahl statt eines `TRUE` oder `FALSE` zurück, aber `ifelse` benötigt aber den booleschen Wert `TRUE`/`FALSE`. Um dies zu umgehen, können wir das Ergebnis von `locate` mit einer Zahl vergleichen. Wenn der Status in der Liste enthalten ist, ist der Rückgabewert größer als Null.

   1. Fragen Sie, ob der Staat vorhanden ist.

      ```
      locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0
      ```

   1. 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',
      ```

1. Da wir Bundesstaaten haben, die nicht in einer Liste enthalten sind, und weil `ifelse` einen einzigen `else`-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'
   ```

1. 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 *`<insert more regions here>`*-Tags wieder hinzufügen. 

   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.