Colonnes calculées basées sur des conditions

Lorsque vous calculez des colonnes, vous pouvez souhaiter qu'une expression renvoie différents résultats selon que certaines conditions sont remplies ou non. Les conditions peuvent être paramétrées dans des expressions à l'aide des fonctions logiques If() ouCase().

If()

Lorsque vous utilisez la fonction If(), vous spécifiez une condition qui est soit vraie ou fausse, suivie par ce qu'il faut retourner si la condition est vraie et ce qu'il faut retourner si elle est fausse.

Exemples

L'expression

If(([Amount]<10),"low","high")

signifie que si une valeur de ligne dans la colonne « Montant » est inférieure à 10, alors la valeur « Bas » est retournée comme résultat, mais si la valeur est égale ou supérieure à 10, alors la valeur « Élevé » est retournée.

Ceci est illustré ci-dessous :



En d'autres termes, la fonction If() divise les lignes en deux groupes : un groupe composé des lignes pour lesquelles la condition spécifiée est vraie (retournant « Bas » comme résultat) et l'autre groupe constitué des lignes pour lesquelles la condition spécifiée est fausse (retournant « Élevé » comme résultat).

Remarque :

Si les valeurs à renvoyer sont des valeurs agrégées, les deux groupes seront gérés séparément. Ceci est illustré dans le tableau ci-dessous par l'expression ajoutée

If(([Amount]<10),Avg([Amount]),Avg([Amount]))

qui contient les agrégations moyennes. Dans ce cas, la même agrégation est spécifiée pour les deux groupes, mais des agrégations différentes peuvent être utilisées.



Pour les valeurs de lignes inférieures à 10, c'est-à-dire le groupe « Vrai », la moyenne 6 est retournée ((5+7)/2) et, pour le groupe « Faux », la moyenne 13 est retournée ((14+10+15)/3).

La fonctionif() peut également être utilisée en combinaison avec and ou or. À titre d'exemple, l'expression

If(([Customer age]<20) and ([Gender]="Female"),"girl","other")

renvoie la colonne calculée ajoutée ci-dessous :



Case()

Si vous souhaitez écrire une expression dont les résultats de la condition ne sont pas limités à vrai et faux, vous pouvez utiliser la fonctioncase().Case() peut être utilisée de deux formes différentes, décrites dans les exemples suivants.

Exemple 1

Supposons que les prix des livres et des vidéos ci-dessous ont été réduits respectivement de 10 % et 50 % et que la liste des prix a besoin d'une mise à jour.



Comme la réduction diffère selon le type de produit, une expressioncase() est utilisée pour calculer les nouveaux prix :

case [Type]
when "Book" then [Price]*0.9
when "Video" then [Price]*0.5
else [Price]
end



Ici,case() compare simplement le « Type » avec chacune des optionswhen de l'expression.

Exemple 2

Dans le deuxième exemple,case() est utilisée pour évaluer les résultats des tests pour un certain nombre d'étudiants. Il y a trois niveaux d'évaluation : Échec (total inférieur à 100), Réussi et Excellent (total de 160 ou plus).



Case() évalue dans cet exemple les conditions indépendamment pour chacune des optionswhen :

case  
when ([Test A] + [Test B])<100 then "Failed" 
when ([Test A] + [Test B])>=160 then "Excellent"
else "Passed"
end

De cette façon, il est possible de mettre en place des conditions plus complexes que dans l'exemple 1.

La colonne calculée obtenue est représentée ci-dessous :



Remarque : Dans les deux formulairescase(), plusieurs conditionswhen ou then peuvent être incluses dans l'expression.

Définir l'ordre d'exécution des conditions

L'exécution des différentes parties des expressionscase() s'effectue de haut en bas. Voir l'expression ci-dessous et la colonne qui en résulte :

case
when [Number]<40 then "yes"
when [Number]<70 then "no"
else "x"
end



C'est-à-dire que les nombres inférieurs à 40 définis sur « Oui » et qui ne changeront pas. La partie suivante de l'expression, définir les nombres inférieurs à 70 sur « non », affecte uniquement les lignes restantes.