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