💡 Introducción

La interfaz gráfica de Power Query en Power BI Desktop es indudablemente intuitiva y potente. Permite a miles de usuarios limpiar, dar formato e integrar datos diariamente con solo un par de clics. Sin embargo, depender exclusivamente de las opciones visuales de la cinta de herramientas limita severamente nuestro potencial técnico. Detrás de cada paso registrado en el editor se compila un código en un lenguaje funcional, robusto y altamente especializado: el M Language (formalmente conocido como Power Query Formula Language).

⚙️ ¿Qué es M Language y por qué es fundamental dominarlo?

A diferencia de los lenguajes de programación estructurados o procedimentales, M es un lenguaje de programación funcional orientado al análisis de datos. Su diseño se rige bajo el principio de evaluación perezosa (lazy evaluation). Esto significa que Power Query no procesará un paso de transformación a menos que el resultado final del reporte lo requiera explícitamente, ahorrando valiosos recursos de memoria RAM y tiempo de procesamiento en grandes volúmenes de datos.

La estructura básica de una consulta M

Para escribir código M con fluidez, primero debemos entender su estructura básica, fundamentada en el bloque de código let ... in:

let
Origen = Sql.Database("servidor-sql", "BaseDatosVentas"),
TablaVentas = Origen{[Schema="dbo", Item="FactVentas"]}[Data],
FilasFiltradas = Table.SelectRows(TablaVentas, each [Anio] == 2025)
in
FilasFiltradas
  • let: Es la sección donde se definen las variables, expresiones o «pasos» secuenciales de la transformación de datos.
  • in: Es la expresión que define el resultado final que retornará la consulta. En la gran mayoría de casos, corresponde al último paso definido en el bloque let.

📊 Comparativa: Interfaz Estándar vs. Escritura Directa en M

Para dimensionar el valor agregado de escribir nuestras propias expresiones en M, observemos la siguiente tabla comparativa:

Escenario de DesarrolloSolución mediante Interfaz de Power QuerySolución Avanzada mediante Código M
Manejo de ErroresReemplazo de valores de error simples o eliminación de filas erróneas.Control dinámico y personalizado con bloques try … otherwise.
Plegado de Consultas (Query Folding)La adición aleatoria de pasos puede romper la delegación de consultas sin aviso.Escritura optimizada que fuerza el plegado en el motor de base de datos de origen.
Modularidad y ReusoDuplicación de tablas u operaciones idénticas en múltiples consultas.Creación de funciones personalizadas (shared) aplicables a cualquier tabla.
Dinamicidad de ParámetrosLimitado a filtros estáticos basados en parámetros predefinidos del sistema.Carga dinámica de metadatos basándose en consultas web o llamadas de APIs en tiempo de ejecución.

✍️ Mini Ejercicio Práctico: Creación de una Función de Limpieza de Texto en M

Para aplicar estos conceptos teóricos, construiremos una función personalizada en M que limpie de forma simultánea los caracteres especiales de una columna de texto, eliminando espacios duplicados e iniciales. Esta lógica, realizada mediante la interfaz visual, requeriría por lo menos cinco pasos independientes por cada columna de datos.

Paso 1: Crear una Consulta en Blanco

En el Editor de Power Query, dirígete a la pestaña Inicio, haz clic en Nuevo origen y selecciona Consulta en blanco.

Paso 2: Escribir la Función en el Editor Avanzado

Abre el Editor avanzado y reemplaza todo el contenido con el siguiente bloque de código M:

(TextoEntrada as any) =>
let
// Convertimos cualquier entrada a texto seguro
TextoConvertido = Text.From(TextoEntrada),
// Eliminamos espacios sobrantes en extremos e intermedios
TextoLimpio = Text.Trim(Text.Clean(TextoConvertido)),
// Normalizamos reemplazos complejos mediante una lista anidada
Reemplazos = List.Accumulate(
{
{"á", "a"}, {"é", "e"}, {"í", "i"}, {"ó", "o"}, {"ú", "u"},
{"Á", "A"}, {"É", "E"}, {"Í", "I"}, {"Ó", "O"}, {"Ú", "U"},
{"ñ", "n"}, {"Ñ", "N"}
},
TextoLimpio,
(estado, actual) => Text.Replace(estado, actual{0}, actual{1})
)
in
Reemplazos

Una vez hayas dado en «Aceptar» la ventana se cerrará y aparecerás en el «Editor de Power Query», sabrás que la función se creó de forma correcta por que deberás verlo de la siguiente manera:

Paso 3: Renombrar e Invocar

Nombra a esta consulta como fnLimpiarTextoAvanzado, cierra y aplica.

Ahora, en cualquier tabla que contenga campos de texto con impurezas ortográficas o caracteres especiales, ve a la pestaña Agregar columna, selecciona Invocar función personalizada, selecciona tu nueva función y aplícala sobre la columna deseada.


📚 Fuentes Consultadas

Deja un comentario

¡Gracias por tu mensaje!

Me pondré en contacto tan rápido como pueda.

Descubre más desde Power Platform En Español

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo