La idea
Power Query es una grabadora. Cuando limpias una tabla en el editor, no cambia el archivo que cargaste. Anota lo que hiciste como una lista de Pasos aplicados a la derecha del editor, y cada paso es una instrucción pequeña como "quita esta columna" o "conserva las filas donde status no sea cancelled".
La lista funciona como una receta. El primer paso, Origen, lee el archivo. Cada paso posterior recibe la tabla que produjo el anterior, la cambia y la pasa. La tabla que ves es el resultado del último paso. Haz clic en cualquier paso de la lista y verás la tabla tal como estaba en ese punto, así que puedes recorrer tu propio trabajo hacia atrás.
Figura 1
Una receta que convierte el informe de junio en una tabla limpia
-
Csv.Document(File.Contents(…))Origen 32 filas, 7 columnas, precios como texto -
Table.RemoveColumns(…, {"customer_code"})Columnas quitadas 6 columnas -
Table.SelectRows(…, each [status] <> "cancelled")Filas filtradas 27 filas -
Table.TransformColumnTypes(…, {{"unit_price", type number}})Tipo cambiado los precios son números
- El primer paso, Origen, lee el CSV del marketplace tal cual: 32 filas, 7 columnas, y
unit_pricecon texto como "16.99". El archivo en disco no se vuelve a tocar. - Columnas quitadas toma la tabla de Origen y devuelve la misma tabla sin
customer_code: 6 columnas. Cada paso es una función aplicada al resultado del anterior. - Filas filtradas conserva las filas cuyo
statusno es cancelled. Se van cinco líneas canceladas y quedan 27. Este paso solo funciona porquestatussigue existiendo tras el paso de arriba. - Tipo cambiado convierte los precios de texto en números, para que un total pueda sumarlos. Tras cuatro pasos la consulta es una receta terminada, no una tabla terminada.
- El mes que viene apuntas la consulta al archivo de julio y haces clic en Actualizar. Cada paso se ejecuta de nuevo, en el mismo orden, sobre los datos nuevos. No se reescribe nada.
Por qué existe
La alternativa es limpiar a mano. Abres el archivo del marketplace, borras una columna, filtras las filas canceladas, arreglas los precios. Son diez minutos, y el mes siguiente lo haces otra vez, de memoria, y te equivocas una vez. Cuando alguien pregunta cómo se obtuvo un número, la respuesta honesta es "fui haciendo clics".
Una consulta convierte esos diez minutos en algo que haces una vez. Los pasos quedan escritos en orden, cualquiera puede leerlos, y Actualizar (Datos → Actualizar todo) los repite sobre lo que contenga ahora el archivo de origen. El archivo de origen se queda exactamente como lo mandó el proveedor, así que siempre puedes volver a él. También obtienes una frontera clara: los datos en bruto entran por arriba, una tabla limpia sale por abajo, y no hay retoques manuales sueltos en medio.
Cómo funciona por dentro
Dónde está en Excel
Datos → Obtener datos → Desde un archivo → Desde texto o CSV carga un archivo, y Transformar datos abre el Editor de Power Query. Cada botón de la cinta (Quitar columnas, Dividir columna, Cambiar tipo, Combinar consultas, Anexar consultas) añade un paso a la lista. Bajo la lista está la barra de fórmulas. Cada paso es una línea del lenguaje M, que Excel escribe por ti mientras haces clic:
Table.SelectRows(#"Removed Columns", each [status] <> "cancelled")
Rara vez escribirás M, pero leerlo es útil. El primer argumento es siempre el paso anterior, que es lo que mantiene unida la cadena. Al terminar, Cerrar y cargar escribe el resultado en una hoja o en el modelo de datos.
El orden es parte del significado
Como cada paso lee el resultado del de arriba, el orden importa. Filtra por status después de
haber quitado la columna y el paso falla. Multiplica unit_price por quantity antes de cambiar el
precio de texto a número y obtienes un error. Un buen orden es: quita primero lo que no necesitas,
arregla los tipos pronto, filtra y después añade columnas calculadas. Si un paso está en mal sitio,
arrástralo, o bórralo y rehazlo.
Los pasos también son baratos de deshacer. Borra el último paso con la X a su lado y vuelves atrás. Renombra un paso con clic derecho, para que la lista se lea como una frase.
Los tipos importan más de lo que parece
Una columna que viene de un CSV es texto hasta que dices otra cosa. "16.99" parece un precio,
pero no se puede sumar, y una columna personalizada que lo multiplica falla. Cambiar tipo es el
paso que convierte una columna en número, fecha o texto. Es un paso como cualquier otro, así que
también se repite en cada actualización, que es justo la idea.
Combinar y anexar: dos tablas se vuelven una
Anexar apila consultas una bajo otra, como los archivos mensuales que viste en el capítulo de consolidación, y empareja las columnas por nombre. Combinar las une lado a lado, emparejando filas por una clave.
Figura 2
Combinar: emparejar filas de una consulta con otra y luego limpiar el hueco
| order_id | customer_code | line_total |
|---|---|---|
| 10810 | C01335 | 11.99 |
| 10816 | C00528 | 53.97 |
| 10840 | C01355 | 92.99 |
| 10859 | C01404 | 107.98 |
| customer_code | discount |
|---|---|
| C01335 | 0.10 |
| C01355 | 0.05 |
| C01404 | 0.05 |
| C00012 | 0.10 |
| order_id | customer_code | discount |
|---|---|---|
| 10810 | C01335 | 0.10 |
| 10816 | C00528 | NULL |
| 10840 | C01355 | 0.05 |
| 10859 | C01404 | 0.05 |
| order_id | discount | total_after_discount |
|---|---|---|
| 10810 | 0.10 | 10.79 |
| 10816 | 0.00 | 53.97 |
| 10840 | 0.05 | 88.34 |
| 10859 | 0.05 | 102.58 |
- Dos consultas comparten una clave,
customer_code. Una combinación empareja cada fila de la primera con la segunda, igual que un join. - El cliente C01335 tiene un contrato al 10%. La fila de
Discountsque coincide se trae al expandir la columna nueva. - El cliente C00528 no está en la lista. Una combinación externa izquierda conserva el pedido y rellena
discountcon null. Cualquier paso que multiplique por un null daría null también. - Reemplazar valores convierte el null en 0, y una columna personalizada
[line_total] * (1 - [discount])termina el trabajo: 92.99 al 5% queda en 88.34, y C00528 paga los 53.97 completos.
Una combinación es un join, no la búsqueda de un solo valor. Una combinación externa izquierda conserva cada fila de la primera consulta y trae la fila que coincide de la segunda, con null donde no hay ninguna. Si la segunda consulta tiene dos filas para una clave, la fila de la primera aparece dos veces. Expande la columna nueva para traer los campos y trata los null de forma explícita con Reemplazar valores.
Traer datos de una base de datos
Cuando el origen es una base de datos como SQL Server, puedes importar la tabla entera, o pasar una consulta nativa que haga el filtrado dentro de la base. Power Query a menudo puede enviar tus primeros pasos de filtro de vuelta al servidor, lo que se llama plegado de consultas (query folding), para que el filtro ocurra antes de que viajen los datos. Una consulta que pide solo junio es mucho más ligera que una que carga todos los años y luego filtra.
Errores comunes
"Power Query edita mi archivo original"
Nunca lo hace. Los pasos se ejecutan sobre una copia en memoria, y el archivo en disco queda como lo mandó el proveedor. Esa es la red de seguridad: un paso equivocado no te cuesta nada, porque lo borras y el origen sigue intacto. El resultado vive en una tabla aparte, y la actualizas para reconstruirla.
"Puedo cambiar el orden de los pasos sin que pase nada"
Cada paso depende de las columnas y los tipos que dejó el de arriba. Mover un filtro antes del cambio de tipo puede comparar texto con números, y moverlo después de quitar la columna lo rompe. Cuando una actualización falla con "columna no encontrada", la causa suele ser un paso cuya entrada cambió. Haz clic en el primer paso con error y mira la tabla que recibe.
"Una combinación devuelve un solo valor, como BUSCARV"
Una combinación devuelve filas que coinciden, y pueden ser varias. Si Discounts tuviera dos filas
para C01335, cada pedido de C01335 aparecería dos veces y los totales contarían doble. Antes de
combinar, comprueba que la clave sea única en la segunda consulta, y tras combinar compara el
número de filas con el de partida.
Ponte a prueba
Una pregunta. Al responderla, la lección queda marcada en el mapa; nunca bloquea un nivel.
No del todo. Cada paso recibe la tabla que devolvió el anterior, no la original. Tras quitar la columna ya no queda status por la que filtrar.Prueba otra respuesta.
Correcto. El filtro busca status en la tabla que recibe, que ya no la tiene, así que la consulta se detiene con un error. El orden de los pasos importa.
No del todo. Power Query nunca reordena los pasos por ti. Los ejecuta de arriba abajo, tal como están listados.Prueba otra respuesta.
No del todo. La consulta no conserva las filas en silencio. Falla con un error de columna no encontrada.Prueba otra respuesta.
Lección hecha: ya está marcada en el mapa.