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 cometoString(salesAmount)
. Un esempio èisNotNull(FieldName)
.Se utilizzi più operatori AND AND nell'
if
argomento, racchiudi le istruzioni tra parentesi per identificare l'ordine di elaborazione. Ad esempio, il seguente argomentoif
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 argomentithen
e dell'argomentoelse
. - 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 cometoString(salesAmount)
. L'espressione deve avere lo stesso tipo di dati di tutti gli argomentithen
.
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:
-
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.
-
-
Chiediamo se il valore per
State
(per ogni riga) si trova nell'elenco, utilizzando la funzionelocate
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})
-
La funzione
locate
restituisce un numero anziché unTRUE
oFALSE
, maifelse
richiede il valore booleanoTRUE
/FALSE
. Per ovviare a questo problema, possiamo confrontare il risultato dilocate
con un numero. Se lo stato è presente nell'elenco, il valore restituito è maggiore di zero.-
Chiedi se lo stato è presente.
locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0
-
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',
-
-
Poiché abbiamo stati che non sono in un elenco e poiché
ifelse
richiede una singola espressioneelse
, 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'
-
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
etichetta.<insert more regions here>
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.