En el artículo anterior les mostré cómo crear una columna condicional en Power BI / Power Query usando la interfaz de usuario y luego solo usando el lenguaje de Fórmulas de Power Query (M).
En esta publicación, analizaremos los operadores condicionales disponibles y cómo realizar IF anidados en Power BI / Power Query.
¿Qué son los operadores lógicos?
Probablemente los hayas visto en algún momento en DAX o en el lenguaje de fórmulas de Excel y algunos de ellos son:
- AND
- OR
- NOT
Pero, ¿cómo se escriben en el lenguaje de fórmula de Power Query? ya sabemos que solo podemos usarlos dentro de una columna personalizada, pero ¿qué aspecto tendrá?
Operadores lógicos en Power BI / Power Query
Hagamos algunas pruebas para ver cómo funcionan estos operadores. Tengo esta tabla simple en la que usaré un ejemplo:
Una cosa a tener en cuenta antes de probar esto por sí mism: el lenguaje de fórmulas de Power Query (también conocido como M), distingue entre mayúsculas y minúsculas.
Prueba #1: Uso del operador AND
Estaremos creando una nueva columna si el valor en esta columna es mayor que 8 Y menor que 25. Eso se verá así usando una Custom Column:
[Number] > 8 and [Number] < 25
Y los resultados de esto se deben ver así:
Observa como el resultado es un valor lógico, ya sea TRUE o FALSE.
Prueba #2: Uso del operador OR
Ahora queremos crear una nueva columna que pruebe si el valor es menor que 15 o mayor que 25.
Que en código M se verá así:
[Number]< 15 or [Number] > 25
Y los resultados de esto se deben ver así:
¡y sí! nos da la respuesta correcta de nuevo
Prueba #3: Uso del operador NOT
Para esta prueba final, encontremos todos los valores que NO estén por debajo de 25.
Que en el código M se verá así:
not ([Number] < 25)
Algo realmente importante sobre esta fórmula es que tengo la prueba inicial entre paréntesis, y lo que NOT hace es simplemente cambiar el valor lógico al contrario de eso.
El resultado de eso se verá así:
Casos de uso común de los operadores lógicos
Es posible que hayas visto estos operadores lógicos antes. Si alguna vez haz hecho un filtro en una tabla, mira lo que dice la barra de fórmulas:
Sí – cuando se trata de filtros, a veces puede que se utilicen los operadores lógicos. Específicamente cuando necesitas seleccionar múltiples valores o parámetros para una expresión de filtro.
Aparte de esto, estos operadores lógicos se usan comúnmente en las declaraciones IF, así que echemos un vistazo a ellos.
Declaraciones IF anidadas
Ahora que sabemos qué son los operadores lógicos y cómo usarlos, intentemos usarlos de una manera más práctica.
Haciendo un resumen de cómo funcionan las instrucciones en Power Query, tiene la siguiente fórmula:
if <test> then <resultado si es verdadero> else <resultado si es falso>
Los resultados de <test> deben de ser TRUE o FALSE, o en otras palabras, un valor lógico.
Teniendo esto en cuenta, para el <result si es verdadero> o el <resultado si es falso> puedes usar otra declaración if sin ningún problema.
Escenario práctico: Cálculo del coste de envío de un pedido
Imagina que tenemos esta tabla:
y a partir de ella debemos calcular el costo de envío según esta lógica:
Traduciendo eso de M al español simple:
- Si la cuenta del pedido es Prime Y el peso es inferior a 5 kg Y [Amount] es superior a 100, el costo de envío para el cliente será 0 (¡ENVÍO GRATUITO!)
- Si no ocurre lo anterior, entonces si la cuenta es Prime Y [Amount] es superior a 200, entonces el costo de envío es 0 (¡ENVÍO GRATIS!)
- Si no ocurre ninguno de estos, simplemente se utilizará una fórmula estándar para calcular el costo del envío, que es el peso por 1.25
El resultado de esto es:
Bastante simple, pero súper útil para entender cómo usar estos operadores lógicos. Puedes combinarlos como desees y de la manera que te sea más práctica o que tenga más sentido para ti.
Esta genial la explicación, me sirvió para agregar una columna con condiciones
Buenas tardes, muy buen la explicación. Yo particularmente, tengo una duda la cual no puedo descubrir. Si una de las columnas estaria en otra tabla la cual relacionamos con anterioridad, como se escribiría el codigo en el ejemplo que usted da. (suponiendo qu3e Amount esta en otra tabla por ejemplo)
Hola! Necesitarías traer ese valor a la tabla actual.
Acá otro artículo que habla sobre cómo traerlo:
https://www.thepoweruser.com/es/2019/01/03/operaciones-de-fusion-en-power-bi-power-query-parte-1-left-outer-join/
También te invito a nuestro foro donde puedes publicar tu escenario completo y obtener ayuda de nuestra comunidad:
https://foro.poweredsolutions.co/
Hola buen dia, tengo una duda,
en una columna tengo Valores » W, X, Y, Z» lo que deseo es que me identifique dos de esos valores, por ejemplo:
si tiene «X» o «Z» dime que es verdadero, se puede hacer aplicando algo similar o tengo que hacerlo de manera independiente creando dos columnas?
Podés usar el operador OR, también el |. Sería: IF(OR(valor, x, z), true, false) Si tenés más de dos opciones para el operador OR, tenés que usar el |. Sería IF( valor = x | valor = z | valor = w, True, False)
Buenos días. Genial explicación. Una pregunta. Como puedo utilizar en un condicional if en lenguaje M los caracteres * y ? como se utilizaría en un filtrado de excel. Ejemplo (quiero dejar en blanco en una columna todos los caracteres que empiezan por 999. Lo he probado en Power Query introduciendo la formula pero en cuanto le pongo ese * o la ? no me los soporta. Muchas gracias por la ayuda
Hola!
Creo que en el lenguaje M es un tanto diferente.
Para casos donde tienes una cadena de texto y quieres enfocarte en los primeros N caracteres, puedes utilizar la función Text.StartsWith o BeginsWith (no recuerdo específicamente el nombre), pero necesitarías utilizar esto como utilizarías un LEFT en el Excel y hacer tu lógica condicional tomando esto en consideración
Hola buenas tardes, como puedo aplicar el condicional if si quiero extraer caracteres específicos?
Por ejemplo tengo columnas con caracteres alfanuméricos de 13 dígitos, algunos empiezan con número y otros con letras. Para los que comienzan con números, necesito extraer solo el primer número, pero para los que comienzan con letras, necesito extraer las 2 primeras letras:
– POJE02302AV20: extraer solo «PO»
– 5702302133V20: extraer solo «5»
Me puedes ayudar por favor?
Muchas gracias
Hola Pia!
Con la interfaz del Power Query puedes crear nuevas columnas que extraen de columnas existentes. Lo que te recomendaría es crear una nueva columna que extrae el primer caracter de tu columna y luego trates de transformar esa columna al tipo de datos número. Luego podrías crear una columna que extraiga solo los 2 primeros caracteres y por último hacer una lógica condicional para seleccionar ya sea la columna que has creado con 2 caracteres o la que tienes con 1 solo caracter. También podrías utilizar el try: https://www.thepoweruser.com/es/2019/06/18/manejo-de-errores-si-error-en-power-bi-power-query/
De manera de código puro, podrías intentar algo como:
if (try Number.From(Text.Start([Column1],1)) otherwise null) is number then Text.Start( [Column1],1) else Text.Start([Column1],2)
Hola buenas tardes, cómo puedo lograr que usando el condicional IF me entregue el valor de condición, pero si no cumple que me mantenga el valor de origen?
Ejemplo
Si el valor es >7 que me entregue 7 si no que me entregue el mismo valor?
Hola Francisco!
Acá te paso un artículo que te puede ayudar:
https://www.thepoweruser.com/es/2019/05/28/logica-condicional-columnas-condicionales/
Te recomiendo que leas la serie completa de artículos que explican a fondo todo el tema de lógicas condicionales. En total son 4 artículos y puedes ver la galería de ellos casi que al terminar cada uno de los artículos – aparecen como tarjetas pequeñas.
Muy bueno el tutorial, quería preguntarte si existe manera en power query de enumerar los duplicados de un campo ejemplo:
2525 1
2525 2
2525 3
5656 1
5656 2
4562 1
….muchas gracias
No existe una manera sencilla en estos momentos. Lo que se hace por ahora es utilizar la característica de agrupar filas y luego en las filas agrupadas (la nueva columna con valores table) utilizar la función Table.AddIndexColumn
Hola
disculpa como puedo utilizar el IF para texto ejemplo
si columna 1 = «A» y Columna 2 = «B», entonces que columna 3 = «C» y «columna 4 = «D»
gracias!
Hola!
Realmente no existe una manera sencilla de reemplazar los valores de unas columnas de acuerdo a los valores de otras. La forma en que se crea esta columna condicional es fundamentalmente una nueva columna.
Puedes leer más sobre este tema desde la primera parte de esta serie:
https://www.thepoweruser.com/es/2019/05/28/logica-condicional-columnas-condicionales/
Hola buena explicación, me ayuda con mi formula, quiero hacer una condicional con suma pero no me reconoce el power query las formulas, es para restar horas, gracias por tu ayuda.
=If [INICIAL] > [FINAL] then [INICIAL] – [FINAL] – 0.75
else if [INICIAL] < [FINAL] then [INICIAL] – [FINAL] + 24 – 0.45
else 0
adicional a mi nunca se pitan los como los colores que tu muestras ahi, tengo el office 2019 me parece raro qn ome de la opcion.
Saludos
Hola!
La fórmula parece correcta. ¿Qué mensaje de error te muestra?
Mes sale «Token Eof expected» y cuando pongo en mostrar error, me lleva selccionado el «then», también no se me muestra resaltado los colores de la letras como se muestra en la publicacion, tengo el excel 2019, no se si tengo q configurar algo, por que a veces lo acepta y otras no. gracias por la ayuda
Buen día, espero puedan ayudarme con este problema; tengo unas tablas las cuales son Fecha_ Recepción, Fecha_ Calibración ( en las cuales hay fechas repetidas), el calendario con los días laborales y los que no. Necesito calcular el tiempo entre las fechas de recepción y calibración, teniendo en cuenta los días No laborales,
Hola Anthony!
Lamentablemente no existe una función nativa de Power Query que haga esto. Necesitarías crear tu propia función personalizada para poder llevar a cabo ese cálculo.
Realmente no he creado una función que haga esto hasta la fecha, pero sí sería necesario utilizar una función con un proceso iterativo.
Hola Miguel. agradezco mucho que se halla tomado el tiempo para contestar mi pregunta.
mil gracias, super fácil la explicación…
Buenos dias tengo un problema estoy realizando un kpi pero necesito hacer una formula con if que pregunte >65% ponga por verdadero cumple, caso contrario no cumple
Es decir un if con un valor de porcentaje
Hola Flavio!
Desconozco realmente si deseas crear una columna personalizada en Power Query o si deseas crear algo con DAX a nivel de tu modelo de datos. El artículo de arriba está escrito utilizando la herramienta de nombre Power Query dentro del Power BI Desktop y solo aplica para dicha herramienta.
Si deseas crear una columna con alguna lógica condicional con el Power Query te invito a leer los otros artículos que tengo dentro de esta serie comenzando con el siguiente:
https://www.thepoweruser.com/es/2019/05/28/logica-condicional-columnas-condicionales/
Suerte!
necesito saber cual es el signo que se utiliza en las formulas para expresar «solo» tal o cual cosa
hola! sería el signo de igual (=)
Saludos!
buenos días alguien me puede colaborar como crear una matriz de rodamiento a nivel de calificaciones a,b,c,y d donde me puede decir el rodamiento, recupero y el deterioro de la calificación a nivel de créditos
Hola Karina!
Realmente todo depende de cómo luzcan tus datos y cómo deseas hacer la lógica. El artículo de arriba realmente no cubre estos temas.
Recomiendo publicar tu pregunta en algún foro de comunidad. También brindamos servicios de consultoría remota en tal caso está interesada. Nuestro correo es info@poweredsolutions.co.
Saludos!
Estimado
Tengo la siguiente medida dias2 = value([max2]-value([min2])) esta me valores pero de esta medida quiero contar cuantos valores existe en el rango siguiente >=1 y >=2 como podria hacer para crear la medida que me permita contar
Hola Franklin!
Creo que lo que mencionas no está relacionado a lo que se menciona en este articulo. El artículo de arriba habla sobre los operadores lógicos dentro de Power Query (y el lenguaje M) pero, de acuerdo a lo que mencionas, creo que lo que estás buscando es una medida DAX que es otro lenguaje que se usa dentro de PowerPivot para Excel y el Power BI.
Te recomiendo publicar tu consulta con lujo de detalles en el foro oficial de Power BI. Abajo el enlace:
https://community.powerbi.com/t5/Translated-Spanish-Desktop/bd-p/pbi_spanish_desktop
Puedo crear una columna con la siguiente lógica:??
Columna_1 =[0 0 5 0 0 7 0 1 0 4]
for i=i+1
If Columna_1 0 then
Columna_2[i] =Columna_2[i-1]+1
else
Columna_2[i]=0
end_if
El resultado de Columna_2 debería ser
Columna_2=[0 0 1 0 0 2 0 3 0 4]
muchas gracias
Hola!
Creo que la lógica que tienes planteada está en otro lenguaje y no el languaje de Power Query. No estoy familiarizado con el lenguaje, pero en la serie de operadores lógicos explico en detalle todo lo que puedes lograr con Power Query. Acá te paso los enlaces a todos los artículos:
https://www.thepoweruser.com/es/2019/05/28/logica-condicional-columnas-condicionales/
https://www.thepoweruser.com/es/2019/06/18/manejo-de-errores-si-error-en-power-bi-power-query/
https://www.thepoweruser.com/es/2019/10/28/errores-a-nivel-de-paso-en-power-bi-power-query/
Saludos!
Gracias!!! Muy buena tu explicacion, pero estoy tratando de hacer algo parecido pero con fechas y el resultado me marca error
no me deja agregar la imagen 🙁
esta es la formula que uso.
if
[F_Pedido] = 01/01/1900
then 100000000000
else (Duration.Minutes([F_H_Pedido],[F_H_LibCre]))
hola!
Cuando escribes 01/01/1900 el Power Query no lo toma como una fecha sino realmente como que estuviese tratando de hacer una división. Existen varias maneras de escribir una fecha, pero la más sencilla es utilizando el literal #date. La fecha que mencionas se puede escribir de la siguiente manera: #date(1900,1,1)
Saludos!
MIGUEL buenas tardes y felicitaciones excelente tu difusion de conocimiento
tengo la siguiente duda realice una funcion logica con medidas de entre de ella, al final no suma de esa variable a que se debe
DISP% =
VAR A= IF( [CAPT]>[CAR_T],[CAPT]-[CAR_T],0)
VAR B= IF(A>0,DIVIDE(A,[CAPT]),0)
VAR C= IF(B>0,B*[Cto Vt],0)
RETURN
C
Hola Alcy!
Creo que lo que estás buscando es un código DAX. Lo que plantea el articulo de arriba es el lenguaje de Power Query llamado el lenguaje M.
Te recomiendo publicar tu consulta DAX con lujo de detalles en el foro oficial de Power BI (enlace abajo):
https://community.powerbi.com/t5/Translated-Spanish-Desktop/bd-p/pbi_spanish_desktop
Saludos!
Muy buenos dias,
he tratado de realizar la siguiente condicional, se realizo inicialmente en excel paa saber el valor que iba a obtener pero al momento de transformarlo en lenguaje M,pero a un no he podido
=SI($A2=$A2;C$1=C$1);1;0)))
=SI($A2=$A2;C$1=C$1);1;0)))
La mejor opción sería transferir los valores de la fila 1 a la fila 2 para que pudieses tener una lógica más sencilla a la hora de crear la nueva columna.
La diferencia principal entre la manera de resolver un tema con Excel tradicional y Power Query es que Power Query no tiene noción de referencias a nivel de filas, es decir, no sabe qué fila es la anterior o la actual. Podrías crear columnas de ayuda (utilizando índices) para que te puedan ayudar y creo que eso sería lo mejor para que llegases a tener todos los valores al mismo nivel granular (la misma fila).
Saludos!
hola, necesito hacer una if anidado donde si el valor de columbia es 1 escribir consumo, si es 2 comercial si es 3 vivienda y si es 4 microcredit, he intentado y no me deja,
gracias…
Hola!
Disculpa el retraso en mi respuesta.
¿Podrías compartir el código que has intentado o tal vez una captura de pantalla de cómo luce lo que has intentado?
Saludos!
Buen día Amigo Miguel, quiero agradecerte por que me parece que aparte de la genial en que esta explicado es uno de las pocas en la que lo explica hasta la fecha, si hay alguna otra forma de apoyarte solo comunicalo.
quiero crear una condición que haga lo siguiente:
si la venta fue realizada entre las 8:00 y las 18:00 entonces es «Habil»
sino «No Habil»
¿Como seria en DAX?
Hola!
Realmente el artículo habla sobre cómo utilizar los operadores en el lenguaje de Power Query. No en DAX. Para DAX sería otra forma y tendrías que identificar si lo deseas hacer dentro de una medida o una columna calculada. No tengo realmente un artículo en mi sitio sobre DAX. Lo siento.