Declaración If de Power Query: condiciones anidadas y múltiples
En una publicación anterior de esta serie, analizamos brevemente la declaración if en Power Query ; Ahora, vamos a profundizar un poco más y comprender cómo funciona la declaración if de Power Query.
En Excel, SI es una función central; Es una de las primeras funciones que aprendemos y sigue siendo popular entre los usuarios avanzados. Si la lógica nos permite comparar valores y seguir caminos diferentes según el resultado de esa comparación.
En una publicación anterior, analizamos las funciones en Power Query , pero no cubrimos una función IF de Power Query. Seguramente hay una función if?... ¿verdad?... bueno, más o menos.
Para usar Power Query si es lógico, necesitamos un enfoque basado en programación en lugar del enfoque basado en funciones que encontramos en Excel. Estará familiarizado con este método si alguna vez ha programado VBA u otros lenguajes. Sin embargo, esto puede ser nuevo para usted si proviene de un mundo puramente Excel.
Hay dos formas de crear este tipo de lógica condicional en Power Query:
- Uso de la función de columna condicional para escenarios básicos
- Escribir código M para escenarios más avanzados
Cubriremos ambos en esta publicación.
Tabla de contenido
- Sintaxis básica de la declaración if
- Guión
- Power Query If declaración usando una columna condicional
- Ejemplo 1: declaración if básica
- Opciones de columna condicional
- Ejemplo 2: declaración if compleja
- Limitaciones de columnas condicionales
- Power Query if declaración escribiendo el código M
- Declaraciones if anidadas
- Usando la lógica "Y"
- Usando la lógica "O"
- Uso de “O” y “Y” – orden de precedencia
- Operadores de comparación alternativos
- No operador para invertir el valor
- Ejemplo 3: declaración if básica
- Ejemplo 4: declaración if compleja
- Errores comunes de sintaxis de declaraciones if
- Conclusión
Descargue el archivo de ejemplo: únase al programa Insiders gratuito y obtenga acceso al archivo de ejemplo utilizado para esta publicación.
Nombre de archivo: 0115 Power Query si declaración.xlsx
Tener acceso
Sintaxis básica de la declaración if
La sintaxis de la declaración de Power Query si es diferente a la de Excel.
En Excel, la función SI tiene la siguiente sintaxis:
IF(logical_test, value_if_true, [value_if_false])
- prueba_lógica : la condición que desea probar.
- value_if_true : el valor que se devolverá si el resultado de la prueba lógica es VERDADERO.
- value_if_false (opcional): el valor que se devolverá si el resultado de la prueba lógica es FALSO. Donde el argumento not proporcionó el valor devuelto si es Falso.
Sin embargo, en Power Query, la sintaxis es:
if logical_test then value_if_true else value_if_false
Entonces, si vienes del mundo de Excel, inicialmente podrías pensar en esto como una función SI con los siguientes ajustes:
- quitar corchetes
- cambie la primera coma a luego
- cambiar la segunda coma a otra cosa
- cambiar si por si
Una vez que lo haya leído varias veces, lo dominará. La sintaxis de Power Query tiene la ventaja adicional de sonar como una oración estándar, lo que la hace más fácil de leer que el equivalente de Excel.
Un punto clave a tener en cuenta es que Power Query distingue entre mayúsculas y minúsculas; if , entonces y else deben estar en minúsculas.
Guión
El archivo de ejemplo Power Query If Statement.xlsx contiene solo una tabla, que ya se ha cargado en Power Query. Luego se agregó una columna adicional de Nombre del día a esa consulta.
Para ver la consulta, haga clic en Conexiones de consultas de datos en la cinta y luego haga doble clic en la consulta Datos de ventas en el panel Conexiones de consultas .
En este ejemplo, calcularemos el valor suponiendo lo siguiente:
- Escenario 1 : Los domingos tienen una prima adicional del 10% (requiere lógica básica)
- Escenario 2 : los domingos tienen una prima adicional del 10 % y dos productos (Tiger Farmhouse Bloomer) también obtienen un descuento del 5 % ese día (requiere lógica avanzada).
Power Query If declaración usando una columna condicional
Comencemos con el Escenario 1 y usemos la función Columna condicional en la interfaz de usuario.
Ejemplo 1: declaración if básica
En nuestro primer escenario, queremos agregar una prima del 10% por las ventas del domingo.
Para usar una columna condicional, haga clic en Agregar columna Columna condicional en la cinta.
Ingrese las siguientes opciones en el cuadro de diálogo Agregar columna condicional :
- Nuevo nombre de columna: % prima
- Si el nombre del día es igual a domingo , entonces 0,1 o 0
- Haga clic en Aceptar para aceptar la fórmula.
Ahora tenemos nuestra consulta con la columna condicional:
Además, eche un vistazo a la barra de fórmulas; esto coincide con la sintaxis que vimos antes:
= Table.AddColumn(#"Inserted Day Name", "% Premium", each if [Day Name] = "Sunday" then 0.1 else 0)
Opciones de columna condicional
Solo hemos usado algunas opciones en el cuadro de diálogo Columna condicional en el escenario.
Dependiendo del tipo de datos de la columna seleccionada en el campo Nombre de columna , los operadores cambian:
Texto | Número | Fecha |
Igual No es igual Comienza con No comienza con Termina con No termina con Contiene No contiene |
Igual a No es igual Mayor que Mayor o igual a Menor que Menor o igual a |
Igual No es igual Es antes Es antes o igual a Es después Es después o igual a Está en el siguiente Está en el anterior Es el más temprano Es el último No es el más temprano No es el último Está en el año |
Una característica interesante del cuadro de diálogo Agregar columna condicional es que podemos hacer clic en el botón 123ABC para insertar valores o parámetros de columna en lugar de valores codificados.
Ejemplo 2: declaración if compleja
En el escenario 2, los domingos tienen un 10% de prima y dos productos tienen un 5% de descuento. Esto añade la complejidad de condiciones adicionales.
Además, podemos crear tantas declaraciones if anidadas como queramos haciendo clic en el botón Agregar cláusula en el cuadro de diálogo Columna condicional.
Las declaraciones If ejecutan cada condición por turno. Cuando la primera instrucción if no se activa, se pasa a la segunda, luego a la tercera, y así sucesivamente. Sin embargo, una vez que una declaración if se evalúa como verdadera, se omite la lógica restante.
Si intentamos utilizar la función Columna condicional con dos o más condiciones, las cosas pueden complicarse. Por eso debemos pensar de manera diferente acerca de la lógica.
Lo siguiente proporcionaría la lógica relevante para nuestro escenario:
Limitaciones de columnas condicionales
Como se demostró anteriormente, las columnas condicionales son útiles para escenarios básicos. Pero están limitados para usos avanzados. Algunas de las limitaciones son:
- No es posible utilizar múltiples condiciones con y o lógica .
- No se puede utilizar el operador not para revertir el resultado verdadero/falso
- Solo puede devolver los resultados especificados. Se requieren pasos de consulta adicionales para utilizar el resultado de la declaración if.
Por lo tanto, debemos escribir el código M nosotros mismos dentro de una columna personalizada para escenarios más complejos.
Power Query if declaración escribiendo el código M
No te preocupes; Sé que el código M puede parecer desalentador. Creo en ti. Tú puedes hacer esto.
Ya hemos visto la sintaxis básica para escribir una declaración if:
if logical_test then value_if_true else value_if_false
A menos que tengamos un escenario simple, probablemente encontraremos if anidado , incluyendo and and or logic. Entonces, echemos un vistazo a cada uno de estos.
Una vez que hayamos analizado la sintaxis, la aplicaremos a nuestros dos escenarios.
Declaraciones if anidadas
A menudo es posible que queramos probar subcondiciones; para esto usamos una declaración if anidada.
Nota: El interlineado se ha agregado en muchos de los ejemplos. Esto es para que el código sea más fácil de leer, pero no es necesario que el código sea válido.
La siguiente sintaxis prueba la prueba_lógica1. Si es verdadero, se devuelve value_if_true; de lo contrario, se prueba la prueba_lógica2, lo que conduce a otra prueba con dos resultados posibles.
if logical_test1 then value1_if_true else if logical_test2 then value2_if_true else value2_if_false
En el caso anterior anidado, hay 3 resultados posibles. Pero en escenarios más complejos, podría haber cualquier cantidad de resultados.
Por ejemplo, la siguiente sintaxis maneja una subcondición dentro del primer resultado verdadero y múltiples subcondiciones dentro del primer resultado falso.
if logical_test1 then if logical_test2 then value2_if_true else value2_if_falseelse if logical_test3 then value3_if_true else if logical_test4 then value4_if_true else value4_if_false
Esto ilustra que podemos crear una lógica compleja cuando escribimos el código M.
Usando la lógica "Y"
La lógica "Y " nos permite realizar múltiples pruebas lógicas dentro de una sola declaración if. Todas las pruebas deben ser verdaderas para que se devuelva el resultado verdadero . Si alguna de las pruebas es falsa , se devuelve el resultado falso .
La siguiente sintaxis realiza dos pruebas usando y lógica.
if logical_test1 and logical_test2 then value_if_true else value_if_false
Usando la lógica "O"
La lógica "O" realiza múltiples pruebas lógicas, pero solo requiere una única respuesta verdadera para devolver el resultado verdadero . Todas las pruebas deben ser falsas para devolver la respuesta falsa .
La sintaxis siguiente devuelve el resultado verdadero si prueba_lógica1 o prueba_lógica2 es verdadera . De lo contrario, devuelve el resultado falso .
if logical_test1 or logical_test2 then value_if_true else value_if_false
Uso de “O” y “Y” – orden de precedencia
Cuando se utilizan la lógica or y en una sola declaración if, ¿cuál se evalúa primero?
Mire la declaración a continuación. ¿Devolverá “Verdadero” o “Falso”?
if 1=1 or 2=2 and 1=3 then "True" else "False"
Es útil pensar en los operadores como elementos matemáticos.
- o = suma
- y = multiplicación
Además, piensa que:
- Verdadero = 1
- Falso = 0
Cuando pensamos así, se puede utilizar la precedencia matemática normal (es decir, la multiplicación ocurre antes que la suma).
- 1=1 = Verdadero = 1
- 2=2 = Verdadero = 1
- 1=3 = Falso = 0
El cálculo matemático queda: 1 + 1 * 0 = 1
Por tanto, el resultado es Verdadero .
En este tipo de escenarios, recomiendo utilizar corchetes (o paréntesis, como se les puede llamar) para simplificar el orden de cálculo.
Operadores de comparación alternativos
En todos nuestros ejemplos, hemos usado igual como operador lógico, pero también podemos usar otros operadores lógicos.
- = : Igual a
- : No igual a
- : Mas grande que
- = : Mayor o igual que
- : Menos que
- = : Menor o igual a
No operador para invertir el valor
La última pieza de la sintaxis lógica es la declaración not . No invierte el resultado verdadero/falso de la prueba lógica.
Por ejemplo, la siguiente sintaxis invierte el resultado de la prueba lógica. Si el resultado de la prueba lógica es verdadero, se revierte a falso y viceversa.
si no es prueba_lógica, entonces valor_si_verdadero, de lo contrario valor_si_falso
Con todo este conocimiento, podemos empezar a escribir nuestras propias declaraciones if usando código M.
Ejemplo 3: declaración if básica
Repasemos el escenario 1. Nuestro objetivo es agregar una prima del 10 % para todas las ventas del domingo.
Agregue una columna personalizada a la tabla haciendo clic en Agregar columna Columna personalizada
Introduzca la siguiente:
Nuevo nombre de columna: % prima
Fórmula de columna personalizada :
=if [Day Name] = "Sunday" then 0.1 else 0
Recuerda prestar mucha atención a las palabras si , entonces y si no ; todos deben estar en minúsculas. Power Query distingue entre mayúsculas y minúsculas, por lo que si nos equivocamos, la fórmula no funcionará. Además, observe que Power Query resalta estas palabras en azul para mostrar que son palabras clave.
Con suerte, estará de acuerdo en que este es un método intuitivo para escribir una declaración if.
Eso es todo. Haga clic en Aceptar para agregar la nueva columna a nuestra consulta.
Ejemplo 4: declaración if compleja
A continuación, revisemos el escenario 2. Los domingos tienen una prima del 10 % y dos productos tienen un descuento del 5 %.
Hay varias formas de escribir esta fórmula. Según nuestro conjunto de datos, hay tres resultados posibles para este escenario:
- Descuento del domingo en productos premium.
- Prima dominical solo
- Sin prima ni descuento
Solución n.º 1: anidado si + o
=if [Day Name] = "Sunday" then if [Product] = "Tiger" or [Product] = "Farmhouse Bloomer" then 0.05 else 0.1else 0
Solución #2: Y, O + Anidado si
Aquí hay otra solución que podríamos probar.
if [Day Name] = "Sunday" and ([Product] = "Tiger" or [Product] = "Farmhouse Bloomer")then 0.05 else if [Day Name] "Sunday"then 0else 0.1
Solución n.° 3: anidada si solo
Podríamos usar una lógica similar a la columna condicional que creamos anteriormente.
=if [Day Name] "Sunday" then 0 else if [Product] = "Tiger" then 0.05 else if [Product] = "Farmhouse Bloomer" then 0.05 else 0.1
Power Query siempre utiliza de forma predeterminada el cuadro de diálogo Columna condicional si puede. Por lo tanto, si usamos la fórmula anterior y luego editamos el paso, Power Query abrirá el cuadro de diálogo Columna condicional en lugar del cuadro de diálogo Columna personalizada .
Solución n.º 4: uso de funciones de Power Query
Finalmente, como tenemos una lista de dos productos, podríamos usar una función que devuelva un resultado verdadero/falso. En el siguiente ejemplo, utilizamos la función List.Contains.
=if [Day Name] = "Sunday" and List.Contains({"Tiger", "Farmhouse Bloomer"}, [Product]) then 0.05 else if [Day Name] = "Sunday" then 0.1 else 0
Obtenga más información sobre List.Contains aquí: https://learn.microsoft.com/en-us/powerquery-m/list-contains
Hay muchas maneras en que podríamos abordar esta solución. Los métodos anteriores proporcionan ejemplos de los diversos enfoques que podríamos adoptar.
Errores comunes de sintaxis de declaraciones if
El cuadro de diálogo Columna personalizada proporciona una verificación de sintaxis en la parte inferior. Sin embargo, los mensajes de error pueden resultar difíciles de entender. A continuación se muestra una lista de los mensajes de error más comunes y su significado.
- Token Eof esperado : la palabra if no está en minúsculas y Power Query no la reconoce.
- Token Entonces esperado : falta la palabra entonces o no está toda en minúsculas.
- Se espera token más : falta la palabra más o no está toda en minúsculas.
- Literal no válido : las comillas dobles de una cadena de texto no se han cerrado
- Token interno esperado : faltan los argumentos logic_test, value_if_true o value_if_false, o una fórmula contenida en estos argumentos está incompleta.
Conclusión
Lógica condicional con una Power Query si la declaración es diferente. Una vez que entendemos la sintaxis, no es difícil de entender; sólo requiere práctica.
Leer más publicaciones en esta serie
- Introducción a Power Query
- Obtener datos en Power Query: cinco fuentes de datos comunes
- DataRefresh Power Query en Excel: 4 formas de opciones avanzadas
- Utilice el editor de Power Query para actualizar consultas
- Conozca las opciones de Power Query Cerrar Carga
- Parámetros de Power Query: 3 métodos
- Transformaciones comunes de Power Query (más de 50 transformaciones poderosas explicadas)
- Anexar Power Query: combine rápidamente muchas consultas en 1
- Obtenga datos de una carpeta en Power Query: combine archivos rápidamente
- Listar archivos en una carpeta subcarpetas con Power Query
- Cómo obtener datos del libro actual con Power Query
- Cómo desvincular en Excel usando Power Query (3 formas)
- Power Query: valor de búsqueda en otra tabla con combinación
- Cómo cambiar la ubicación de los datos de origen en Power Query (7 formas)
- Fórmulas de Power Query (cómo usarlas y errores que se deben evitar)
- Declaración If de Power Query: condiciones anidadas ifs múltiples
- Cómo utilizar Power Query Group By para resumir datos
- Cómo utilizar las funciones personalizadas de Power Query
- Power Query: errores comunes, cómo solucionarlos
- Power Query: consejos y trucos
Deja una respuesta