Thurlow Provisions tiene diecinueve almacenes, y todos dejan el mismo fichero en el mismo sitio el primer día hábil del mes. La carpeta es \\thu-fs02\sales\monthly. El fichero es Depot_<nombre>_2026-08.xlsx: una fila por línea de producto, con Date, Depot, Product, Units, Net sales y Margin % en la cabecera y una fila de total al final.
Hasta marzo de 2024 alguien abría los diecinueve y los copiaba y pegaba uno debajo de otro. Desde entonces hay una consulta: Datos → Obtener datos → Desde un archivo → Desde una carpeta, apuntar a \\thu-fs02\sales\monthly, Combinar y transformar, cargar al Modelo de datos, y encima se apoyan las tablas dinámicas del informe del consejo. Tarda cuarenta segundos en actualizarse y lleva dos años y medio dando el número correcto.
El 3 de septiembre de 2026 se actualizó para el informe de agosto y dio 1.611.140 £ de ventas netas entre los diecinueve almacenes. La cifra real era 1.623.230 £.
12.090 £ de diferencia, un 0,74 % por debajo — lo bastante poco como para que nadie lo mirase dos veces, y no es un error. Son dos, en direcciones opuestas, que se compensan:
Depot_Kesgrave_2026-08.xlsxestaba dos veces en la carpeta, la segunda copia llamadaDepot_Kesgrave_2026-08 (1).xlsxporque alguien guardó el adjunto del correo una segunda vez. Las 501 filas de Kesgrave se añadieron dos veces y sus 84.310 £ se contaron dos veces.Depot_Dunmore_2026-08.xlsxlo había rehecho un administrativo nuevo con una fila de título arriba, así que los encabezados quedaron en la fila 2 en vez de en la 1. Las 412 filas de Dunmore llegaron a la tabla combinada con todas las columnas vacías. Sus 96.400 £ se contaron como nada.
84.310 £ de más y 96.400 £ de menos. El total resultaba creíble porque los dos errores eran casi del mismo tamaño.
Lo que actuó sobre él no fue el informe del consejo. El plan de reposición de septiembre para los productos de vida corta se construye con la misma consulta, sobre una media de tres meses, así que a Kesgrave se le pidió contra una demanda que nunca había existido y a Dunmore contra una que había desaparecido. Se dieron de baja 18.700 £ de producto fresco en Kesgrave durante la primera quincena de septiembre. Dunmore tuvo huecos en 31 referencias durante nueve días y perdió 26.400 £ de ventas que puede demostrar con sus propios datos de caja. El 8 de septiembre el responsable de Dunmore llamó para preguntar por qué su pedido de septiembre era un tercio de lo normal, y así se enteró alguien. El informe de agosto se rehízo el 16 de septiembre.
La consulta hizo exactamente lo que se le dijo. Combina todo lo que hay en esta carpeta son tres afirmaciones — combina, todo, y esta carpeta — y una consulta actualizada no vuelve a garantizar ninguna. Te da una tabla y ninguna declaración sobre lo que entró en ella.
1) La Carpeta Tal y Como la Vio la Consulta
Esta es la tabla de procedencia que nadie estaba cargando: una fila por fichero que la consulta leyó de verdad, con las filas y el dinero que cada uno aportó a la tabla combinada. Todos los números salen de la actualización de agosto.
Veinte Ficheros, Diecinueve Almacenes
La actualización de agosto, fichero a fichero: las filas y las ventas netas que cada libro aportó a la tabla combinada. Kesgrave está dos veces en la carpeta y aparece dos veces. Dunmore está una vez y aportó 412 filas con todas las columnas vacías. Los dos fallos son 84.310 £ de más y 96.400 £ de menos, y por eso el total de abajo parece un mes normal.
fxLas celdas con fórmulas están resaltadas en verde
Pasa el mouse sobre las celdas con fórmulas para ver la fórmula y resaltar las celdas referenciadas
Dos filas contienen el incidente entero. Kesgrave aparece dos veces, con 501 filas y 84.310 £ cada vez, porque había dos ficheros y a la combinación eso no le parece nada. Dunmore aparece una vez con 412 filas y nada dentro.
Fíjate en lo que hacen los totales. 8.812 filas es un número perfectamente creíble al lado de las 8.270 del mes anterior. 1.611.140 £ es un número perfectamente creíble al lado de los 1.588.400 £ del mes anterior. Nada de la tabla combinada se sale de rango, porque los dos errores eran grandes y apuntaban en sentidos contrarios.
🎯 Escenario: Monta esta tabla para tu propia consulta de carpeta antes de seguir leyendo. En el editor, clic derecho sobre la consulta combinada → Referencia, y luego Agrupar por sobre Source.Name con dos agregaciones: Contar filas y Suma de tu columna de importes. Cárgala a una hoja al lado del informe. Cuesta una consulta más y es lo único del libro que sabe de qué ficheros salieron los números.
2) Folder.Files Incluye las Subcarpetas
Desde una carpeta genera Folder.Files("\\thu-fs02\sales\monthly"), y Folder.Files es recursiva: devuelve todos los ficheros de esa carpeta y de todas las que cuelgan de ella, a cualquier profundidad. La columna Folder Path está ahí para decírtelo, y suele ser la primera que la gente elimina.
Esta es la manera más barata de duplicar un año. Alguien ordena la carpeta compartida creando \monthly\Archive 2025\ y arrastrando dentro los doce ficheros del año pasado — una limpieza que no saca nada del alcance de la consulta. La siguiente actualización añade 2025 a 2026, y que eso se note depende por completo de si el informe filtra por una fecha de verdad o por un nombre de mes.
La alternativa es Folder.Contents, que devuelve solo lo que está directamente en la carpeta, con las subcarpetas como filas que puedes ignorar. Puedes cambiar la consulta a mano. La otra vía es quedarte con Folder.Files y filtrar:
= Table.SelectRows(Source, each [Folder Path] = "\\thu-fs02\sales\monthly\")
Una costumbre vale más que cualquiera de las dos: deja Folder Path en la salida y pon =CONTARA(UNICOS(Ventas[Folder Path])) al lado del informe. Debería dar 1. El día que alguien ordene la carpeta, da 2.
🎯 Escenario: Abre tu consulta de carpeta y mira sus pasos. Si lo primero después de Source es quitar columnas, pincha en Source y lee la columna Folder Path. Pregúntate si puedes prometer que ahí nunca habrá una subcarpeta — no hoy, sino dentro de dieciocho meses, cuando alguien que jamás ha oído hablar de esta consulta decida que la carpeta está desordenada.
3) El Botón Combinar Archivos Escribe Cuatro Consultas y una Función
Pulsar la doble flecha de la columna Content es un acto más grande de lo que parece. Excel escribe un grupo de Consultas auxiliares con:
| Consulta | Qué es |
|---|---|
Parámetro1 | Un parámetro de tipo binario, que hace de "un fichero" |
Archivo de ejemplo | El primer fichero de la carpeta después de tus filtros, como binario |
Transformar archivo de ejemplo | Una consulta normal, con pasos que ves y editas, sobre el ejemplo |
Transformar archivo | Una función: los pasos del ejemplo, envueltos para poder aplicarlos a cualquier fichero |
Y en la consulta principal, dos pasos que hacen el trabajo:
= Table.AddColumn(#"Filtered Hidden Files1", "Transform File", each #"Transform File"([Content]))
= Table.ExpandTableColumn(#"Invoked Custom Function", "Transform File", {"Date", "Depot", "Product", "Units", "Net sales", "Margin %"}, …)
De ahí salen tres consecuencias, que son las tres secciones siguientes.
El ejemplo es un fichero, y es el primero. Toda regla que contiene la transformación se dedujo de un único libro. Renombra un fichero de forma que ordene antes y el ejemplo cambia.
Transformar archivo de ejemplo es donde se edita. Tocar la función directamente se puede hacer y es mala costumbre; la consulta de ejemplo existe para que veas lo que haces, y la función la sigue.
Filtered Hidden Files1 es Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true), y es la razón de que el botón Combinar sobreviva a un compañero que tiene uno de los ficheros abierto. Excel escribe al lado un fichero de bloqueo ~$Depot_Ardleigh_2026-08.xlsx; ese fichero está oculto, y los ocultos desaparecen antes de que la función los vea. Una consulta hecha a mano con Folder.Files + Excel.Workbook no tiene ese paso, y por eso las consultas de carpeta artesanales fallan justo la mañana en que alguien sigue editando su fichero.
🎯 Escenario: En tu libro abre Consultas y conexiones, despliega Consultas auxiliares y pincha en Transformar archivo de ejemplo. Lee sus pasos en voz alta. Esa lista, y nada más, es lo que se está aplicando a los diecinueve ficheros.
4) La Navegación Va por Nombre
El primer paso de Transformar archivo de ejemplo casi siempre es este:
Source = Excel.Workbook(Parameter1, null, true),
Sales_Sheet = Source{[Item="Sales",Kind="Sheet"]}[Data]
Eso es una búsqueda por nombre. Item="Sales" significa la pestaña que se llama Sales, exactamente, con sus mayúsculas y sus espacios. Un almacén que renombre su pestaña a Sales 2026, o que mande un libro donde la pestaña sigue siendo Hoja1, produce:
Expression.Error: The key didn't match any rows in the table.
Este es ruidoso, y lo ruidoso sale barato: la actualización se para, nadie publica nada y pasas diez minutos buscando el fichero. La alternativa posicional coge la primera hoja, se llame como se llame:
Sales_Sheet = Source{0}[Data]
Cuál de las dos quieres es una decisión de verdad. Item="Sales" se niega a leer la pestaña equivocada y se para cuando no encuentra la buena. Source{0} no se para nunca, y lee tan contenta una pestaña de Notas que alguien arrastró al principio. En una carpeta con ficheros de diecinueve personas distintas, la búsqueda por nombre suele ser la acertada, porque el fallo que se ve gana al que no.
Hay un tercer Kind. Excel.Workbook lista hojas, nombres definidos y Tablas, así que si los datos de cada almacén viven en una Tabla llamada tblSales, Source{[Item="tblSales",Kind="Table"]}[Data] es mejor que las dos anteriores: una Tabla lleva sus propios encabezados y su propia extensión, así que no hace falta promover nada y las filas escritas debajo están dentro.
🎯 Escenario: Mira a qué navega tu transformación. Si es Kind="Sheet", el nombre de la pestaña ya forma parte de tu proceso mensual, lo sepa o no la gente que te manda ficheros. Mándales una plantilla con la pestaña ya nombrada, y diles por qué.
5) Promover Encabezados Se Ejecuta una Vez por Fichero
El segundo paso es Table.PromoteHeaders, y aquí es donde se fue Dunmore.
#"Promoted Headers" = Table.PromoteHeaders(Sales_Sheet, [PromoteAllScalars=true])
Table.PromoteHeaders promueve la primera fila de ese fichero, contenga lo que contenga. No va buscando tus encabezados. No compara con el ejemplo. Coge la fila 1 y la convierte en los nombres de las columnas.
El administrativo de Dunmore había rehecho el fichero a partir del de julio y había escrito un título arriba — Dunmore — agosto 2026 en A1, los encabezados empujados a la fila 2. Así que para ese fichero, y solo para ese, los nombres promovidos salieron Dunmore — agosto 2026, Column2, Column3 y así, y los encabezados de verdad pasaron a ser la primera fila de datos.
No falló nada. Table.PromoteHeaders no puede fallar: toda tabla tiene una primera fila.
🎯 Escenario: Pregúntale a tu transformación qué da por hecho sobre la fila 1. Si los ficheros vienen de otras personas, añade un paso que encuentre el encabezado en vez de fiarse: filtra fuera las filas donde tu columna clave sea nula antes de promover, o usa Table.Skip con una condición. Hasta un Table.SelectRows sencillo que tire las filas totalmente vacías se gana su sitio.
6) Expandir Es una Lista Fija de Nombres de Columna
Aquí está el motivo de que una fila de título promovida produzca nada en vez de un error.
Table.ExpandTableColumn recibe una lista explícita de nombres de columna, capturada cuando pulsaste el botón:
{"Date", "Depot", "Product", "Units", "Net sales", "Margin %"}
Para cada tabla anidada busca esos seis nombres. La tabla anidada de Dunmore también tenía seis columnas, llamadas Dunmore — agosto 2026, Column2, Column3, Column4, Column5 y Column6. No coincidía ninguna. Una columna que se pide y no se encuentra se expande como nulo — no como error, no como aviso, no como una tabla más corta. Dunmore aportó 412 filas, todas sus celdas vacías, y SUMA ignora las celdas vacías por norma.
El mismo mecanismo, con una causa más pequeña, es una columna que alguien renombró: Net sales → Net Sales en un fichero son nulos para ese fichero. La lista de expansión distingue mayúsculas, como todas las comparaciones de nombres en M.
Y la lista es fija, lo cual corta también por el otro lado. Cuando los diecinueve almacenes empiecen a mandar una columna Promo code en enero, el paso de expansión seguirá pidiendo los mismos seis nombres y esa columna no aparecerá. Nadie te lo va a decir. Vuelves a abrir el paso y la marcas.
Este es además el paso que decide si tu consulta de carpeta falla a gritos o en silencio, por dónde se fijan los tipos. Cuando Combinar archivos escribe la transformación, mete un paso Changed Type dentro de la función por fichero:
= Table.TransformColumnTypes(#"Promoted Headers", {{"Date", type date}, {"Net sales", type number}, …})
Nombrar una columna que en ese fichero no existe levanta Expression.Error: The column 'Net sales' of the table wasn't found, y tienes un error que no se te pasa. El analista de Thurlow había borrado ese paso en marzo de 2025, por un motivo defendible: un almacén mandó un fichero con la columna Margin % vacía, el paso de tipos falló y la actualización entera se murió a las 07:40 de una mañana de consejo. Mover el cambio de tipos a después de la unión arregló aquello y es un consejo que encontrarás en cien sitios, incluida gente que sabe perfectamente lo que hace.
Sigue siendo el trato. Tipos dentro de la función: un fichero que cambia de forma falla, a la vista, y lo arreglas. Tipos después de la unión: no falla nada, y el fichero que cambió de forma se convierte en un bloque de nulos dentro de una tabla de nueve mil filas.
🎯 Escenario: Decide cuál de las dos quieres, a propósito, y escríbelo al lado de la consulta. Si eliges los tipos después de la unión, debes la comprobación de nulos de la sección 11 — =FILAS(Ventas)-CONTAR(Ventas[Net sales]) — en un sitio visible del informe.
7) La Copia con "(1)" en el Nombre
El fichero de Kesgrave estaba dos veces en la carpeta porque alguien abrió el correo una segunda vez y Windows hizo lo que hace Windows: Depot_Kesgrave_2026-08 (1).xlsx, guardado junto al primero.
No hay nada en Power Query que se oponga a eso. Los dos ficheros pasan el filtro de extensión. Los dos tienen pestaña Sales, encabezados en la fila 1 y 501 filas buenas. La combinación añadió los dos porque los dos estaban, e hizo bien.
Lo que lo vuelve caro es que ninguna comprobación basada en importes lo encuentra. Esta es la parte que merece ir despacio. El fichero de cada almacén termina con su propia fila de total — un total de control, hecho por el almacén, independiente de tu consulta. Así que la conciliación obvia es quedarse esas filas de total en una segunda consulta y comparar:
=SUMA(Ventas[Net sales]) - SUMA(Control[Total del almacén])
No encontró ninguno de los dos. La fila de total de Dunmore pasó por el mismo fichero mal promovido que sus datos, así que llegó nula a Control igual que los datos llegaron nulos a Ventas: los dos lados perdieron 96.400 £ y la diferencia se quedó en cero. Y el fichero duplicado de Kesgrave lleva su propia fila de total, así que el duplicado se cuenta dos veces en Ventas y dos veces en Control, los dos lados se mueven juntos, y la diferencia vuelve a quedarse en cero.
Una conciliación que compara la tabla combinada con totales de control sacados de la misma carpeta no puede ver ninguno de los dos fallos, porque los dos fallos están en sus dos lados.
Esta es la forma general del asunto. Toda comprobación sacada de dentro de la tabla combinada compara la carpeta consigo misma. La única comprobación que pilla un fichero duplicado es una comprobación sobre la carpeta: cuántos ficheros hay, frente a cuántos debería haber.
=CONTARA(UNICOS(Ventas[Source.Name])) 19 almacenes, 19 ficheros devolvió 20
🎯 Escenario: Escribe en una celda cuántos ficheros esperas este mes. Diecinueve almacenes, diecinueve ficheros. Pon al lado la cuenta. Dos celdas y una resta, y es la única comprobación de este artículo que no tiene sustituto.
8) Las Filas de Total de Cada Fichero se Añaden como Datos
El fichero de cada almacén termina con una fila de total, y esa fila no tiene ni idea de que es especial. Excel.Workbook lee todo el rango usado, así que salvo que algo la quite, cada una de esas diecinueve filas de total se añade como fila de datos y la tabla combinada duplica exactamente cada almacén.
En Thurlow esto se resolvió el primer día, porque el error es demasiado grande para que se escape: el total de agosto habría salido en 3,2 millones. Solo es invisible cuando la fila de total es parcial — un subtotal por familia de producto, una línea de "Devoluciones" debajo de los datos, una nota escrita dos filas más abajo — y entonces es un pequeño porcentaje, en el mismo terreno que el resto de este artículo.
El filtro robusto va sobre la columna clave, no sobre la palabra "Total":
= Table.SelectRows(#"Promoted Headers", each [Date] <> null and [Product] <> null)
Eso sobrevive a que un almacén escriba TOTAL, Total del mes o nada en la columna A, porque pregunta si la fila es una transacción, no si está etiquetada como tal.
🎯 Escenario: En el editor, pincha en la consulta combinada, abre la flecha de filtro de tu columna clave y busca (null) en la lista. Todo lo que haya ahí es una fila que está en tu tabla y no es una transacción. Ya que estás, ordena de mayor a menor por la columna de importes y lee las cinco primeras filas: una fila de total que se ha colado siempre está arriba.
9) Source.Name Es lo Único Que Sabe de Dónde Vino una Fila
El botón Combinar conserva el nombre del fichero y lo renombra Source.Name, y es la columna más valiosa de la tabla. Todo lo de este artículo se diagnostica con una tabla dinámica: Source.Name en las filas, cuenta de filas y suma de importes en los valores.
Esa dinámica habría enseñado, en agosto, dos líneas de Kesgrave y una de Dunmore con 412 filas y nada de dinero, en unos cuatro segundos.
Consérvala. Conserva también Folder Path, y si el nombre del fichero lleva el mes, sácalo a una columna Mes del fichero con Extraer → Texto entre delimitadores, para poder comprobar que el mes es el que crees que estás informando. Una consulta de carpeta que ha tirado Source.Name es una tabla que no puede responder a "¿de qué fichero salió esto?", y a partir de ahí toda investigación consiste en abrir diecinueve libros a mano.
🎯 Escenario: Monta ahora la dinámica de procedencia y déjala en una hoja llamada Comprobación, al lado del informe. Filas: Source.Name. Valores: cuenta de filas y suma de la columna de importes. Que se actualice con todo lo demás. Quien eche un vistazo a diecinueve líneas verá dos que dicen Kesgrave sin que nadie le explique qué tiene que buscar.
10) Actualizar, y Qué Significa "Cargado"
La consulta estuvo bien dos años y medio y estuvo mal en agosto, y estuvo mal en el instante en que se actualizó. Hay tres cosas sobre la actualización que conviene decir en voz alta.
Actualizar todo no es automático. Ctrl Alt F5 actualiza todas las consultas y todas las dinámicas del libro. Abrir el fichero no actualiza nada salvo que la conexión tenga marcado Actualizar datos al abrir el archivo, en Consultas y conexiones → clic derecho → Propiedades. Una consulta de carpeta en un fichero que nadie ha actualizado te está enseñando la carpeta tal y como estaba en alguna fecha pasada, lo cual está tan mal como que la carpeta esté incompleta, y es más silencioso.
La actualización en segundo plano te reordena la mañana. Con Habilitar actualización en segundo plano activada, la actualización te devuelve el control antes de haber terminado, así que una dinámica leída demasiado pronto se lee contra los datos del mes pasado. En un informe que estás a punto de mandar, desactívala.
Una consulta de solo conexión no tiene salida que comprobar. Si la consulta combinada carga directamente al Modelo de datos y solo la consumen dinámicas, no hay ninguna tabla contra la que hacer =FILAS(). Es una arquitectura perfectamente buena y necesita que las comprobaciones de la sección siguiente vayan como consultas pequeñas propias, o como medidas, en vez de como fórmulas al lado de una tabla que no existe.
Una más, porque cuando pasa se lleva una mañana entera por delante: si la ruta de la carpeta sale de una celda en vez de estar escrita en la consulta, te encontrarás con Formula.Firewall: Query 'X' references other queries or steps, so it may not directly access a data source. Es una regla de niveles de privacidad, no un error del programa. Datos → Obtener datos → Opciones de consulta → Privacidad → Omitir los niveles de privacidad para ese libro, o reestructura para que la ruta sea un parámetro.
🎯 Escenario: Abre Consultas y conexiones, clic derecho en tu consulta de carpeta, Propiedades, y lee las dos casillas. Luego mira abajo en el panel de consultas el número de filas y la hora: "8.812 filas cargadas" y una fecha. Las dos son hechos sobre la última actualización, y el número de filas es de los que deberías poder predecir antes de leerlo.
11) Diecinueve Ficheros, Diecinueve Almacenes: las Comprobaciones Que Lo Habrían Pillado
Cada una es una celda, contra la tabla combinada cargada como Ventas. Hazlas después de cada actualización, en la hoja donde vive el informe.
| Comprobación | Qué debería devolver | Qué devolvió en agosto |
|---|---|---|
=CONTARA(UNICOS(Ventas[Source.Name])) | 19 — un fichero por almacén | 20 |
=CONTARA(UNICOS(Ventas[Depot])) | 19 — cada almacén nombrado en sus filas | 18 |
=FILAS(Ventas)-CONTAR(Ventas[Net sales]) | 0 — ninguna fila sin número | 412 |
=FILAS(Ventas) | a un pequeño porcentaje de las 8.270 del mes pasado | 8.812 — un 6,6 % más, con ventas planas |
=CONTARA(UNICOS(Ventas[Folder Path])) | 1 — una carpeta, sin subcarpetas | 1 |
=SUMAPRODUCTO(--ESNUMERO(HALLAR("(";Ventas[Source.Name]))) | 0 — ningún nombre con marca de copia | 501 |
=SUMA(Ventas[Net sales])-SUMA(Control[Total del almacén]) | 0 — la tabla contra los totales de los propios ficheros | 0 |
Tres notas sobre esa tabla, y valen más que las fórmulas.
La primera comprobación es la única que pilla el duplicado. Todo lo que sale del dinero — incluida la última fila, que parece la comprobación más rigurosa de la lista — compara la carpeta consigo misma, y un fichero que está dos veces en la carpeta está dos veces en los dos lados de esa comparación.
La última fila está ahí para dejarlo a la vista. Devolvió cero, todo el mes, sobre una tabla que fallaba por 12.090 £. No es una mala comprobación: pilla transcripciones, truncamientos y un fichero que no llegó a cargar. Este caso no lo puede pillar, y una comprobación que devuelve cero por el motivo equivocado es peor que no tener ninguna, por lo que la gente concluye de ella.
La quinta está en la lista por junio, no por agosto. Alguien creó \monthly\Archive 2025\ el 12 de junio y la siguiente actualización se trajo doce ficheros de más. Aquello se encontró el mismo día — el total subió un 68 % — y es la razón de que Folder Path siga en la salida.
12) Doce Trampas
Folder.Fileses recursiva. Una subcarpeta creada dentro de tu carpeta de origen está dentro de tu consulta.Folder.Contentses la que no lo es.- El fichero de ejemplo es el primer fichero, así que toda regla de la transformación se dedujo de un libro que casualmente ordenaba antes. Renombra los ficheros y el ejemplo cambia.
Item="Sales",Kind="Sheet"es una búsqueda por nombre exacta y sensible a mayúsculas. Una pestaña renombrada para la actualización.Source{0}[Data]coge la primera hoja y no se para nunca, tampoco cuando la primera hoja es la equivocada.Table.PromoteHeaderspromueve la fila 1, haya lo que haya en ella. Una fila de título encima de los encabezados y las columnas de ese fichero se llaman como el título.- Expandir una columna que un fichero no tiene da nulo, no error. Una columna renombrada o mal promovida es un bloque de filas vacías, y
SUMAse salta las celdas vacías sin decir nada. - La lista de expansión queda fija en el momento en que pulsas el botón. Una columna que todos los ficheros empiecen a mandar el año que viene no aparecerá hasta que edites el paso.
- Los tipos dentro de la función fallan a gritos; los tipos después de la unión fallan en silencio. Las dos posturas son defendibles. Solo una necesita la comprobación de nulos.
- Los filtros de extensión distinguen mayúsculas en M.
[Extension] = ".xlsx"no casa con.XLSX. UsaText.Lower([Extension]). - Las filas de total de cada fichero se añaden como datos. Filtra por que la columna clave no sea nula, no por la palabra "Total", que cada almacén escribe a su manera.
- Los ficheros de bloqueo
~$están ocultos, así que el pasoFiltered Hidden Filesdel botón Combinar los quita y una consulta escrita a mano conFolder.Filesno. - Un fichero duplicado es invisible para cualquier conciliación de importes, porque los totales de control se duplican junto con los datos. Cuenta los ficheros.
- No se actualiza nada al abrir salvo que lo marques, y con la actualización en segundo plano activada, una dinámica leída justo después puede leerse antes de que termine.
La lección que Thurlow sacó de agosto no iba de Power Query, y desde luego no era que la consulta hubiera sido un error: diecinueve ficheros a mano era peor, y se equivocaba más a menudo.
Iba de que una tabla combinada no tiene procedencia. Llegan nueve mil filas con el mismo aspecto, y de qué fichero salió cada una, cuántos ficheros había y cuáles se leyeron como tú querías que se leyeran son preguntas que la tabla no responde salvo que la obligues. El arreglo no es una transformación mejor. Son cuatro celdas y una dinámica sobre Source.Name, actualizada con todo lo demás, que diga cuántos ficheros hubo y cuántas filas y cuántas libras trajo cada uno — para que el día en que alguien guarde un adjunto dos veces, o escriba un título encima de los encabezados, el fichero que cambió sea el que estás mirando.
