Bifurcación de código condicional en Power BI Query: if … then … else => then … else … if

Un usuario Pregunto ✅


Si … Entonces … Else en una columna personalizada

Todos hemos usado una declaración «si … entonces … si no» al agregar una columna personalizada en una consulta de Power BI (usando Excel Power Query o Power BI> Obtener datos). Aquí hay un ejemplo rápido de nuestro libro, Capítulo 20 «Power Query to the Rescue», Escenario n. ° 3: Adición de columnas personalizadas a sus tablas de búsqueda.

Power_Query_Add_Custom_Column
Agregar una columna personalizada usando if … then … else

Si … Entonces … Else para la ramificación de código condicional

Sin embargo, en mi vida anterior, estaba acostumbrado a usar if … then … else para la ramificación de código condicional al usar lenguajes de programación (VBA cuenta, ¿verdad?). Según la condición if, la ejecución del código sigue dos caminos completamente separados.


La ramificación de código condicional le permite seguir rutas de ejecución independientes según la condición

Esto se hace fácilmente en la mayoría de los lenguajes de programación, pero inicialmente no pude resolver esto para una consulta de Power BI. Una cosa que me seguía haciendo tropezar era pensar en M como un lenguaje funcional.

M es un lenguaje funcional

Como Matt describió en una publicación anterior, M es un lenguaje funcional, con cada línea de código en este formato:

myResult = myFunction (algunos parámetros),

Puede ver esto claramente en el código M de muestra a continuación.


Ejemplo de código M, cada línea es como una llamada de función

Ahora, por lo general, cuando crea una consulta, utilizando los botones disponibles en la cinta, cada paso se vincularía con el siguiente. Esto es evidente si nos enfocamos solo en los nombres de los pasos en el código que se muestra arriba.


Normalmente, cada paso de M se vincula con el siguiente paso.

¡Sin embargo, esto no es un requisito! De hecho, tiene total flexibilidad: un paso determinado puede hacer referencia a cualquier otro paso. Se necesita un poco de cambio para obtener esto por primera vez. Pero una vez que lo hace, puede ver que se abre un enfoque fácil para lograr la ramificación de código condicional.

Entonces … De lo contrario … Si …

Así es como lo hice: en lugar de pensar en ello como si … entonces … si no, simplemente cambié el orden a entonces … si no … si.

Bifurcación de código condicional: en lugar de pensar en ello como si … entonces … más, simplemente cambié el orden a entonces … más … si


Repensar si … entonces … si no como entonces … si no … si en M

Así es como se ve en algún código M real (descargue el archivo PBIX😞


Bifurcación de código en M (consulta de Power BI)

Tengo entendido que un paso determinado solo se ejecuta si es necesario para devolver el resultado final. Entonces, en teoría, en base a la condición, solo se ejecutaría el bloque «ENTONCES» o el bloque «ELSE». Además, puede colocar el bloque «ENTONCES» y el bloque «ELSE» después de la declaración «Si», eso es una cuestión de preferencia.

Escenario de la vida real para la ramificación de código

El escenario en el que terminé usando este patrón fue el siguiente:

  • Un modelo de Power BI que había creado terminó siendo utilizado no por uno sino por dos equipos diferentes
  • Esto era factible, ya que estaban ejecutando copias del mismo modelo, solo que con un conjunto diferente de archivos de entrada.
  • Los archivos de entrada para ambos equipos eran idénticos (datos de ventas / finanzas provenientes de su sistema empresarial)

El único inconveniente fue …

  • Cada equipo tenía un conjunto personalizado de ajustes, un conjunto muy personalizado de pasos (transformaciones M) que debían ejecutarse. Para esto terminé usando los bloques «entonces … si no … si» como describí anteriormente

Me doy cuenta de que habría muchas formas de resolver este problema. Pero este enfoque funcionó para mí y también me ayudó a sentirme un poco más cómodo con la naturaleza del lenguaje funcional de M.

Descargue el archivo PBIX con el código que se muestra en esta publicación, adjunto a la publicación.

¡Encendido!
-Avi Singh

Autor, formador y consultor de Power BI con sede cerca de Seattle, WA

Sígueme en LinkedIn Gorjeo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *