Ifelse - Amazon QuickSight

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Ifelse

ifelse valuta un set di se, gli abbinamenti delle espressioni poi e restituisce il valore dell'argomento poi per il primo argomento se che valuta come true. Se nessuno degli argomenti se viene valutato come true, viene restituito il valore dell'argomento altro.

Sintassi

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

Argomenti

ifelse richiede uno o più abbinamenti di espressioni if,then e una espressione per l'argomento else.

espressione if

L'espressione da valutare come true o meno. Può trattarsi di un nome di campo come address1, un valore letterale come 'Unknown' o un'altra funzione come toString(salesAmount). Un esempio è isNotNull(FieldName).

Se utilizzi più operatori AND AND nell'ifargomento, racchiudi le istruzioni tra parentesi per identificare l'ordine di elaborazione. Ad esempio, il seguente argomento if restituisce record con un mese 1, 2 o 5 e un anno 2000.

ifelse((month = 5 OR month < 3) AND year = 2000, 'yes', 'no')

Il successivo argomento if utilizza gli stessi operatori, ma restituisce record con un mese 5 e un anno qualsiasi oppure con un mese 1 o 2 e un anno 2000.

ifelse(month = 5 OR (month < 3 AND year = 2000), 'yes', 'no')
then-expression

L'espressione da restituire se il relativo l'argomento se viene valutato come true. Può trattarsi di un nome di campo come address1, un valore letterale come 'Unknown' o una chiamata a un'altra funzione. L'espressione deve avere lo stesso tipo di dati degli altri argomenti then e dell'argomento else.

else-expression

L'espressione da restituire se nessuno degli argomenti se viene valutato come true. Può trattarsi di un nome di campo come address1, un valore letterale come 'Unknown' o un'altra funzione come toString(salesAmount). L'espressione deve avere lo stesso tipo di dati di tutti gli argomenti then.

Tipo restituito

ifelse restituisce un valore dello stesso tipo di dati dei valori in then-expression. Tutti i dati restituiti da then e else devono essere dello stesso tipo o essere convertiti nello stesso tipo.

Esempi

L'esempio seguente genera una colonna di alias per il campo country.

ifelse(country = "United States", "US", country = "China", "CN", country = "India", "IN", "Others")

In questi casi d'uso che valutano ogni valore di un campo rispetto a un elenco di valori letterali e restituiscono il risultato corrispondente al primo valore corrispondente, si consiglia di utilizzare la funzione switch per semplificare il lavoro. L'esempio precedente può essere riscritto nella seguente dichiarazione utilizzando switch:

switch(country,"United States","US","China","CN","India","IN","Others")

L'esempio seguente classifica le vendite per cliente in livelli leggibili dall'uomo.

ifelse(salesPerCustomer < 1000, “VERY_LOW”, salesPerCustomer < 10000, “LOW”, salesPerCustomer < 100000, “MEDIUM”, “HIGH”)

L'esempio seguente utilizza AND OR e NOT per confrontare più espressioni utilizzando operatori condizionali per etichettare i migliori clienti NOT di Washington o Oregon con una promozione speciale, che hanno effettuato più di 10 ordini. Se non viene restituito alcun valore, viene utilizzato il valore 'n/a'.

ifelse(( (NOT (State = 'WA' OR State = 'OR')) AND Orders > 10), 'Special Promotion XYZ', 'n/a')

Gli esempi seguenti utilizzano solo OR per generare una nuova colonna che contiene il nome del continente corrispondente a ciascun country.

ifelse(country = "United States" OR country = "Canada", "North America", country = "China" OR country = "India" OR country = "Japan", "Asia", "Others")

L'esempio precedente può essere semplificato come illustrato nell'esempio successivo. L'esempio seguente utilizza ifelse e in per creare un valore in una nuova colonna per ogni riga in cui il valore testato si trova in un elenco di letterali. Puoi usare ifelse anche con notIn.

ifelse(in(country,["United States", "Canada"]), "North America", in(country,["China","Japan","India"]),"Asia","Others")

Gli autori possono salvare un elenco di letterali in un parametro multi-valore e utilizzarlo nelle funzioni in o notIn. L'esempio seguente è un equivalente dell'esempio precedente, tranne per il fatto che gli elenchi di letterali sono memorizzati in due parametri multi-valore.

ifelse(in(country,${NorthAmericaCountryParam}), "North America", in(country,${AsiaCountryParam}),"Asia", "Others")

L'esempio seguente assegna un gruppo a un record delle vendite basato sul totale delle vendite. La struttura di ogni frase if-then imita il comportamento dell'operatore tra, una parola chiave che attualmente non funziona nelle espressioni di campi calcolati. Ad esempio, il risultato del confronto salesTotal >= 0 AND salesTotal < 500 restituisce gli stessi valori del SQL confronto. salesTotal between 0 and 499

ifelse(salesTotal >= 0 AND salesTotal < 500, 'Group 1', salesTotal >= 500 AND salesTotal < 1000, 'Group 2', 'Group 3')

L'esempio seguente verifica la presenza di un NULL valore utilizzando coalesce per restituire il primo non NULL valore. Invece di dover ricordare il significato di a NULL in un campo di data, è possibile utilizzare una descrizione leggibile. Se la data di disconnessione èNULL, l'esempio restituisce la data di sospensione, a meno che entrambe non lo siano. NULL Quindi coalesce(DiscoDate, SuspendDate, '12/31/2491') restituisce '12/31/2491'. Il valore restituito deve corrispondere agli altri tipi di dati. Questa data potrebbe sembrare un valore insolito, ma una data del 25° secolo simula ragionevolmente la "fine dei tempi", definita come la data più alta in un data mart.

ifelse ( (coalesce(DiscoDate, SuspendDate, '12/31/2491') = '12/31/2491'), 'Active subscriber', 'Inactive subscriber')

Di seguito viene illustrato un esempio più complesso in un formato più leggibile, solo per dimostrare che non è necessario comprimere tutto il codice in un'unica lunga riga. Questo esempio fornisce confronti multipli del valore di un risultato dell'indagine. Gestisce NULL i valori potenziali per questo campo e classifica due intervalli accettabili. Inoltre etichetta un intervallo che richiede più test e un altro non valido (fuori intervallo). Per tutti i valori rimanenti, applica la condizione else ed etichetta la riga come se fosse necessario ripetere il test tre anni dopo la data in quella riga.

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}) ) ) )

L'esempio seguente assegna un nome di regione creato "manualmente" a un gruppo di stati. Utilizza inoltre spaziatura e commenti, integrati /* */, per semplificare la manutenzione del codice.

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' )

La logica per l'etichettatura delle regioni si suddivide come segue:

  1. Elenchiamo gli stati che vogliamo per ogni regione, racchiudendo ogni elenco tra virgolette per trasformare ogni elenco in una stringa, come riportato di seguito:

    • 'New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire'

    • 'Georgia, Alabama, South Carolina, Louisiana'

    • Puoi aggiungere altri set o utilizzare paesi, città, province o What3Words, se lo desideri.

  2. Chiediamo se il valore per State (per ogni riga) si trova nell'elenco, utilizzando la funzione locate per restituire un valore diverso da zero se lo stato si trova nell'elenco, come riportato di seguito.

    locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) and locate('Georgia, Alabama, South Carolina, Louisiana',{State})
  3. La funzione locate restituisce un numero anziché un TRUE o FALSE, ma ifelse richiede il valore booleano TRUE/FALSE. Per ovviare a questo problema, possiamo confrontare il risultato di locate con un numero. Se lo stato è presente nell'elenco, il valore restituito è maggiore di zero.

    1. Chiedi se lo stato è presente.

      locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0
    2. Se è presente la regione, etichettala come regione specifica, in questo caso regione nord-orientale.

      /*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast',
  4. Poiché abbiamo stati che non sono in un elenco e poiché ifelse richiede una singola espressione else, forniamo 'Other Region' come etichetta per gli stati rimanenti.

    /*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'
  5. Tutto questo lo racchiudiamo nella funzione ifelse( ) per ottenere la versione finale. L'esempio seguente esclude gli stati della regione sud-orientale presenti nell'originale. Puoi aggiungerli nuovamente al posto di <insert more regions here> etichetta.

    Se desideri aggiungere altre regioni, puoi creare più copie di queste due righe e modificare l'elenco degli stati in base alle tue esigenze. Puoi cambiare il nome della regione in base alle tue esigenze e cambiare il nome del campo da State in qualsiasi cosa ti serva.

    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' )
    Nota

    Esistono altri modi per eseguire il confronto iniziale per l'espressione if. Ad esempio, supponiamo di porre la domanda "Quali stati non mancano in questo elenco?" anziché "Quali stati sono presenti nell'elenco?" Se lo fai, potresti formularla in modo diverso. È possibile confrontare l'istruzione locate con zero per trovare i valori mancanti nell'elenco e quindi utilizzare l'NOToperatore per classificarli come «non mancanti», come segue.

    /*The if expression:*/ NOT (locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) = 0),

    Entrambe le versioni sono corrette. La versione che scegli dovrebbe avere più senso per te e per il tuo team, in modo da poterla gestire facilmente. Se tutte le opzioni sembrano uguali, scegli la più semplice.