Saltar al contenido principal

Microsoft Power BI

Microsoft Power BI es una herramienta de análisis de datos que permite a los usuarios crear informes y visualizaciones de datos a partir de una amplia variedad de fuentes de datos. Los datos extraídos de la API de FlexxAnalyzer se pueden cargar en Power BI para crear informes y paneles de control.

Introducción

El objetivo de este ejemplo es mostrar cómo cargar datos desde la API de FlexxAnalyzer a Power BI, prestando especial atención en la autenticación y el uso de la paginación.

El ejemplo no entra en detalle sobre cómo usar Power BI, cómo crear visualizaciones, modelos u otras funciones propias de Power BI. Para obtener más información sobre Power BI, consulta la documentación de Microsoft.

Requisitos

Para poder seguir este ejemplo, debes tener acceso a una instancia de FlexxAnalyzer y a Power BI Desktop.

Datos de FlexxAnalyzer

Los datos de FlexxAnalyzer necesarios son:

  • URL de la API: la URL de la API de FlexxAnalyzer, que depende de la región donde está alojada tu organización. Las URLs de cada región pueden consultarse en la sección de Regiones.
  • Customer ID y Access Token: estos datos se pueden obtener en la sección Settings de FlexxAnalyzer. Para más información sobre estos parámetros, consulta la sección Autenticación.

Power BI Desktop

Para poder seguir este ejemplo debes tener instalado Power BI Desktop en tu equipo. Puedes descargarlo desde la página de descarga de Microsoft o desde la Microsoft Store.

No es necesario una versión de pago de Power BI para poder seguir este ejemplo, aunque utilizar la versión Pro o Premium te permitirá acceder a más funciones, como compartir informes con otros usuarios o publicarlos en la nube.

Esta documentación se ha generado utilizando la versión 2.99.862.0 64-bit (November 2021) de Power BI Desktop en Windows 11.

Paso a paso

La siguiente lista ofrece una descripción general de los pasos que vamos a seguir en el ejemplo para cargar datos desde la API de FlexxAnalyzer a Power BI:

  1. Crear un nuevo documento en Power BI Desktop.
  2. Crear los parámetros de conexión.
  3. Crear la consulta de Power Query.
  4. Mejorar la consulta para soportar la paginación.
  5. Seleccionar los datos a cargar.
  6. Revisar el modelo de datos.

Crear un nuevo documento en Power BI Desktop

Para crear un nuevo documento en Power BI Desktop, haz clic en el botón New en la barra de herramientas. En la ventana emergente, selecciona la opción Blank Query y haz clic en el botón Connect.

Crear los parámetros de conexión

Una vez en la ventana Power Query Editor, debemos crear un total de cuatro parámetros. Para crear un nuevo parámetro haz clic en el botón Manage dentro de la sección Query de la cinta y selecciona la opción Parameters.

También puedes crear parámetros desde la barra lateral, haciendo clic con el botón derecho del ratón en una zona vacía de la barra y seleccionando la opción New Parameter.

Necesitaremos crear un total de cuatro parámetros con los siguientes nombres y valores:

  • AuthUrl: La URL de la API de FlexxAnalyzer, que depende de la región donde está alojada tu organización, seguida de /login. Las URLs de cada región pueden consultarse en la sección de Regiones. Por ejemplo: https://west-eu.api.flexxanalyzer.com/api/v4/login
  • BaseUrl: La URL de la API de FlexxAnalyzer, que depende de la región donde está alojada tu organización. Por ejemplo: https://west-eu.api.flexxanalyzer.com/api/v4
  • CustomerId: El Customer ID de tu organización.
  • AccessToken: El Access Token de tu organización.
caution

Asegúrate de que las URLs de AuthUrl y BaseUrl no terminen con /.

Los parámetros deberían configurarse con los valores por defecto, excepto el valor Type que debe ser Text.

Aunque no es necesario, se aconseja crear un grupo para los parámetros. Para crear un grupo, haz clic con el botón derecho del ratón en una zona vacía de la barra lateral y selecciona la opción New Group. A continuación, arrastra los parámetros dentro del grupo.

Crear la consulta de Power Query

En la barra lateral de la ventana Power Query Editor, se mostrará una consulta por defecto llamada Query1. Para cambiarle el nombre, haz clic con el botón derecho del ratón sobre la consulta y selecciona la opción Properties. En el cuadro emergente que se muestra, cambia el nombre de la consulta a Users y haz clic en el botón OK.

A continuación, editaremos esta consulta para cargar los datos de los usuarios de la organización que han enviado datos a FlexxAnalyzer. Para ello, selecciona la consulta en la barra lateral y haz clic en el botón Advanced Editor en la cinta.

Se nos mostrará una consulta prácticamente vacía. Vamos a sustituir el contenido de la consulta por el siguiente código. Tras copiar el código, asegúrate de pulsar el botón Done.

let
// Authentication request
AuthBody = "{""customer_id"": """ & CustomerId & """, ""access_token"": """ & AccessToken & """}",
AuthQuery = Web.Contents(AuthUrl, [
Headers=[#"Content-Type"="application/json"],
Content=Text.ToBinary(AuthBody)]
),
AuthResponse = Json.Document(AuthQuery),
token = AuthResponse[token],
BearerHeader = "Bearer " & token,


// Get user data from API
APIEndpointURL = BaseUrl & "/ad-users?page=1&perPage=20",
Query = Json.Document(Web.Contents(APIEndpointURL, [Headers=[Authorization=BearerHeader, #"customer-id"=CustomerId]]))
in
Query

Este código realiza las siguientes acciones:

  1. Obtiene un token de acceso a la API de FlexxAnalyzer y establece la cabecera de autenticación que se usará para la siguiente consulta. Puedes encontrar más información sobre el endpoint de la API que se utiliza en la sección Get Authentication Token.
  2. Obtiene los datos de los usuarios de la organización que han enviado datos a FlexxAnalyzer. Puedes encontrar más información sobre el endpoint de la API que se utiliza en la sección Get Users.

Es posible que al ejecutar la consulta por primera vez se muestre una notificación sobre privacidad en el acceso a los datos. Para continuar, haz clic en el botón Continue y asegúrate de seleccionar en la lista desplegable un valor acorde con la política de privacidad de tu organización.

Si la consulta ha funcionado correctamente, se mostrará un resultado con dos filas: success y data. El valor de Success debería ser TRUE.

Si exploramos los datos de la consulta, podremos ver que únicamente se muestran los primeros 20 usuarios. La API de FlexxAnalyzer devuelve los resultados paginados, por lo que para obtener todos los usuarios de la organización, deberemos realizar múltiples peticiones a la API.

Dentro de los datos también podemos observar el valor totalCount que indica el número total de usuarios de la organización que han enviado datos a FlexxAnalyzer. Utilizaremos ese dato para realizar múltiples peticiones a la API y obtener todas las páginas de resultados.

Mejorar la consulta para soportar la paginación

Para mejorar la consulta y soportar la paginación, vamos a convertir el código del ejemplo anterior en una función que realice múltiples peticiones a la API de FlexxAnalyzer y devuelva todos los usuarios de la organización.

Puedes obtener más información sobre como funciona la páginación de tipo offset en la API de FlexxAnalyzer en la sección Paginación.

Selecciona de nuevo la consulta en la barra lateral y haz clic en el botón Advanced Editor en la cinta. A continuación, sustituye el contenido de la consulta por el siguiente código. Tras copiar el código, asegúrate de pulsar el botón Done.

let
Users =
let
// Authentication request
AuthBody = "{""customer_id"": """
& CustomerId
& """, ""access_token"": """
& AccessToken
& """}",
AuthQuery = Web.Contents(
AuthUrl,
[Headers = [#"Content-Type" = "application/json"], Content = Text.ToBinary(AuthBody)]
),
AuthResponse = Json.Document(AuthQuery),
token = AuthResponse[token],
BearerHeader = "Bearer " & token,


// Get user data from API
CallApi = (Page, Limit) =>
let
APIEndpointURL = BaseUrl
& "/ad-users?page="
& Number.ToText(Page)
& "&perPage="
& Number.ToText(Limit),
Query = Json.Document(
Web.Contents(
APIEndpointURL,
[Headers = [Authorization = BearerHeader, #"customer-id" = CustomerId]]
)
),
data = Query[data]
in
data
in
let
Iterate =
let
FirstResult = CallApi(1, 1),
TotalItems = FirstResult[totalCount],
Range = {1 .. Number.RoundUp(TotalItems / 20)},
AllPages = List.Transform(Range, each CallApi(_, 20))
in
AllPages
in
Iterate
in
Users

Este código realiza las siguientes acciones:

  1. Obtiene un token de acceso a la API de FlexxAnalyzer y establece la cabecera de autenticación que se usará para la siguiente consulta.
  2. Obtiene el número total de usuarios de la organización que han enviado datos a FlexxAnalyzer.
  3. Realiza tantas peticiones a la API de FlexxAnalyzer como sean necesarias para obtener todos los usuarios de la organización: cada una de las peticiones devuelve 20 usuarios, por lo que el número total de páginas a consultar es el número total de usuarios de la organización dividido entre 20 y redondeado hacia arriba.

Si la consulta ha funcionado correctamente, se mostrará un resultado con varias filas, tantas como páginas de resultados haya obtenido la consulta.

Seleccionar los datos a cargar

Para finalizar, vamos a seleccionar los datos que queremos cargar en Power BI. En este proceso de transformación, vamos a convertir a tabla los resultados de las consultas y seleccionar las columnas que queremos cargar en nuestro modelo.

Para ello, justo después del paso anterior, debemos hacer clic sobre el botón To Table en la cinta. A continuación, debemos hacer clic sobre el botón Expand en el título de la columna Column1 y seleccionar la columna results.

Deberemos realizar dos veces más el mismo proceso de Expand. El primero seleccionando la opción Expand to new rows y el segundo seleccionando la lista de columnas que queremos incluir en el modelo.

Con la tabla de usuarios ya en pantalla, podemos cambiar el título de las columnas para darles un valor más descriptivo. Para ello, podemos hacer doble clic sobre el nombre de la columna y escribir el nuevo nombre.

Una vez completado ese proceso, es momento de hacer clic en Close & Apply en la cinta, para cerrar la ventana de transformación, guardar la consulta y aplicar los cambios.

Revisar el modelo de datos

Tras completar el proceso de transformación, podemos revisar el modelo de datos que hemos creado. Para ello, debemos hacer clic sobre el botón Model en la barra lateral de la ventana principal de Power BI Desktop. Podemos comprobar que se ha creado la entidad Users con los datos que hemos cargado.

Próximos pasos

En este tutorial hemos visto cómo crear un modelo de datos en Power BI Desktop a partir de los datos de FlexxAnalyzer. Este ejemplo, sin embargo, tiene todavía muchas oportunidades de mejora, tanto a nivel de rendimiento como de funcionalidad.

Visualización de datos

En este ejemplo hemos cargado los datos en el modelo de datos, pero no hemos creado ninguna visualización. En caso de que queramos realizar visualizaciones de los datos, podemos utilizar las herramientas de visualización de Power BI Desktop para crear informes y paneles de control según requiera nuestra organización.

Si se dispone de una licencia Pro o Premium de Power BI, también es posible publicar los informes y paneles de control en la nube, para que puedan ser consultados por cualquier usuario de la organización.

Consulta de autenticación

En este ejemplo, hemos realizado una consulta para obtener un token de acceso a la API de FlexxAnalyzer. Este token tiene una caducidad de varios días, por lo que no es necesario realizar esta consulta cada vez que se actualice el modelo de datos.

Para evitar realizar esta consulta cada vez que se actualice el modelo de datos, podemos separar la consulta de autenticación en su propia función, guardar el token en una variable y utilizarlo en las consultas posteriores.

Gestión de errores

En este ejemplo no hemos gestionado los errores que se pueden producir en las consultas a la API de FlexxAnalyzer. En caso de que se produzca un error, el modelo de datos no se actualizará y no se mostrará ningún mensaje de error.

Para evitar este problema, podemos utilizar la función try para capturar los errores que se produzcan en las consultas a la API de FlexxAnalyzer y mostrar un mensaje de error en caso de que se produzca un error.

Consulta de datos

En este ejemplo únicamente hemos cargado datos de usuario en el modelo de datos. En caso de que queramos realizar consultas sobre otros datos de FlexxAnalyzer, podemos separar la función de consulta de datos en su propia función y utilizarla en las consultas posteriores sin tener que repetirla cada vez.

Carga de datos incremental

En este ejemplo, hemos cargado todos los datos de usuario de FlexxAnalyzer en el modelo de datos. En caso de que el modelo de datos se actualice con frecuencia, este proceso puede ser muy costoso en términos de tiempo y recursos.

Algunos de los datos de FlexxAnalyzer, como los datos de los usuarios, no cambian con frecuencia. En este caso, podemos utilizar la carga incremental para cargar esos datos en el modelo y actualizarlos únicamente cuando sea necesario.

Conclusiones

Power BI Desktop, al igual que otras herramientas de bussiness intelligence, nos pueden ayudar a mostrar los datos de FlexxAnalyzer de una manera más acorde con lo que necesita nuestra organización.

Aunque la aplicación web de FlexxAnalyzer muestra los datos de forma muy visual, Power BI Desktop nos permite explotar esos mismos datos de una manera mucho más flexible, permitiéndonos crear informes y paneles de control personalizados para cubrir otras necesidades más particulares.