Conectar a Archivos en SharePoint y OneDrive con Power BI / Power Query

  • Facebook
  • Twitter
  • LinkedIn

Durante las últimas semanas he estado tratando de unirme a varias comunidades de Facebook que giran en torno a los temas de Power BI.

Pude unirme a un par de comunidades que son completamente neutrales en el sentido de que no son administradas por una empresa con fines de lucro, sino que son miembros de la comunidad que facilitan las cosas lo que me dice que hay pocas posibilidades de conflicto de intereses con los administradores de el grupo.

Uno de esos grupos se llama “Power BI Latinoamerica” que es una comunidad que habla principalmente el idioma español y dentro de ese grupo, uno de los administradores publicó un video que me llamó la atención:

Es básicamente un video que muestra una forma de conectarse a un archivo de Excel alojado en OneDrive y aunque ese método es completamente válido, estaba tratando de hacer referencia al autor de ese video a uno de mis artículos sobre la conexión a archivos alojados en SharePoint y OneDrive y luego me di cuenta de que no había escrito formalmente sobre ese tema en mi blog … nunca.

¡Es hora de cambiar eso! Averigüemos cuál es la forma más fácil y óptima de conectarse a CUALQUIER archivo alojado en OneDrive o SharePoint.

¿Qué es SharePoint? ¿Qué es OneDrive?

En este post nos centraremos en solo 2 fuentes de datos:

  • SharePoint –  aPlataforma colaborativa basada en web que se integra con Microsoft Office. Puede crear sitios de grupo o subsitios donde puede compartir documentos con sus colegas. Conoce más sobre SharePoint aquí.
  • OneDrive for Business – puedes imaginar esto como tu carpeta personal dentro de una empresa. Proporciona la misma experiencia de usuario final que obtienes de SharePoint, pero con restricciones, por lo que solo es accesible para ti y, en este sentido, es privado o personal para ti. Es parte de la experiencia de Office 365, y puedes aprender más sobre OneDrive aquí.

Ambos pueden usar el mismo conector dentro de Power BI / Power Query y el mismo método de autenticación, lo que facilita las cosas, ya que el conector proporciona una experiencia realmente genial para el usuario final, así como la seguridad necesaria.

¿Cómo conectarse a SharePoint con Power BI / Power Query?

El objetivo:  Connect to a specific Excel file stored in a SharePoint Teams / Groups site

En nuestro caso, tenemos el siguiente sitio:

Como puedes ver, este es un sitio de grupo de Office 365 que podría transformarse o convertirse en un sitio de Teams sin ningún problema.

El siguiente método de conexión a esta carpeta se aplica a los subsitios, grupos y sitios de equipos (Teams).

Lo único que necesitamos para hacer que todo funcione es simplemente ir a la url del sitio y simplemente seleccionar la parte que tiene el formato como este:

https://<<sharepoint site root url>>/sites/<<group name, sub site name or teams site name>>/

que en mi caso es este:

Ahora puedo ir a Power BI y seleccionar el conector que dice “Carpeta de SharePoint”:

y esto requerirá que ingreses una url y, como se describió anteriormente, tiene que tener el formato que mostré arriba:

Nota:Si deseas conectarte al directorio raíz de tu sitio de SharePoint, solo necesitas ingresar el URL de la raíz de tu sitio de Sharepoint para este conector.

y una vez que hayas pulsado Aceptar, aparecerá la ventana de autenticación en la que deberás seleccionar la cuenta de Microsoft, luego haz clic en el botón Iniciar sesión e iniciar sesión:

Después de presionar Conectar, el resultado será una ventana similar a la que obtienes cuando usas el conector “Desde la carpeta”:

y en realidad, es casi la misma experiencia donde la única diferencia es que sus archivos están alojados en SharePoint y no en una carpeta local.

Puedes hacer clic en Editar para ver los datos en la ventana del Power Query Editor y notarás que incluso los nombres de las columnas son exactamente los mismos que ves cuando te conectas a una carpeta local con Power BI / Power Query:

y si deseas conectarte a un solo archivo, todo lo que tienes que hacer es simplemente hacer clic en el Binario que desees y listo. En mi caso, seguí adelante y seleccioné el archivo “03-March.xlsx” y este fue el resultado después de hacer clic en ese binario y seleccionar los datos que quería de ese archivo:

Así es como se ve ese código:

let
Source = SharePoint.Files(“
https://powerbipanama.sharepoint.com/sites/externalsales/”, [ApiVersion = 15]),
#”03-March xlsx_https://powerbipanama sharepoint com/sites/externalsales/Shared Documents/Sales Report/” = Source{[Name=”03-March.xlsx”,#”Folder Path”=”
https://powerbipanama.sharepoint.com/sites/externalsales/Shared Documents/Sales Report/”]}[Content],
#”Imported Excel” = Excel.Workbook(#”03-March xlsx_https://powerbipanama sharepoint com/sites/externalsales/Shared Documents/Sales Report/”),
#”03-March_Sheet” = #”Imported Excel”{[Item=”03-March”,Kind=”Sheet”]}[Data],
#”Promoted Headers” = Table.PromoteHeaders(#”03-March_Sheet”, [PromoteAllScalars=true]),
#”Changed Type” = Table.TransformColumnTypes(#”Promoted Headers”,{{“Month”, type text}, {“Name”, type text}, {“Australia”, type number}, {“Canada”, type number}, {“Central”, type number}, {“France”, type number}, {“Germany”, type number}, {“Northeast”, type number}, {“Northwest”, type number}, {“Southeast”, type number}, {“Southwest”, type number}, {“United Kingdom”, type number}})
in
#”Changed Type”

El elemento clave aquí es la función SharePoint.Files, ¡pero incluso puedes usar otra función!

Puedes usar una función con el nombre de SharePoint.Contents que te brindarán una experiencia completamente nueva que se parece más a una forma de navegar a través de tus carpetas en caso de que tengas demasiados archivos.

Esta será le experiencia que te brinda la función SharePoint.Contents:

  1. Te conectas a tu sitio
  2. Navegas a la carpeta de documentos compartidos (Shared Documents)
  3. Navegas a la carpeta específica donde se almacenan tus datos
  4. Verás todos tus archivos dentro de la carpeta que querías

¿Cómo conectarse a OneDrive con Power BI / Power Query?

El objetivo:  Conectarse a un archivo alojado dentro de OneDrive for Business

En nuestro caso, tenemos el siguiente OneDrive en Office 365:

Similar a lo que hicimos antes, tenemos que mirar la url en nuestro navegador:

El formato en este caso es casi el mismo, donde tenemos la url raíz, luego “/ personal /” y por último, pero no menos importante, el nombre del usuario, que sería diferente en cada caso.

En mi caso, sería este:

https://powerbipanama-my.sharepoint.com/personal/miguel_escobar_poweredsolutionsonline_com

Y puedo usar ese valor (la url de mi sitio) dentro de SharePoint.Contents o la función SharePoint.Files para obtener los datos que necesito:

El código:

let
Source = SharePoint.Files(“
https://powerbipanama-my.sharepoint.com/personal/miguel_escobar_poweredsolutionsonline_com”, [ApiVersion = 15]),
#”01-January csv_https://powerbipanama-my sharepoint com/personal/miguel_escobar_poweredsolutionsonline_com/Documents/Sales Data/” = Source{[Name=”01-January.csv”,#”Folder Path”=”
https://powerbipanama-my.sharepoint.com/personal/miguel_escobar_poweredsolutionsonline_com/Documents/Sales Data/”]}[Content],
#”Imported CSV” = Csv.Document(#”01-January csv_https://powerbipanama-my sharepoint com/personal/miguel_escobar_poweredsolutionsonline_com/Documents/Sales Data/”,[Delimiter=”,”, Columns=12, Encoding=1252, QuoteStyle=QuoteStyle.None]),
#”Promoted Headers” = Table.PromoteHeaders(#”Imported CSV”, [PromoteAllScalars=true]),
#”Changed Type” = Table.TransformColumnTypes(#”Promoted Headers”,{{“Month”, type text}, {“Name”, type text}, {“Australia”, type number}, {“Canada”, type number}, {“Central”, type number}, {“France”, type number}, {“Germany”, type number}, {“Northeast”, type number}, {“Northwest”, type number}, {“Southeast”, type number}, {“Southwest”, type number}, {“United Kingdom”, type number}})
in
#”Changed Type”

¿Cuáles son los beneficios de estos métodos?

Hay 4 beneficios principales por los cuales usar ste método sobre cualquier otro:

  1. El conector ya es una parte nativa de Power BI / Power Query, por lo que cualquier problema que puedas encontrar está incluido en el Soporte de Microsoft.
  2. Puedes conectarte a varios archivos en lugar de solo uno al conectarte a tus sitios de esta manera.
  3. Reduces el riesgo de golpear un error Formula.Firewall, ya que todos los archivos dentro de esa carpeta se configurarán con el mismo nivel de privacidad y estarán dentro de la misma fuente de datos.
  4. El conector de SharePoint se creó de una manera en la que utiliza la API de SharePoint para obtener los datos. El conector también permite, hasta cierto punto, el plegado de consultas (query folding), de modo que cuando ejecuta su consulta solo obtiene los archivos en los que estás realmente interesado y no todos los archivos de su sitio de SharePoint. Acá puedes leer más información sobre Query Folding.

Existen otros beneficios que pueden ser específicos para ciertos casos, pero estos deberían brindarte una descripción general de las razones principales por las que debes de intentar usar este método en lugar de cualquier otro.

¿Alguna vez has usado la función SharePoint.Contents? ¿Sabías que esta misma experiencia también está disponible para carpetas locales con Folder.Contents?