Ifelse - Amazon QuickSight

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ifelse

ifelse evalúa un conjunto de pares de expresiones if, then; y devuelve el valor del argumento then durante el primer argumento if que se evalúa como verdadero. Si ninguno de los argumentos if se evalúa como verdadero, se devuelve el valor del argumento else.

Sintaxis

ifelse(if-expression-1, then-expression-1 [, if-expression-n, then-expression-n ...], else-expression)

Argumentos

ifelse requiere uno o más pares de expresiones if, then y requiere exactamente una expresión para el argumento else.

if-expression

La expresión que se evalúa como verdadera o no. Puede ser un nombre de campo como address1, un valor literal como 'Unknown' u otra función como toString(salesAmount). Un ejemplo es isNotNull(FieldName).

Si utiliza varios operadores AND y OR en el argumento if, incluya las instrucciones entre paréntesis para identificar el orden de procesamiento. Por ejemplo, el siguiente argumento if devuelve registros con un mes de 1, 2 o 5 y un año de 2000.

ifelse((month = 5 OR month < 3) AND year = 2000, 'yes', 'no')

El siguiente argumento if utiliza los mismos operadores, pero devuelve registros con un mes de 5 y cualquier año, o con un mes de 1 o 2 y un año de 2000.

ifelse(month = 5 OR (month < 3 AND year = 2000), 'yes', 'no')
then-expression

La expresión que se va a devolver si su argumento if se evalúa como verdadero. Puede ser un nombre de campo como address1, un valor literal como 'Unknown' o una llamada a otra función. La expresión debe tener el mismo tipo de datos que los otros argumentos then y el argumento else.

else-expression

La expresión que se va a devolver si ninguno de los argumentos if se evalúan como verdaderos. Puede ser un nombre de campo como address1, un valor literal como 'Unknown' u otra función como toString(salesAmount). La expresión debe tener el mismo tipo de datos que todos los argumentos then.

Tipo de retorno

ifelse devuelve un valor del mismo tipo de datos que los valores de then-expression. Todos los datos que devolvieron las expresiones then y else deben ser del mismo tipo de datos o estar convertidos al mismo tipo de datos.

Ejemplos

En el siguiente ejemplo se genera una columna de alias para el campo country.

ifelse(country = "United States", "US", country = "China", "CN", country = "India", "IN", "Others")

Para estos casos de uso, se evalúa cada valor de un campo comparándolo con una lista de literales y se devuelve el resultado correspondiente al primer valor coincidente. Se recomienda cambiar de función para simplificar el trabajo. El ejemplo anterior se puede reescribir en la siguiente instrucción mediante: switch

switch(country,"United States","US","China","CN","India","IN","Others")

En el siguiente ejemplo se clasifican las ventas por cliente en niveles legibles para las personas.

ifelse(salesPerCustomer < 1000, “VERY_LOW”, salesPerCustomer < 10000, “LOW”, salesPerCustomer < 100000, “MEDIUM”, “HIGH”)

En el ejemplo siguiente se utiliza AND, OR y NOT para comparar varias expresiones utilizando operadores condicionales e identificar los principales clientes que NO se encuentren en Washington ni en Oregón para una promoción especial, siempre que hayan realizado más de 10 pedidos. Si no se devuelven valores, se obtiene el valor 'n/a'.

ifelse(( (NOT (State = 'WA' OR State = 'OR')) AND Orders > 10), 'Special Promotion XYZ', 'n/a')

Los ejemplos siguientes utilizan únicamente OR para generar una nueva columna que contenga el nombre del continente correspondiente a cada country.

ifelse(country = "United States" OR country = "Canada", "North America", country = "China" OR country = "India" OR country = "Japan", "Asia", "Others")

El ejemplo anterior se puede simplificar como se muestra en el siguiente ejemplo. En el siguiente ejemplo se utiliza ifelse y in para crear un valor en una columna nueva para cualquier fila en la que el valor probado esté en una lista literal. También se puede usar ifelse con notIn.

ifelse(in(country,["United States", "Canada"]), "North America", in(country,["China","Japan","India"]),"Asia","Others")

Los autores pueden guardar una lista literal en un parámetro con varios valores y utilizarla en las funciones in o notIn. El ejemplo siguiente es equivalente al ejemplo anterior, con la salvedad de que las listas literales se almacenan en dos parámetros con varios valores.

ifelse(in(country,${NorthAmericaCountryParam}), "North America", in(country,${AsiaCountryParam}),"Asia", "Others")

En el siguiente ejemplo se asigna un grupo a un registro de ventas basándose en el total de ventas. La estructura de cada frase if-then imita el comportamiento de between, una palabra clave que actualmente no funciona en las expresiones de campo calculadas. Por ejemplo, el resultado de la comparación salesTotal >= 0 AND salesTotal < 500 devuelve los mismos valores que la comparación salesTotal between 0 and 499 de SQL.

ifelse(salesTotal >= 0 AND salesTotal < 500, 'Group 1', salesTotal >= 500 AND salesTotal < 1000, 'Group 2', 'Group 3')

En el siguiente ejemplo se comprueba un valor NULL y se utiliza coalesce para devolver el primer valor que no sea NULL. En lugar de tener que recordar el significado de un valor NULL en un campo de fecha, puede utilizar una descripción legible. Si la fecha de desconexión es NULL, el ejemplo devuelve la fecha de suspensión, a menos que ambas sean NULL. A continuación, coalesce(DiscoDate, SuspendDate, '12/31/2491') devuelve '12/31/2491'. El valor devuelto debe coincidir con los demás tipos de datos. Esta fecha puede parecer un valor inusual, pero una fecha del siglo XXV simula razonablemente el “fin de los tiempos”, que se define como la fecha más alta de un data mart.

ifelse ( (coalesce(DiscoDate, SuspendDate, '12/31/2491') = '12/31/2491'), 'Active subscriber', 'Inactive subscriber')

A continuación se muestra un ejemplo más complejo en un formato más legible, solo para demostrar que no es necesario comprimir todo el código en una línea larga. En este ejemplo se proporcionan varias comparaciones del valor del resultado de una encuesta. Maneja los posibles valores NULL para este campo y clasifica dos rangos aceptables. También etiqueta un rango que necesita más pruebas y otro que no es válido (fuera del rango). Para todos los valores restantes, aplica la condición else y etiqueta la fila como si fuera necesaria una nueva prueba tres años después de la fecha indicada en esa fila.

ifelse ( isNull({SurveyResult}), 'Untested', {SurveyResult}=1, 'Range 1', {SurveyResult}=2, 'Range 2', {SurveyResult}=3, 'Need more testing', {SurveyResult}=99, 'Out of Range', concat ( 'Retest by ', toString ( addDateTime(3, "YYYY", {Date}) ) ) )

En el siguiente ejemplo se asigna un nombre de región creado “manualmente” a un grupo de estados. También se utiliza el espaciado y los comentarios, entre /* */, para facilitar el mantenimiento del código.

ifelse ( /* NE REGION*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, 'Northeast', /* SE REGION*/ locate('Georgia, Alabama, South Carolina, Louisiana',{State}) > 0, 'Southeast', 'Other Region' )

La lógica del etiquetado de la región se desglosa de la siguiente manera:

  1. Enumeramos los estados que queremos para cada región y escribimos cada lista entre comillas para hacer que cada lista sea una cadena, de la siguiente manera:

    • 'New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire'

    • 'Georgia, Alabama, South Carolina, Louisiana'

    • Puede agregar más conjuntos o usar países, ciudades, provincias o What3Words si lo desea.

  2. Para preguntar si el valor de State (para cada fila) se encuentra en la lista, usamos la función locate para devolver un valor distinto de cero si el estado se encuentra en la lista, como se indica a continuación.

    locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) and locate('Georgia, Alabama, South Carolina, Louisiana',{State})
  3. La función locate devuelve un número en lugar de un valor TRUE o FALSE, pero ifelse requiere el valor booleano TRUE/FALSE. Para evitar esto, podemos comparar el resultado de locate con un número. Si el estado está en la lista, el valor devuelto es mayor que cero.

    1. Pregunte si el estado está presente.

      locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0
    2. Si está presente en la región, etiquétela como la región específica, en este caso, una región del noreste.

      /*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast',
  4. Como tenemos estados que no están en una lista y ifelse requiere una expresión else única, utilizamos una etiqueta 'Other Region' para los estados sobrantes.

    /*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast', /*The else expression:*/ 'Other Region'
  5. Incluimos todo eso en la función ifelse( ) para obtener la versión final. En el siguiente ejemplo se omiten los estados de la región sudeste que estaban en el original. Puede volver a agregarlos en lugar de la etiqueta <insert more regions here>.

    Si desea agregar más regiones, puede crear más copias de esas dos líneas y modificar la lista de estados para adaptarla a sus necesidades. Puede cambiar el nombre de la región por el que más le convenga y cambiar el nombre del campo State por el que necesite.

    ifelse ( /*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast', /*<insert more regions here>*/ /*The else expression:*/ 'Other Region' )
    nota

    Existen otras formas de realizar la comparación inicial de la expresión if. Por ejemplo, supongamos que plantea la pregunta “¿Qué estados no faltan en esta lista?” en lugar de “¿Qué estados están en la lista?” Si lo hace, podría expresarlo de otra manera. Puede comparar la instrucción locate con cero para buscar los valores que faltan en la lista y, a continuación, utilizar el operador NOT para clasificarlos como “no ausentes”, como se indica a continuación.

    /*The if expression:*/ NOT (locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) = 0),

    Ambas versiones son correctas. La versión que elija debería tener más sentido para usted y su equipo, de forma que pueda mantenerla fácilmente. Si todas las opciones parecen iguales, elija la más sencilla.