Columnas calculadas basadas en condiciones

Cuando se calculan las columnas, es posible que desee diferentes resultados de una expresión dependiendo de si se cumplen ciertas condiciones. Las condiciones se pueden configurar en las expresiones mediante las funciones lógicas If() o Case().

If()

Cuando se utiliza la función If(), se especifica una condición verdadera o falsa, seguida de lo que se debe devolver si la condición es verdadera y lo que se debe devolver si es falsa.

Ejemplos

La expresión

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

significa indica que, si un valor de fila en la columna "Cantidad" es inferior a 10, se devuelve el valor "Poco" como resultado; pero si el valor es 10 o superior, se devuelve "Mucho".

Esto se ilustra a continuación:



En otras palabras, la función If() divide las filas en dos grupos: un grupo formado por las filas para las que la condición especificada es verdadera (que devuelven "Poco" como resultado), y otro grupo formado por las filas para las que la condición especificada es falsa (que devuelven "Mucho" como resultado).

Nota:

Si los valores que se devuelven son valores agregados, los dos grupos se gestionan por separado. Esto se ejemplifica en la siguiente tabla mediante la expresión añadida

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

que contiene las agregaciones promedio. En este caso, se especifica la misma agregación para ambos grupos, pero se pueden utilizar agregaciones diferentes.



Para los valores de fila inferiores a 10, que es el grupo "verdadero", se devuelve el promedio 6 [(5 + 7)/2], y para el grupo "falso", el promedio 13 [(14 + 10 + 15)/3].

La función if() también se puede utilizar junto con and u or. Como ejemplo, la expresión

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

da como resultado la siguiente columna calculada agregada:



Case()

Si desea escribir una expresión cuyos resultados de condición no se limiten a verdadero y falso, puede utilizar la función case(). Case() se puede utilizar de dos formas diferentes, ambas descritas en los siguientes ejemplos de uso.

Ejemplo 1

Supongamos que los precios de los libros y los vídeos a continuación se han rebajado un 10 % y un 50 % respectivamente, y que la lista de precios necesita actualizarse.



Debido a que la rebaja varía en función del tipo de producto, se utiliza una expresión case() para calcular los nuevos precios:

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



Aquí, case() solo comprueba el "Tipo"en cada una de las opciones when de la expresión.

Ejemplo 2

En el segundo ejemplo, case() se utiliza para evaluar los resultados de las pruebas de un número de estudiantes. Hay tres niveles de evaluación: Suspenso (total de menos de 100), Aprobado y Excelente (total de 160 o más).



En este ejemplo, Case() evalúa las condiciones de forma independiente para cada una de las opciones when:

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

De esta manera, se pueden implementar condiciones más complejas que en el ejemplo 1.

A continuación, se muestra la columna calculada resultante:



Nota: En las dos formas de case(), se pueden incluir varias condiciones when/then en la expresión.

Orden de ejecución de las condiciones

La ejecución de las diferentes partes de las expresiones case() se hace en orden descendente. Consulte la siguiente expresión y la columna resultante:

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



Es decir, los números inferiores a 40 se establecen como "Sí" y no cambian. La siguiente parte de la expresión establece los números inferiores a 70 como "No" y solo afecta a las filas restantes.