Las sentencias IF son una parte fundamental de Tableau, así como otras plataformas de análisis, lenguajes de programación e incluso herramientas como hojas de cálculo. Comprender lo que hacen y cómo funcionan es esencial al crear campos calculados. En este blog, explicaremos los conceptos básicos de la sentencia IF, mencionando sus componentes, algunas reglas que los rigen, y el orden de las operaciones, entre otros.
Componentes
Un condicional en Tableau tiene la siguiente estructura:
Desglosando la sintaxis, se observan múltiples componentes. Vamos a comenzar, en primer lugar, fijándonos en las dos primeras líneas:
Lo que estas dos líneas significan es: “Si el campo Ventas ([Sales]) es menor o igual a 500, devuelve el valor “Small” en el nuevo campo calculado ”. La clave de estas sentencias es la palabra IF, que indica que se está escribiendo una condición. La palabra THEN indica que se va a especificar el valor de retorno, en este caso “Small”. Entre estas dos palabras, se encuentra la condición, es decir, una comparación que devuelve VERDADERO o FALSO. En este caso, que el campo [Sales] sea menor o igual que 500. En Tableau existen seis operadores de comparación disponibles:
Operador | Significado | Devuelve VERDADERO si… |
= o == | Igual que | Ambos miembros de la igualdad tienen el mismo valor |
<> o != | Distinto a | Ambos miembros de la igualdad tienen distinto valor |
> | Mayor que | El primer miembro tiene un valor mayor que el segundo |
< | Menor que | El primer miembro tiene un valor menor que el segundo |
>= | Mayor o igual que | El primer miembro tiene un valor mayor o igual que el segundo |
<= | Menor o igual que | El primer miembro tiene un valor menor o igual que el segundo |
En este ejemplo, se está verificando si el campo [Sales] es menor o igual a 500. Si es así , la declaración IF será VERDADERA. Si no, será FALSO. Si la instrucción booleana es verdadera, se devolverá el valor especificado después de THEN, en este caso, «Small». Por lo contrario, si no lo es, continuaremos con la siguiente línea:
Al haber escrito IF al principio, la próxima condición debe ir precedida del prefijo ELSE, es decir, ELSEIF. En este ejemplo, la segunda expresión condicional es [Sales]>500 Y [Sales]<=2000. A diferencia de la primera línea, esta expresión contiene dos comparaciones independientes, [Sales]>500 y [Sales]<=2000, separadas por AND. En este caso, AND es lo que se llama un operador lógico. Los operadores lógicos más comunes en Tableau son:
Operador | Definición |
AND | Para que toda la expresión condicional sea verdadera, las comparaciones en el lado izquierdo y derecho de AND deben ser verdaderas. Si alguno de ellos es falso, entonces todo el enunciado es falso. |
OR | Para que toda la expresión condicional sea verdadera, al menos una de las comparaciones en el lado izquierdo o derecho del OR debe ser verdadera. La declaración completa solo será falsa si ambas comparaciones son falsas. |
NOT | A diferencia de AND y OR, NOT no se usa para combinar varias expresiones. En cambio, se usa en una sola expresión y básicamente devuelve el resultado opuesto al de la expresión. En otras palabras, si la expresión es VERDADERA, NOT la convertirá en FALSA y viceversa. A menudo, NOT se puede evitar mediante el uso de diferentes tipos de operadores de comparación. |
Entonces, para que la declaración de este ejemplo sea verdadera, las Ventas deben ser mayores que 500 y menores o iguales a 2000. Si ambas son verdaderas, la sentencia IF devolverá «Medium». Si no, continúa con la siguiente instrucción.
Al usar la palabra clave, ELSE, no se necesita una expresión condicional. ELSE simplemente significa que, si ninguna de las expresiones condicionales anteriores era verdadera, devolverá este valor. Entonces, en este caso, si las Ventas son mayores que 2000, la declaración devolverá «large».
Finalmente, para que se complete la sentencia IF, debe cerrarse con END.
¡El primero gana!
Cuando se trata de sentencias IF, el primero siempre gana. En otras palabras, las declaraciones IF terminan tan pronto como se determina que una expresión condicional es verdadera. Veamos una versión modificada de nuestra declaración anterior.
Se ha cambiado la línea
por
Si bien puede parecer que esto cambiará los resultados, no lo hará. Para ilustrar esto, supongamos que Ventas = 100. Tanto IF [Sales]<=500 como ELSEIF [Sales]<=2000 son técnicamente ciertos, pero debido a la regla mencionada anteriormente, la declaración terminará tan pronto como llegue a una expresión verdadera. Dado que la primera expresión es verdadera, la declaración IF devolverá «Small» y finalizará; nunca pasará a evaluar la segunda expresión. Si, por ejemplo, Ventas = 600, entonces la primera declaración sería falsa, por lo que la sentencia IF continuaría con la segunda expresión. Dado que ahora sabemos que Ventas es mayor que 500, es redundante incluirlo en la expresión condicional, por lo que podemos excluir esa comparación.
Fila a fila
Otra cosa importante a tener en cuenta es que una sentencia IF operará en una sola fila. Por una parte, esto técnicamente no es del todo cierto, ya que los campos calculados de Tableau y las declaraciones IF pueden calcularse sobre una partición de datos más grande cuando se usa algún tipo de agregación. En ese caso, nos adentraremos en el nivel de detalle (LOD) de la visualización y en otros temas más complejos. Entonces, para mantener esto simple, no vamos a hacer ningún tipo de agregación y, por eso, nuestras sentencias IF siempre operarán a nivel de fila.
Tomemos, por ejemplo, este pequeño conjunto de datos de muestra.
Actor | Película | Categoría |
Adam Sandler | Billy Madison | Comedia |
Mark Wahlberg | Ted | Comedia |
Mark Wahlberg | Shooter | Acción |
Y el siguiente campo calculado
Se puede pensar que Mark Wahlberg dará como resultado un valor de «Comedia/Acción», ya que tiene las categorías «Comedia» y «Acción». Pero este no es el caso, ya que esta sentencia IF operará solo en el nivel de fila; solo verá la categoría de esa fila actual, lo que dará como resultado lo siguiente.
Actor | Película | Categoría | Nueva Categoría |
Adam Sandler | Billy Madison | Comedia | Comedia |
Mark Wahlberg | Ted | Comedia | Comedia |
Mark Wahlberg | Shooter | Acción | Acción |
Por supuesto, se podría crear un campo calculado para combinar los géneros de las películas que protagoniza Mark Wahlberg, pero eso requeriría algunos cálculos más complejos de los que vamos a abordar aquí.
Mismo tipo de datos
Las declaraciones IF siempre deben devolver el mismo tipo de datos. Tomemos, por ejemplo, esta versión de nuestro campo calculado:
Si se intenta esto en Tableau, obtendría el error “Expected type integer, found string. Result types from ‘IF’ expressions must match.» Este mensaje de error indica que la primera sentencia IF devolvió un número entero, pero el siguiente ELSEIF devuelve una cadena. No podemos hacer esto ya que ambos deben ser del mismo tipo de datos; debemos elegir un valor de retorno entero o una cadena, no ambos.
Siempre hay algo más
Una última cosa que se debe entender es que las declaraciones IF siempre incluyen un ELSE, ya sea que las incluya explícitamente o no. En nuestro ejemplo anterior, incluimos explícitamente un ELSE, pero ¿qué pasa si lo excluimos como se muestra a continuación?
En este caso, cualquier fila con Ventas superior a 2000 devolvería un valor NULL. Excluir ELSE es esencialmente como escribir ELSE NULL.
NULL es un valor especial que indica que no hay ningún valor. También puede ser cualquier tipo de datos, lo que significa que siempre es un valor de retorno válido.
Por supuesto, no hay nada que le impida escribir explícitamente ELSE NULL. De hecho, a veces se hace ésto para que sea más fácil para otros entender la lógica de una declaración IF en particular o para tomar nota del hecho de que, aunque hay otros valores potenciales, queremos que devuelva NULL.
Orden de las operaciones
Ahora que hemos explorado la anatomía de las sentencias IF, así como algunas de las reglas que rigen su uso, hablemos un poco sobre algunos problemas lógicos más complejos que podemos encontrar. Aquí hay un ejemplo que se ve con bastante frecuencia:
Puede pensar que esto le dará cualquier cosa donde la Fecha de pedido sea posterior al 1 de enero de 2020 y tenga una categoría de «Muebles» o «Suministros de oficina». Pero estaría equivocado ya que estos diferentes operadores lógicos tienen un orden específico de operaciones. Este orden de operaciones es como el que se usa en las ecuaciones matemáticas. El siguiente gráfico muestra el orden de precedencia de las sentencias lógicas:
En otras palabras, lo primero que se calcula en una declaración lógica son los paréntesis, que agrupan las comparaciones. Luego viene NOT, seguido de AND, luego OR. Entonces, usemos esto para comprender mejor la sentencia IF anterior. Como AND se calcula antes que OR, las dos comparaciones separadas por AND se evaluarán primero:
Entonces, esto nos dará cualquier cosa con una categoría de «Suministros de oficina» y una fecha de pedido a partir del 1 de enero de 2020.
El OR actuará entonces como si la declaración anterior fuera una expresión singular. Entonces la declaración original nos dará cualquier cosa donde 1) la categoría sea «Muebles» O 2) la categoría sea «Suministros de oficina» y la fecha del pedido sea el 1 de enero de 2020 o después. Las ventas de muebles de 2019 se incluirán ya que cumplir con el criterio # 1.
Probablemente pueda ver, como se indicó anteriormente, cómo las declaraciones IF que combinan diferentes operadores lógicos pueden volverse muy confusas, ya que debe pensar en el orden en que se ejecutarán los operadores. Afortunadamente, podemos usar paréntesis para agrupar diferentes comparaciones. Por ejemplo, si vamos a cambiar esta declaración para devolver cualquier cosa cuya fecha de pedido sea posterior al 1 de enero de 2020 y tenga una categoría de «Muebles» o «Suministros de oficina». Para hacer esto, podemos agregar paréntesis (que se muestran en rojo a continuación) para agrupar las condiciones de categoría.
Estos paréntesis obligarán a la sentencia IF a evaluar primero las condiciones entre ellos: ¿la categoría es «Muebles» o «Suministros de oficina»? Luego evaluará esta expresión, como un todo, junto con la expresión del otro lado del AND, que es exactamente lo que queremos.
Tan pronto como mezcle AND, OR y NOT, es una buena práctica insertar paréntesis explícitamente para que pueda ser el 100% del orden en que se evalúa cada condición.
Variantes de IF
Cabe mencionar algunas variantes de IF que están disponibles en Tableau y algunas otras plataformas o lenguajes de programación.
Una de esas variantes de IF, es IIF, que le permite realizar una instrucción IF/ELSE simple dentro de una llamada de función concisa. Toma tres parámetros: la condición, el resultado si es verdadero y el resultado si es falso.
Por ejemplo, veamos la siguiente sentencia:
Se puede convertir esto en un IIF:
Si bien la función solo admite un IF y un ELSE, puede usar sentencias IIF anidadas para imitar la funcionalidad de las declaraciones IF/ELSEIF/ELSE. Sin embargo, los IIF anidados pueden ser muy difíciles de leer, por lo que sería mucho mejor escribir la instrucción IF completa.
Otra variante es la sentencia CASE. La funcionalidad de las declaraciones CASE varía bastante entre las diferentes plataformas. En Tableau, es simplemente un método más conciso pero menos poderoso para realizar comparaciones múltiples. Sin embargo, en plataformas como SQL, CASE le permite hacer todo lo posible con una instrucción IF. De hecho, el SQL estándar ANSI puro ni siquiera incluye declaraciones IF en absoluto; debe usar CASE.
Veamos la siguiente instrucción IF:
Esta es una sentencia IF simple en la que cada IF/ELSEIF realiza una comparación de igualdad simple basada en el mismo campo, Subcategoría. En este escenario, podemos reemplazarlo con una declaración CASE:
Como se puede observar, esto requiere un poco menos de texto y es un poco más fácil de escribir. Sin embargo, como se indicó anteriormente, las instrucciones CASE en Tableau requieren 1) que compare con un solo campo, que se encuentra después de la palabra clave CASE y 2) que solo realice comparaciones de igualdad; no puede realizar comparaciones de desigualdad (>, <, etc. .) en una instrucción CASE.
Conclusión: Sentencia IF en Tableau
Las sentencias IF (y sus variantes) son increíblemente poderosas y un requisito absoluto para cualquiera que cree campos calculados en Tableau. Pero, si no tienes experiencia en programación o análisis, pueden ser un poco desalentadores. Si bien sólo se acaba de rascar la superficie de lo que se puede hacer con las declaraciones IF en Tableau (y otras plataformas). Esta breve guía puede ayudar a comprender mejor cómo funcionan y ayudar a evitar muchos errores que se pueden tener al aprenderlas por primera vez.
Esperamos que este blog haya sido útil para entender lo que se puede hacer con sentencia IF en Tableau. Si quieres aprender más acerca de Tableau, echa un vistazo a otros blogs o ponte en contacto con nosotros a través de nuestro formulario web o escribiendo a info@theinformationlab.es.