Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Ifelse
ifelse
évalue un ensemble de paires d'expressions if, then et renvoie la valeur de l'argument then pour le premier argument if ayant la valeur true. Si aucun des arguments if n'a la valeur true, la valeur de l'argument else est renvoyée.
Syntaxe
ifelse(
if-expression-1
,then-expression-1
[,if-expression-n
,then-expression-n
...],else-expression
)
Arguments
L'opérateur ifelse
nécessite une ou plusieurs paires d'expressions if,then et requiert exactement une expression pour l'argument else.
- if-expression
-
Expression à évaluer comme ayant ou non la valeur true. Il peut s'agir d'un nom de champ comme
address1
, d'une valeur littérale comme'Unknown'
ou d'une autre fonction commetoString(salesAmount)
. Par exemple :isNotNull(FieldName)
.Si vous utilisez plusieurs AND opérateurs ou dans l'
if
argument, placez les instructions entre parenthèses pour identifier l'ordre de traitement. Par exemple, l'argumentif
suivant renvoie des enregistrements avec un mois 1, 2 ou 5 et l'année 2000.ifelse((month = 5 OR month < 3) AND year = 2000, 'yes', 'no')
L'argument
if
suivant utilise les mêmes opérateurs, mais renvoie des enregistrements avec un mois 5 et n'importe quelle année, ou avec un mois 1 ou 2 et l'année 2000.ifelse(month = 5 OR (month < 3 AND year = 2000), 'yes', 'no')
- then-expression
-
L'expression à renvoyer si aucun des arguments if n'a la valeur « true ». Il peut s'agir d'un nom de champ comme
address1
, d'une valeur littérale comme'Unknown'
ou d'un appel à une autre fonction. L'expression doit avoir le même type de données que les autres argumentsthen
et l'argumentelse
. - else-expression
-
Expression à renvoyer si aucun des arguments if n'a la valeur true. Il peut s'agir d'un nom de champ comme
address1
, d'une valeur littérale comme'Unknown'
ou d'une autre fonction commetoString(salesAmount)
. L'expression doit avoir le même type de données que tous les argumentsthen
.
Type de retour
ifelse
renvoie une valeur du même type de données que les valeurs de then-expression. Toutes les données renvoyées par les expressions then et else doivent être du même type de données ou être converties dans le même type de données.
Exemples
L'exemple suivant génère une colonne d'alias pour le champ country
.
ifelse(country = "United States", "US", country = "China", "CN", country = "India", "IN", "Others")
Pour de tels cas d'utilisation, il est recommandé d'évaluer chaque valeur d'un champ par rapport à une liste de littéraux et de renvoyer le résultat correspondant à la première valeur correspondante, ce qui simplifie votre travail. L'exemple précédent peut être réécrit sous la forme suivante en utilisant switch :
switch(country,"United States","US","China","CN","India","IN","Others")
L'exemple suivant classe les ventes par client en niveaux lisibles par l'homme.
ifelse(salesPerCustomer < 1000, “VERY_LOW”, salesPerCustomer < 10000, “LOW”, salesPerCustomer < 100000, “MEDIUM”, “HIGH”)
L'exemple suivant utiliseAND, OR, et NOT pour comparer plusieurs expressions à l'aide d'opérateurs conditionnels pour identifier les meilleurs clients NOT de Washington ou de l'Oregon bénéficiant d'une promotion spéciale, ayant passé plus de 10 commandes. Si aucune valeur n'est retournée, la valeur 'n/a'
est utilisée.
ifelse(( (NOT (State = 'WA' OR State = 'OR')) AND Orders > 10), 'Special Promotion XYZ', 'n/a')
Les exemples suivants utilisent uniquement OR pour générer une nouvelle colonne contenant le nom du continent correspondant à chaque country
.
ifelse(country = "United States" OR country = "Canada", "North America", country = "China" OR country = "India" OR country = "Japan", "Asia", "Others")
L'exemple précédent peut être simplifié comme le montre l'exemple suivant. L'exemple suivant utilise ifelse
et in pour créer une valeur dans une nouvelle colonne pour toute ligne où la valeur testée se trouve dans une liste littérale. Vous pouvez également utiliser ifelse
avec notIn.
ifelse(in(country,["United States", "Canada"]), "North America", in(country,["China","Japan","India"]),"Asia","Others")
Les auteurs peuvent enregistrer une liste littérale dans un paramètre multivaleur et l'utiliser dans les fonctions in ou notIn. L'exemple suivant est un équivalent de l'exemple précédent, sauf que les listes littérales sont stockées dans deux paramètres multivaleur.
ifelse(in(country,${NorthAmericaCountryParam}), "North America", in(country,${AsiaCountryParam}),"Asia", "Others")
L'exemple suivant attribue un groupe à un enregistrement de vente basé sur le total des ventes. La structure de chaque phrase if-then
imite le comportement de between, un mot-clé qui ne fonctionne pas actuellement dans les expressions de champs calculés. Par exemple, le résultat de la comparaison salesTotal >= 0 AND salesTotal < 500
renvoie les mêmes valeurs que la SQL comparaisonsalesTotal between 0 and 499
.
ifelse(salesTotal >= 0 AND salesTotal < 500, 'Group 1', salesTotal >= 500 AND salesTotal < 1000, 'Group 2', 'Group 3')
L'exemple suivant teste une NULL valeur en l'utilisant coalesce
pour renvoyer la première NULL valeur non-. Au lieu d'avoir à vous souvenir de la signification de a NULL dans un champ de date, vous pouvez utiliser une description lisible à la place. Si la date de déconnexion estNULL, l'exemple renvoie la date de suspension, sauf si les deux le sontNULL. Dans ce cas, coalesce(DiscoDate, SuspendDate, '12/31/2491')
renvoie '12/31/2491'
. La valeur de retour doit correspondre aux autres types de données. Cette date peut sembler une valeur inhabituelle, mais une date du 25e siècle simule raisonnablement la « fin des temps », définie comme la date la plus élevée dans un datamart.
ifelse ( (coalesce(DiscoDate, SuspendDate, '12/31/2491') = '12/31/2491'), 'Active subscriber', 'Inactive subscriber')
Le texte suivant présente un exemple plus complexe dans un format plus lisible, afin de montrer qu'il n'est pas nécessaire de comprimer votre code en une seule longue ligne. Cet exemple prévoit des comparaisons multiples de la valeur d'un résultat d'enquête. Il gère NULL les valeurs potentielles pour ce champ et classe deux plages acceptables. Il identifie également une plage qui nécessite davantage de tests et une autre qui n'est pas valide (hors plage). Pour toutes les valeurs restantes, il applique la condition else
et indique que la ligne doit faire l'objet d'un nouveau test trois ans après la date qui y figure.
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'exemple suivant attribue un nom de région créé « manuellement » à un groupe d'états. Il utilise également des espaces et des commentaires, enveloppés dans /* */
, pour faciliter la maintenance du code.
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 logique du marquage des régions se décompose comme suit :
-
Nous dressons la liste des états que nous voulons pour chaque région, en plaçant chaque liste entre guillemets pour en faire une chaîne de caractères, comme suit :
-
'New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire'
-
'Georgia, Alabama, South Carolina, Louisiana'
-
Vous pouvez ajouter d'autres ensembles, ou utiliser des pays, des villes, des provinces ou des What3Words si vous le voulez.
-
-
Nous demandons si la valeur de
State
(pour chaque ligne) se trouve dans la liste, en utilisant la fonctionlocate
pour renvoyer une valeur non nulle si l'état se trouve dans la liste, comme suit.locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) and locate('Georgia, Alabama, South Carolina, Louisiana',{State})
-
La fonction
locate
renvoie un nombre au lieu deTRUE
ouFALSE
, maisifelse
nécessite la valeur booléenneTRUE
/FALSE
. Pour contourner ce problème, nous pouvons comparer le résultat delocate
à un nombre. Si l'état est dans la liste, la valeur de retour est supérieure à zéro.-
Demandez si l'état est présent.
locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0
-
S'il est présent dans la région, indiquez qu'il s'agit d'une région spécifique, dans ce cas la région du Nord-Est.
/*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast',
-
-
Parce que nous avons des états qui ne sont pas dans une liste, et parce que
ifelse
nécessite une seule expressionelse
, nous fournissons'Other Region'
comme étiquette pour les états restants./*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'
-
Nous enveloppons tout cela dans la fonction
ifelse( )
pour obtenir la version finale. L'exemple suivant ne tient pas compte des états de la région du Sud-Est qui figuraient dans l'original. Vous pouvez les rajouter à la place du
étiquette.<insert more regions here>
Si vous voulez ajouter d'autres régions, vous pouvez construire d'autres copies de ces deux lignes et modifier la liste des états en fonction de vos besoins. Vous pouvez changer le nom de la région pour quelque chose qui vous convient, et changer le nom du champ
State
pour tout ce dont vous avez besoin.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' )Note
Il existe d'autres façons d'effectuer la comparaison initiale de l'expression if. Par exemple, supposons que vous posiez la question « Quels sont les États qui ne manquent pas dans cette liste ? » plutôt que « Quels sont les États qui figurent sur la liste ? » Dans ce cas, vous pouvez la formuler différemment. Vous pouvez comparer l'instruction de localisation à zéro pour trouver les valeurs absentes de la liste, puis utiliser l'NOTopérateur pour les classer comme « non manquantes », comme suit.
/*The if expression:*/ NOT (locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) = 0),
Les deux versions sont correctes. La version que vous choisissez doit être la plus logique pour vous et votre équipe, afin que vous puissiez la maintenir facilement. Si toutes les options semblent équivalentes, choisissez la plus simple.