[PowerBi] Obtener datos de una “carpeta” de Sharepoint o OneDrive para empresa

Hace un tiempo tuvimos la oportunidad en un post anterior de ver como podíamos conectarnos de forma alternativa contra un excel alojado en drive de Microsoft. Obteníamos una URL del archivo, hacíamos unos retoques a en power query y llegábamos a conectar directamente, sin necesidad de gateway, nuestros datos.

Recientemente me preguntaron si podíamos repetir el proceso pero contra una carpeta. La necesidad que me consultaron fue combinar muchos archivos .csv de una carpeta de OneDrive para la empresa tal como lo hace el conector de "carpeta" que trae por defecto Power Bi.

Lo primero que pensé fue: "existe uno para Sharepoint pero no para OneDrive, que pasaría si intentamos conectar el drive para la empresa, que de cierto modo usa la tecnología de sharepoint, en el mismo conector". ¡Ese razonamiento fue correcto! Veamos como conectamos tradicionalmente un Sharepoint y luego como funcionaría en OneDrive para la empresa.

Sharepoint

Para conectarnos vamos a tomar de ejemplo el conector nativo de Power Bi.

image


El mismo nos pedirá una URL que debemos construir de la siguiente manera:

https://[domain].sharepoint.com/sites/[site]/

Domain será el con el que se registró la entiendad en el portal de office y site el nombre del sitio de sharepoint al cual pretendemos llegar.

La respuesta del conector serán todos los archivos que existen en el sistema de archivos. Esta respuesta es un poco ambigua y sucia, por ello vamos a "transformar datos" para dirigirnos al editor de consultas.

Como mencionaba antes, la respuesta por defecto de Power Query al editor es una función para devolver todos los archivos dentro del sitio de sharepoint ignorando las carpetas. 

= SharePoint.Files("https://[domain].sharepoint.com/sites/[site]/", [ApiVersion = 15])

Si tenes pocos archivos o nuestros archivos contienen un patrón en el nombre podríamos filtrarlo con Text.Contains o algo semejante al nombre del archivo antes de combinarlo. Sin embargo, existe una forma más amigable para explorar nuestro contenido. Vamos a modificar un poco el método de origen de sharepoint de Files a Contents de la siguiente manera:

= SharePoint.Contents("https://[domain].sharepoint.com/sites/[site]/", [ApiVersion = 15])

De esta forma el motor reconocerá la metadata de cada nivel dentro del sitio para que podamos ir navegando las carpetas como si fueran tablas. Cuando veamos una carpeta a la cual queremos ingresar, le daremos click a la celda que dice "Table" con formato vínculo amarillo. 

image

Continuamos hasta llegar a nuestra carpeta que tiene los archivos que deseamos leer y podemos tomar la decision si tomar un único archivo o combinarlos como ya bien sabemos.

image

Así logramos conectarnos a una carpeta de Sharepoint como si fuera el conector "carpeta".

OneDrive para la empresa

El proceso es exactamente el mismo. La única diferencias es que tendremos que cambiar la URL. En el caso de OneDrive debemos construirla de la siguiente manera o podemos copiarla estando en la raíz de archivos de la página web de OneDrive dentro del portal de office 365:

https://[domain]-my.sharepoint.com/personal/ibarrau_ladataweb_com/

Las funciones de Power Query se aplican por igual, es decir que automáticamente el conector Sharepoint utilizará la función Files que podemos reemplazar por Contents.


Espero que el pequeño truquito les sirva para tomar archivos combinados como el conector carpeta.