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).
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:
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.