Power Query: rutas dinámicas para compartir ficheros sin romper conexiones
Un miembro de la comunidad plantea un problema muy frecuente: tiene una consulta de Power Query con una ruta de red fija (\\servidor\shared-folders-business\...). Al compartir el archivo con otros compañeros o moverlo a otro equipo, la conexión se rompe porque la ruta no existe en ese equipo.
La comunidad propuso varias soluciones para hacer la ruta completamente dinámica y configurable sin tocar el código M.
La solución de Nacho: celda nombrada como parámetro
Guardar la ruta en una celda de Excel con un nombre definido (RutaPlanos) y leerla desde Power Query:
``
= Folder.Files(Excel.CurrentWorkbook(){[Name="RutaPlanos"]}[Content]{0}[Column1])
`
El usuario configura su ruta en la celda antes de actualizar, y Power Query la lee dinámicamente. Portable, sencillo y sin tocar el código M.
La solución de Paula Bria: consulta en blanco como función
Separar la ruta en su propia consulta M en blanco:
`
let
GetRuta = Excel.CurrentWorkbook(){[Name="RutaPlanos"]}[Content]{0}[Column1]
in
GetRuta
`
Y en la consulta principal: Origen = Folder.Files(GetRuta). Separar la ruta en su propia consulta facilita el mantenimiento y permite reutilizarla en varias consultas.
La solución de Rafa: función M paramétrica
Un paso más allá: crear una función paramétrica en consulta aparte que se invoca como parámetro al llamar a Folder.Files. Útil cuando la misma ruta se necesita en varias consultas del modelo.
`
( ) =>
let
Ruta = Excel.CurrentWorkbook(){[Name="RutaPlanos"]}[Content]{0}[Column1]
in
Ruta
`
Variante para SharePoint y OneDrive
Para entornos Microsoft 365 donde los ficheros están en SharePoint o OneDrive, la función equivalente es SharePoint.Files:
`
= SharePoint.Files("https://empresa-my.sharepoint.com/personal/usuario_empresa_onmicrosoft_com/")
``
La URL del sitio actúa como "ruta" y no depende del equipo local ni de rutas de red.
El problema: la consulta funciona en tu equipo y en ningún otro
Un miembro de la comunidad plantea algo que le pasa a todo el que trabaja con Power Query en equipo: tiene una consulta que apunta a una carpeta de red concreta, con la ruta escrita a fuego dentro del código M. En su ordenador va perfecta. En cuanto comparte el archivo con un compañero, o lo mueve a otro equipo, la conexión se rompe.
El motivo es sencillo: esa ruta de red no existe igual en todas las máquinas. Puede estar mapeada con otra letra de unidad, puede que el compañero acceda por el nombre del servidor en lugar de por la unidad, o puede que directamente no tenga permisos sobre esa carpeta.
La solución no es documentar el problema, es sacar la ruta fuera del código M. La comunidad aportó tres formas de hacerlo, cada una un escalón por encima de la anterior.
Solución 1: una celda con nombre como parámetro
La propuesta de Nacho es la más directa y la que menos conocimiento de M exige. Consiste en guardar la ruta en una celda cualquiera de la hoja, darle un nombre definido (por ejemplo RutaPlanos) y leerla desde Power Query:
`` = Folder.Files(Excel.CurrentWorkbook(){[Name="RutaPlanos"]}[Content]{0}[Column1]) ``
Excel.CurrentWorkbook() devuelve una tabla con todos los rangos con nombre del libro. Al filtrar por Name te quedas con el tuyo, y con los índices vas bajando hasta el valor concreto de la celda.
A partir de ahí, cada usuario escribe su ruta en esa celda antes de actualizar. El fichero es portable y nadie tiene que abrir el editor de Power Query.
Solución 2: una consulta en blanco solo para la ruta
John da un paso más: en vez de meter esa expresión dentro de la consulta principal, la aísla en su propia consulta en blanco.
`` let GetRuta = Excel.CurrentWorkbook(){[Name="RutaPlanos"]}[Content]{0}[Column1] in GetRuta ``
Y la consulta principal se queda limpia: Origen = Folder.Files(GetRuta).
La ventaja aparece en cuanto tienes más de una consulta apuntando a la misma carpeta. Con la ruta en un sitio único, cambiar cómo se obtiene es tocar una sola consulta en lugar de cinco. Es el mismo principio de no repetirte que aplicarías en cualquier otro sitio.
Solución 3: una función M paramétrica
Rafa lleva la idea a su forma final: convertir la ruta en una función invocable, declarando los paréntesis vacíos al principio.
`` ( ) => let Ruta = Excel.CurrentWorkbook(){[Name="RutaPlanos"]}[Content]{0}[Column1] in Ruta ``
La diferencia con la consulta en blanco es sutil pero real: una función se invoca en el momento en que se la llama, así que encaja de forma natural como parámetro dentro de otras consultas del modelo. Es el patrón que querrás si la ruta se necesita en varios sitios y quieres tratarla como una pieza reutilizable.
La variante para SharePoint y OneDrive
Si tu organización está en Microsoft 365, hay un camino todavía mejor: dejar de depender de rutas locales. La función equivalente para esos entornos es SharePoint.Files:
`` = SharePoint.Files("https://empresa-my.sharepoint.com/personal/usuario_empresa_onmicrosoft_com/") ``
Aquí la "ruta" es la URL del sitio, que es la misma para todo el mundo. No depende del equipo, ni de unidades mapeadas, ni de cómo cada uno tenga configurado el explorador. Si puedes migrar los ficheros a SharePoint o a OneDrive, este es el final del problema, no un parche.
Funciones clave
Excel.CurrentWorkbook()— devuelve los rangos con nombre del libro actual como tabla. Es la puerta de entrada para pasar parámetros desde la hoja al código M.Folder.Files— lista los ficheros de una carpeta. Acepta cualquier expresión que devuelva texto, no solo una ruta literal.SharePoint.Files— el equivalente para bibliotecas de SharePoint y OneDrive, donde la dirección es común para todos los usuarios.
Conclusión
La regla que sale de este caso es fácil de recordar: cualquier valor que cambie de un equipo a otro no debería vivir dentro del código M. Sácalo a una celda con nombre y deja que la consulta lo lea.
Elegir entre las tres soluciones depende de la escala. Para un libro con una consulta, la celda con nombre sobra. Para un modelo con varias, aísla la ruta en su propia consulta. Y si estás en Microsoft 365, plantéate si el problema desaparece del todo moviendo los ficheros a SharePoint.
Casos como este, nacidos de un problema real y resueltos entre varios miembros, son el día a día de la comunidad de InflueXcel.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- Optimización de Power Query para consultas masivas a API REST CasoInteresante caso de optimización en Power Query. Randolfo, desde Guatemala, necesitaba consultar el estado de más de 100 envíos de paqueterí
- Readmisión de pacientes en 48h: Power Query, LAMBDA/MAP y AGRUPARPOR CasoAndrés Rojas plantea un reto real de datos clínicos: a partir de una tabla con más de un millón de registros de urgencias (IdPaciente, Fecha
- Mejora un 90% el rendimiento de Power Query con SQLite TutorialPower Query es una herramienta potente para consolidar, combinar y calcular datos, pero cuando trabajamos con millones de registros y calcul
- Separar artículos concatenados en filas: 4 enfoques (fórmulas, Power Query y Python) CasoCaso interesante con cuatro enfoques muy distintos para resolver un mismo problema: una tabla tiene una columna de artículos concatenados co
- Consolidar múltiples archivos Excel con Power Query desde carpeta CasoUn miembro necesitaba consolidar datos de múltiples archivos Excel almacenados en una carpeta. El reto adicional: cada archivo contenía vari
- Combinar tablas con columnas diferentes en Power Query sin perder datos CasoNuevo caso práctico: un miembro tiene archivos de datos de 2024 (54 columnas) y 2025 (109 columnas) en una carpeta. Al importarlos con "Desd
- ¿Columnas con nombres distintos en Power Query? Tutorial¿Columnas con nombres distintos en Power Query? Aquí tienes la solución definitiva para normalizar tus datos y evitar errores al combinar fi
- Extraer datos de archivos XML complejos: Power Query, VBA y Power Automate CasoSergio plantea un problema real con datos abiertos del gobierno español: archivos XML de licitaciones públicas con más de 30 niveles de anid
- Evitar 1/1/1900 al apilar tablas con fechas vacías usando APILARV CasoFernando tiene varias tablas auxiliares que combina con APILARV en una tabla resumen. El problema: cuando un campo de fecha está vacío, apar
- Generar la serie de Fibonacci con REDUCE, APILARV y LAMBDA CasoInteresante ejercicio compartido en la comunidad: generar los primeros N números de la serie de Fibonacci usando exclusivamente fórmulas de