Usar la API de Microsoft Graph como fuente de datos

Un usuario Pregunto ✅

vilmarci

Estimada comunidad,

Recibí una tarea para crear un informe sobre todas las salas de reuniones libres en un momento dado. Por lo que puedo ver, esto se puede lograr accediendo a todos los calendarios compartidos a través de Graph API:

https://graph.microsoft.com/beta/me/findRooms

No tengo experiencia en absoluto, pero pasé medio día para que la conexión funcionara sin éxito. En Graph Exlorer obtengo los resultados correctos, pero no pude hacerlo funcionar en PowerBI. Cuando intento conectarme, aparece un mensaje de error: «El acceso al recurso está prohibido».

Incluso creé una clave API y agregué permiso para usar la API gráfica, pero nunca obtuve ningún dato, solo errores. Cuando ingreso la clave api, el error es que solo puedo usar la clave api cuando uso la autenticación anónima, pero ya no puedo regresar y cambiar la autenticación. Además, parece totalmente aleatorio cuando tengo la opción de elegir entre métodos de autenticación.

Por favor, que alguien me indique los pasos que debo seguir para obtener los datos en PowerBI. Gracias.

toneladamcg

Microsoft Graph implementa el flujo de autenticación de OAuth 2.0 y, por lo tanto, para acceder a él con Power BI, deberá crear un conector de datos personalizado. Aquí hay un tutorial que explica paso a paso cómo crear un conector de datos personalizado con OAuth 2.0 para Microsoft Graph en Power BI.

rafael_inoue

Hola,

¿Tiene una solución para solucionar este problema sobre el acceso prohibido en las consultas de gráficos?

Tengo el mismo problema y no importa lo que haga, simplemente no puedo usar esta fuente de datos como una fuente de datos.

Gracias

ChrisAtMAF

Encontré una manera de hacer esto que implica conectarme a Microsoft Graph usando una aplicación web de Azure sin tener que jugar con Visual Studio. Espero que sea útil para otros también:

https://minkus.medium.com/conexión-fácil-entre-power-query-power-bi-y-microsoft-graph-72333eb…

toneladamcg

En respuesta a ChrisAtMAF

Esta debería ser la respuesta aceptada. Tutorial extremadamente completo que permite que Power Query (Power BI, Excel, etc.) interactúe con la API de Microsoft Graph. ¡Bravo!

(Ahora, todo lo que necesita es una forma de descifrar ese secreto de cliente).

Redoble de tambores peludo

En respuesta a toneladamcg


@tonmcg escribió:

Esta debería ser la respuesta aceptada.


Excepto que no funciona para los permisos delegados, que es lo que necesita para poder leer los datos de Microsoft ToDo.

JSR

Esto me funciona ahora directamente usando el feed de Odata… ¿algo ha cambiado?

https://graph.microsoft.com/beta/groups

Anónimo

En respuesta a JSR

Hola, tengo errores en este… Cuando lo uso desde el escritorio, funciona bien, pero al publicar en el servicio PB, la conexión tiene errores de autenticación.

cristianoag

Documenté un enfoque para que Power BI consuma datos de Graph. Existe una solución que utiliza la autenticación de aplicación explícita para las operaciones que admiten eso y un conector personalizado para las que solo admiten permisos de usuario/delegados. Más detalles disponibles en https://techpeanuts.wordpress.com/2020/05/28/connecting-power-bi-to-microsoft-graph/

Redoble de tambores peludo

En respuesta a cristianoag


@cristianoag escribió:

…Más detalles disponibles en https://techpeanuts.wordpress.com/2020/05/28/connecting-power-bi-to-microsoft-graph/


404 Pagina no encontrada

¿Quiso decir https://tech-peanuts.com/2020/05/28/connecting-power-bi-to-microsoft-graph/?

jude_moore

En respuesta a cristianoag


@cristianoag escribió:

Documenté un enfoque para que Power BI consuma datos de Graph. Existe una solución que utiliza la autenticación de aplicación explícita para las operaciones que admiten eso y un conector personalizado para las que solo admiten permisos de usuario/delegados. Más detalles disponibles en https://techpeanuts.wordpress.com/2020/05/28/connecting-power-bi-to-microsoft-graph/


Genial gracias @cristianoag

Le echare un vistazo y te aviso. Disculpas. Problema de inicio de sesión

Saludos

Judas

JanBakker

https://janbakker.tech/2020/05/09/use-graph-api-data-in-power-bi-using-logicapps/

Hay una manera fácil de esto. Simplemente use una aplicación lógica para su consulta HTTP y autenticación de juramento.

mranalytics

En respuesta a JanBakker

Por lo que entiendo, la documentación de Microsoft sobre esto, aparentemente, ¡el uso de Graph API en Power BI y en otros casos de uso es «compatible con notas»!

https://docs.microsoft.com/en-us/power-query/connecting-to-graph

talesaritos

¿Este ejemplo de conector funciona solo con la autenticación de la aplicación, es decir, sin un usuario en el contexto que solo usa client_secret de la aplicación?

toneladamcg

Microsoft Graph implementa el flujo de autenticación de OAuth 2.0 y, por lo tanto, para acceder a él con Power BI, deberá crear un conector de datos personalizado. Aquí hay un tutorial que explica paso a paso cómo crear un conector de datos personalizado con OAuth 2.0 para Microsoft Graph en Power BI.

Harsh_Jariwala

En respuesta a toneladamcg

Hola a todos,

Tengo un problema al obtener datos del método getSchedule de la API de Microsoft Graph. Es un método POST.

Power BI me da un error de solicitud incorrecta 400. He registrado una aplicación de Azure AD con todos los permisos necesarios mencionados en la documentación de getSchedule como se muestra a continuación:

Harsh_Jariwala_0-1629971955248.png

Harsh_Jariwala_1-1629972071319.png

También obtengo access_token en Power BI. He escrito debajo del código M Query para llamar a la API:

let 
    token_uri = "https://login.windows.net/" & #"Azure AD Tenant ID" & "/oauth2/token",
    resource="https://graph.microsoft.com",
    tokenResponse = Json.Document(Web.Contents(token_uri,
    [
        Content = Text.ToBinary(Uri.BuildQueryString(
            [
                client_id = #"Azure Application Client ID",
                resource = resource,
                grant_type = "client_credentials",
                client_secret = #"Azure Application Client Secret"
            ]
        )),
        Headers = [Accept = "application/json"],ManualStatusHandling = {400}
    ])),
    access_token = tokenResponse[access_token],
    body= Text.ToBinary("{
        ""schedules"": [
            ""abc.def@ghi.com""
        ],
        ""startTime"": {
            ""dateTime"": ""2021-09-03T00:00:00"",
            ""timeZone"": ""UTC""
        },
        ""endTime"": {
            ""dateTime"": ""2021-09-03T23:59:59"",
            ""timeZone"": ""UTC""
        }
    }"),
    Source = Json.Document(Web.Contents(#"Graph API Base Url" & #"Graph API Url Sub Part",
        [Headers=[#"Authorization"="Bearer " & access_token,#"Content-Type"="application/json;charset=utf-8"],Content=body]))
in
    Source

Recibo el siguiente error:

Harsh_Jariwala_2-1629972329181.png

¿Puede alguien ayudarme con esto?

Cualquier ayuda es muy apreciada.

Gracias.

Redoble de tambores peludo

En respuesta a toneladamcg


@tonmcg escribió:

Aquí hay un tutorial


El enlace está muerto.

jprdynamicapps

En respuesta a toneladamcg

¿Puedes compartir detalles sobre cómo hiciste que esto funcionara?

El código MyGraph arrojó ResourceAccessAuthoriationException.

Lo estoy modificando para usar PKCE (¿es eso lo que usaste?), pero aún no he podido hacerlo funcionar.

Gracias.

-jpr

choque

En respuesta a toneladamcg

Gracias por publicar esta solución aquí. ¿Parece extraño que esto no sea nativo?

iseth

En respuesta a toneladamcg

Hola, esta puede ser una pregunta estúpida, pero ¿cuál sería la identificación del cliente? Por lo que sé, solo lo estoy conectando a Graph API, por lo que no hay ninguna aplicación involucrada.

iseth

En respuesta a iseth

Además, ¿alguien ha intentado hacer algún tipo de tablero de seguimiento de gastos agregando los gastos relacionados con todas las aplicaciones en la nube, como Dropbox, Slack, etc.? @vilmarci @Anonymous @tonmcg

vilmarci

En respuesta a toneladamcg

No estoy seguro de poder preguntar esto aquí, ya que pertenece un poco a esta pregunta, pero ¿cómo puedo usar POST con esta solución? ¿Al igual que la consulta https://graph.microsoft.com/beta/me/calendar/getschedule necesita un encabezado que debo publicar para obtener los datos?

Traté de encontrar la respuesta en la documentación de OData.Feed. Esto dice que puedo agregar los encabezados, pero no hay una sintaxis de cómo hacerlo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *