Una de las herramientas más potentes que se tienen a nivel de análisis de datos, es la capacidad de establecer sentencias condicionales. Desde un punto de vista de desarrollo, es común tener que aplicar alguna regla que nos permita evaluar distintos escenarios.
Aquí vamos a centrarnos en el uso de la función lógica IF.
Estructura
La función IF corresponde a lo siguiente.
IF( <TestLógico>, <ResultadoVerdadero> [, <ResultadoFalso>] )
Veámosla en acción a partir de una columna calculada.
Puede leerse de la siguiente manera:
Si el género es igual a rock, tendremos que revisar el catálogo. De lo contrario, todo se encuentra en orden.
Omitiendo el parámetro falso
Como en muchas funciones en DAX, no es obligatorio utilizar todos sus parámetros.
Así se vería reflejado el resultado si lo omitimos.
Ejecución desde una medida
En algunos escenarios; recordando que en DAX todo es un constante depende. Un pequeño cambio en la sintaxis puede permitirnos aplicar la misma lógica en una medida.
Sentencia IF anidada
Un IF anidado significa ampliar la lógica para que tome en cuenta otras condiciones. En este ejemplo, además de corresponder al género ranchera, deberá ser menor al año 1950.
Leemos:
Si el género es ranchera y si el año es menor a 1950; la vamos a escuchar. Si es ranchera, pero no es menor a 1950 la dejamos para luego de un rato. Pero de no cumplirse ambas condiciones, la dejaremos para otra oportunidad.
Importante: el orden de múltiples sentencias anidadas tendrá impacto en el resultado. Hay que tener en cuenta el orden para evitar que se vean solapadas o sobre escritas generando resultados incorrectos.
Sustituyendo IF anidados con SWITCH + TRUE
Es posible simplificar la sintaxis cuando se requiere evaluar distintos criterios uniendo las funciones SWITCH y TRUE.
También puede utilizarse en sintaxis que involucren más de un criterio de evaluación.
Posibles errores: si combinas un resultado que entregue un tipo de datos diferente a la evaluación -siendo en este caso todos textos- dentro de una columna calculada generará un error.
Mientras que, una medida no se encuentra sujeta a esa limitante.
Podría leerse de la siguiente manera:
Si el valor seleccionado es igual a ranchera; la vamos a escuchar primero. De lo contrario, vamos a contar todas las filas de la tabla registros donde el género no es ranchera ignorando los filtros presentes.
Utilizando variables para mejorar el rendimiento
Una de las ventajas de las variables aparte de simplificar la sintaxis, es mejorar el rendimiento en ciertos escenarios.
Leemos:
Si el total de oyentes es mayor a quince millones; lo multiplicaremos por el tres por ciento. Si el total de oyentes es mayor a dos millones y medio, también lo multiplicaremos, pero por el dos por ciento. Si no se cumplen estos criterios, lo multiplicaremos por el uno por ciento.
En esta sintaxis, sin el uso de una variable que realice la sumatoria de los oyentes, se tendría que invocar cinco (5) veces la misma función.
Nueva función IF.EAGER
En la actualización de marzo 2021, presentaron una nueva función lógica llamada IF.EAGER. Podemos utilizarla en los escenarios donde el rendimiento es importante; similar a lo visto en el punto anterior utilizando variables para evitar evaluaciones múltiples de la misma expresión.
Por ejemplo:
Multiplicación condicional = IF.EAGER( [Total Oyentes] > 15000000; [Total Oyentes] * 0,03; [Total Oyentes] )
La medida [Total Oyentes] aparece tres (3) veces, tanto en la expresión lógica como en los parámetros de verdadero y falso.
Si utilizamos IF.EAGER la evaluación de la medida será ejecutada una (1) sola vez.
Esa es la diferencia.
Sin embargo, esto no quiere decir vamos a dejar de utilizar la función IF; por el contrario, siendo esta nueva función solamente una alternativa en casos donde sea apremiante su uso, y asimismo, queramos evitar sintaxis muy verbosas por el uso de variables para alcanzar un mejor rendimiento.
Combinando operadores lógicos
En DAX existen las funciones AND y OR, siendo sus equivalentes los operadores ampersand (&&), y la doble barra vertical o pleca (||). La gran diferencia es que al utilizar las funciones, estarías sujeto a dos parámetros lógicos. En cambio, con los operadores puedes aplicar las condiciones que sean necesarias.
Leemos:
Si el género es rock o rap, tenemos que revisar el catálogo. De lo contrario, todo se encuentra en orden.
Veamos otro ejemplo, pero el operador IN, creando una condición lógica OR.
Leemos:
Si el género es ranchera, balada o romántica; revisaremos el catálogo. De lo contrario, todo está en orden.
¿Aplicar una lógica o filtrar?
Hay que tener cuidado en ejecutar lógicas en escenarios donde lo correcto es filtrar. Por ejemplo, usando CALCULATE o FILTER. Adquiere importancia en modelos que contemplan una cantidad considerable de datos; y de aplicarse una lógica para conseguir una reducción de registros, sería muy costosa su evaluación en comparación a las funciones regularmente utilizadas.