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
- Origen tabla customers
- Changed Type signup_date pasa a Date
- Trimmed Text city
- Capitalized Each Word city
- Removed Duplicates email
- Close & Apply el resultado se carga en el modelo
- 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.
- 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.
- Los pasos de limpieza se apilan encima: primero Trimmed Text quita los espacios sobrantes y luego Capitalized Each Word arregla
detroit. - 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.
- 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,
TucsonyTucsonno coinciden.
Figura 2
Por qué trim va antes de agrupar: una ciudad con un espacio es otra ciudad
| customer_id | city | characters |
|---|---|---|
| 16 | detroit | 10 |
| 32 | San Francisco | 14 |
| 70 | Tucson | 7 |
| 133 | philadelphia | 15 |
| customer_id | city | characters |
|---|---|---|
| 16 | Detroit | 7 |
| 32 | San Francisco | 13 |
| 70 | Tucson | 6 |
| 133 | Philadelphia | 12 |
- En la tabla customers real, 51 clientes tienen una ciudad con un espacio al principio o al final. La columna
characterscuenta lo que no se ve. - Para una tabla,
TucsonyTucsonson dos valores distintos. Una segmentación o un Group By mostrarían las dos. - 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
| category | subcategory | Jan | Feb | Mar |
|---|---|---|---|---|
| Decor | Candles | 80 | 56 | 115 |
| NULL | Mirrors | 109 | 93 | 120 |
| category | subcategory | Jan | Feb | Mar |
|---|---|---|---|---|
| Decor | Candles | 80 | 56 | 115 |
| Decor | Mirrors | 109 | 93 | 120 |
| category | subcategory | month | units |
|---|---|---|---|
| Decor | Candles | Jan | 80 |
| Decor | Candles | Feb | 56 |
| Decor | Candles | Mar | 115 |
| Decor | Mirrors | Jan | 109 |
| Decor | Mirrors | Feb | 93 |
| Decor | Mirrors | Mar | 120 |
- 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.
- El hueco bajo Mirrors es un null. Si se despivota ahora, el null viaja a cada fila nueva.
- Fill Down copia Decor en el null. Ahora cada fila conoce su propio grupo.
- 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 columnaunits.
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.
Correcto. Removed Duplicates compara lo que tiene la tabla en ese paso. Los dos correos aún se distinguen por un espacio, así que ambos pasan; el recorte posterior los iguala demasiado tarde. Sube el recorte por encima del paso de duplicados.
No del todo. Power Query compara el texto tal cual, con espacios y mayúsculas. La limpieza tiene que ser un paso que tú añades.Prueba otra respuesta.
No del todo. No hay una pasada final. Los pasos se ejecutan en el orden de la lista de Applied Steps, y ese es el único orden.Prueba otra respuesta.
No del todo. Recortar nunca añade filas. Cambia los valores de la columna, y solo para los pasos que vienen después.Prueba otra respuesta.
Lección hecha: ya está marcada en el mapa.