Power BI · Capítulo 2 · Lección de conceptos · 7 min de lectura

Power Query graba pasos, no resultados

Power Query no cambia tus datos. Graba una receta de pasos que se ejecuta de nuevo desde el origen en cada actualización, y por eso el orden de los pasos decide el resultado.

La idea

Cuando haces clic en Transform → Trim en Power Query Editor, Power Query no edita tus datos. Escribe una línea en una receta. La lista de Applied Steps de la derecha es esa receta, de arriba abajo: un paso Source y luego todo lo que hiciste.

La tabla que ves en el editor es la receta reproducida hasta el paso que tienes seleccionado. Selecciona un paso anterior y la tabla vuelve a como estaba. No se perdió nada, porque nada se cambió nunca. El origen sigue igual, y los pasos solo describen qué hacer con él.

Figura 1

Una consulta es una cadena de pasos que se repite desde el origen

  1. Origen tabla customers
  2. Changed Type signup_date pasa a Date
  3. Trimmed Text city
  4. Capitalized Each Word city
  5. Removed Duplicates email
  6. Close & Apply el resultado se carga en el modelo

Paso 1 de 5 Cada paso toma la tabla que produjo el anterior y devuelve una nueva. Nada se edita en el sitio y el origen nunca se toca.

  1. Cada paso toma la tabla que produjo el anterior y devuelve una nueva. Nada se edita en el sitio y el origen nunca se toca.
  2. Haces clic en **Transform → Data Type** y Power Query escribe un paso llamado Changed Type. La lista de Applied Steps de la derecha es la receta.
  3. Los pasos de limpieza se apilan encima: primero Trimmed Text quita los espacios sobrantes y luego Capitalized Each Word arregla detroit.
  4. Removed Duplicates va después de la limpieza de texto. Dos filas que solo se distinguían por un espacio al final ahora coinciden, y una de ellas desaparece.
  5. Close & Apply carga la tabla final en el modelo. En la siguiente actualización toda la cadena se ejecuta otra vez, de arriba abajo, sobre el origen nuevo.

Por qué existe

Piensa en cómo es un lunes por la mañana sin esto. Alguien abre las exportaciones, recorta las mismas ciudades, corrige los mismos precios que llegaron como texto y borra a mano las mismas filas en blanco. El lunes siguiente lo repite de memoria, y se salta algún paso.

Una receta grabada lo resuelve. Construyes la limpieza una vez. Cada actualización la repite sobre el origen nuevo, en el mismo orden, sin manos. Y como cada paso tiene nombre, un colega puede abrir la lista y ver exactamente qué pasó con los números: un cambio que nadie ve es el que nadie cree.

Cómo funciona por dentro

Cada paso es una línea de M

Cada paso es una línea de código en un lenguaje llamado M. Abre Home → Advanced Editor y verás toda la consulta, un paso por línea, cada uno usando el nombre del paso anterior:

let
    Source = Sql.Database("harborpine", "store"),
    customers = Source{[Schema="dbo", Item="customers"]}[Data],
    Trimmed = Table.TransformColumns(customers, {{"city", Text.Trim, type text}}),
    Capitalized = Table.TransformColumns(Trimmed, {{"city", Text.Proper, type text}})
in
    Capitalized

Nunca tienes que escribir M para las tareas de todos los días. La cinta de opciones lo escribe por ti. Pero leerlo una vez deja clara la regla principal: cada paso es una función del paso anterior.

El orden es la lógica

Si un paso depende del resultado anterior, el orden cambia la respuesta. Tres casos comunes:

  • Limpia el texto antes de compararlo. Recorta y capitaliza primero, y después quita duplicados o haz el merge. Si no, Tucson y Tucson no coinciden.

Figura 2

Por qué trim va antes de agrupar: una ciudad con un espacio es otra ciudad

Origen: customers[city] tal como llega
customer_idcitycharacters
16 detroit 10
32San Francisco 14
70 Tucson7
133 philadelphia 15
Tras Trimmed Text y Capitalized Each Word
customer_idcitycharacters
16Detroit7
32San Francisco13
70Tucson6
133Philadelphia12

Paso 1 de 3 En la tabla customers real, 51 clientes tienen una ciudad con un espacio al principio o al final. La columna characters cuenta lo que no se ve.

  1. En la tabla customers real, 51 clientes tienen una ciudad con un espacio al principio o al final. La columna characters cuenta lo que no se ve.
  2. Para una tabla, Tucson y Tucson son dos valores distintos. Una segmentación o un Group By mostrarían las dos.
  3. Tras los dos pasos los espacios desaparecen (Detroit pasa de 10 caracteres a 7) y cada ciudad empieza con mayúscula.
  • Fill down antes de unpivot. Las celdas vacías hay que rellenarlas mientras los grupos aún están en columnas. Si despivotas primero, los nulls se copian en cada fila nueva.
  • Cambia el tipo antes de filtrar por él. Un filtro "mayor que 100" sobre una columna de texto compara texto, y "9" se ordena después de "100".

Figura 3

Una exportación con un mes por columna pasa a una fila por hecho

Origen: unidades del Q1 2025, pensado para imprimir
categorysubcategoryJanFebMar
DecorCandles8056115
NULLMirrors10993120
Tras Fill Down en category
categorysubcategoryJanFebMar
DecorCandles8056115
DecorMirrors10993120
Tras Unpivot Columns en Jan, Feb, Mar
categorysubcategorymonthunits
DecorCandlesJan80
DecorCandlesFeb56
DecorCandlesMar115
DecorMirrorsJan109
DecorMirrorsFeb93
DecorMirrorsMar120

Paso 1 de 4 La exportación de finanzas: la categoría se escribe una vez por grupo y los meses van a lo largo de la parte superior.

  1. La exportación de finanzas: la categoría se escribe una vez por grupo y los meses van a lo largo de la parte superior.
  2. El hueco bajo Mirrors es un null. Si se despivota ahora, el null viaja a cada fila nueva.
  3. Fill Down copia Decor en el null. Ahora cada fila conoce su propio grupo.
  4. Unpivot Columns convierte Jan, Feb y Mar en valores de una sola columna month. Dos filas pasan a seis, y ya se puede sumar una columna units.

Si un paso tardío falla, haz clic en uno anterior de la lista y mira la tabla en ese punto. Ese es el depurador.

Folding: los pasos que nunca se ejecutan en Power Query

Cuando el origen es una base de datos como SQL Server, Power Query intenta traducir tus primeros pasos a una sola consulta SQL y deja que trabaje la base de datos. Eso es el query folding. Choose columns y Filter rows se pliegan en SELECT ... WHERE ..., así que solo viajan a Power BI las columnas y filas que conservaste. Haz clic derecho en un paso y mira View Native Query: si está habilitado, el paso se plegó.

Algunos pasos no pueden plegarse (por ejemplo, una columna personalizada que ejecuta código M). Cuando uno no se pliega, todos los pasos siguientes se ejecutan dentro de Power Query sobre las filas ya descargadas. Por eso conviene poner primero los filtros y la elección de columnas, como hace el primer nivel de este capítulo.

Los tipos también son pasos

Power Query añade por su cuenta un paso Changed Type justo después de Source, adivinando a partir de las primeras filas. Trata esa suposición como un borrador. Un precio que llegó como texto, como "31.99", no se puede sumar hasta que sea un número decimal, y una columna de fecha con tipo texto no se relacionará con la tabla Date. Mira el pequeño icono de cada encabezado de columna (ABC para texto, 1.2 para decimal, un calendario para fecha) y fija el tipo a propósito, como hace el segundo nivel de este capítulo.

Merge y append reutilizan la misma idea

Merge Queries une dos consultas por una clave, como un JOIN de SQL, y añade la otra tabla como una columna que puedes expandir. Append Queries apila tablas con las mismas columnas, como cuando el marketplace manda una exportación por mes. Ambos son pasos como cualquier otro, y ambos reciben otra consulta como entrada. Las consultas que referencias aparecen entonces en la vista Query Dependencies (View → Query Dependencies), que es el mapa de dónde sale cada tabla.

Pon nombre a los pasos

Un paso llamado Changed Type2 no le dice nada a un colega. Haz clic derecho en un paso, Rename, y llámalo como lo que hace: "Trim city", "Keep completed orders". Si pasas el cursor por un paso, aparece su nota. Diez minutos poniendo nombres ahorran una hora el día que otra persona tenga que explicar los números.

Dónde termina

Close & Apply carga el resultado en el modelo. Desde entonces la consulta es una tabla del modelo y actualizar el informe repite toda la cadena. Si cambias un paso más adelante, la siguiente actualización reconstruye la tabla, así que las medidas siguen funcionando mientras existan las columnas que usan.

Errores comunes

"Power Query cambia los datos originales"

Lee el origen y nunca escribe de vuelta. Puedes borrar todas las columnas en el editor y el archivo de Excel o la tabla de SQL queda exactamente como estaba. Lo único que cambia es la receta y lo que se carga en el modelo.

"El orden de los pasos no importa, es solo una lista de limpiezas"

Es una tubería, no una lista de comprobación. Cada paso recibe la salida del anterior. Recorta después de quitar duplicados, despivota antes de rellenar o filtra antes de cambiar el tipo, y el resultado es distinto aunque se hayan aplicado los mismos pasos.

"Ya lo limpié, así que se queda limpio"

Solo mientras la limpieza sea un paso. Si corriges un valor escribiendo sobre él en una exportación de Excel, la siguiente exportación trae de vuelta el desorden. Un paso que reemplaza o recorta se vuelve a aplicar en cada actualización, incluso a los datos que todavía no existen.

Ponte a prueba

Una pregunta. Al responderla, la lección queda marcada en el mapa; nunca bloquea un nivel.

Una consulta tiene estos pasos en orden: Source, Removed Duplicates en email, Trimmed Text en email. Dos clientes son la misma persona, pero uno de los correos tiene un espacio al final. ¿Qué pasa?

Elige qué puede ejecutarse en este sitio. Puedes cambiarlo cuando quieras desde "Configurar cookies", al pie de cada página.