Power BITutorialesUncategorized

Tutorial Power BI: Conectar con origen de datos REST API

Empezamos el año con un nuevo tutorial de Power BI que os permitirá acceder a múltiples soluciones online a través de la API de sus fabricantes.

En meses anteriores, hemos realizado paneles que obtenían datos de servicios en línea como Power BI para Spotify o Power BI para Strava, pero siempre descargábamos los datos en local y luego los analizábamos con Power BI.

Hoy ha llegado el día en que aprenderemos a conectar directamente vía la API del fabricante, lo que supone muchas ventajas:

  • No tendremos que solicitar la descarga de datos para poder actualizar nuestro panel.
  • Podremos acceder y actualizar los datos en el momento.
  • Podremos programar la actualización de datos para tener siempre datos actualizados sin intervención manual.

¿Qué es una API?

Actualmente, muchos servicios y soluciones que utilizamos en nuestro día a día personal o profesional están creados en la nube y accedemos a ellos vía web.

En estos casos no tenemos un acceso directo a nuestros datos y es por ello que el fabricante suele desarrollar un acceso controlado a los datos a través de una API. Normalmente la API no sólo permite leer nuestros datos, sino también crear nuevos o editar los existentes.

Con ello se consigue que otras soluciones complementarias puedan interactuar entre si. Por ejemplo, Strava tiene conexión con diferentes fabricantes de relojes deportivos para que puedan enviar y actualizar datos de los ejercicios realizados. De igual modo, Spotify interactua con Shazam para que la música que descubres en esta app la puedas incluir en tu lista de Spotify.

No voy a entrar en como funcionan por dentro las APIs porque cada una funciona de manera diferente, pero vamos a basar el tutorial en un caso muy común: una API web que necesita de un token/key de autorización y devuelve los datos en formato JSON.

Construyendo un panel de Power BI con los resultados de La Liga 19-20 vía API

Obtener Key de la API

En este tutorial vamos a utilizar la API proporcionada por Football Data con toda la información de las diferente Ligas de fútbol.

Para poder usarla podéis registraros gratuitamente y con ello recibiréis un mail con vuestro TOKEN/KEY personal para poder conectar con la API:

Mail de registro con Token
Mail de registro con Token

En cada caso, tendréis que consultar la documentación de la API, porque cada fabricante la configura y da acceso a datos de forma diferente. En este caso tenéis la documentación completa en este link.

Accediendo a la API desde Power BI

Una vez tenemos nuestro Token, podemos abrir un informe en blanco de Power BI Desktop y elegir “Obtener Datos” y como origen de datos “Web“. En la ventana emergente, nos preguntará la URL a la que queremos conectarnos:

Pantalla Emergente origen de datos WEB
Pantalla Emergente origen de datos WEB

Como os he comentado en el punto anterior, no podemos introducir la url de la API sin más, ya que requiere de una autentificación via Token/Key que es necesario pasar en la cabecera de la petición de datos. Según la documentación de la API de football-data.org el parámetro que debemos pasar es:

Parámetro de autentificación de la API
Parámetro de autentificación de la API

Antes de introducir la URL pulsamos la opción “Uso Avanzado” que nos dará las opciones adicionales que necesitaremos.

En este primer paso, vamos a solicitar los datos de la lista de equipos de Primera de la temporada actual (en estos datos es la temporada con id 2014):

Conexión vía API a través de origen de datos web
Conexión vía API a través de origen de datos web

Como veis, sólo hay que indicar la url que obtenemos de la documentación y el nombre del parámetro de autentificación y su valor (en este caso el token que nos han enviado por mail).

Cada API es diferente, por lo que el parámetro de autentificación, que en este caso se llama X-Auth-Token ,en otras APIs se llamará Key o APIKey o quizás haya que pasar 2 parámetros. Por eso, es muy importante leer previamente la documentación de la API.

Con esta conexión recibiremos el fichero JSON en Power BI que tendrá este aspecto:

Resultado JSON de la consulta de equipos
Resultado JSON de la consulta de equipos

Como veis, no es la tabla que esperábamos, hay que hacer unas transformaciones básicas.

Transformando el fichero JSON en una tabla

Lo primero es usar la opción “Convertir en Tabla” que aparece en la parte superior izquierda:

Opción de Convertir en Tabla
Opción de Convertir en Tabla

El resultado será el siguiente:

Opción Transponer
JSON transformado en tabla

Ahora necesitamos Transponer, ya que lo que queremos que sean campos o columnas ahora lo tenemos en filas y seguramente necesitemos también Usar la primera fila como encabezado:

Opción Usar Primera Fila como encabezado
Opción Usar Primera Fila como encabezado

Tras estas 2 transformaciones básicas, obtendremos lo siguiente:

Empezando a desglosar el fichero JSON
Empezando a desglosar el fichero JSON

Como veis, es un sólo registro con algunos campos. En algunos pone “Record” y en otros “List“. Si pulsamos la doble flecha de cada uno de estos campos se ira desgranando la información del fichero de Equipos del JSON.

La diferencia entre Record y List es la siguiente:

  • RECORD: despliega varios campos pero dentro del mismo registro
  • LIST: despliega varios campos como filas (nuevos registros)

Una vez hayamos desglosados los campos necesarios, tendremos ya una tabla reconocible:

Tabla de Equipos de La Liga
Tabla de Equipos de La Liga

En el ejemplo que presento en este tutorial hemos realizado este mismo proceso para las siguientes entidades de la API:

  • Equipos: http://api.football-data.org/v2/competitions/2014/teams
  • Temporada: http://api.football-data.org/v2/competitions/2014
  • Partidos: http://api.football-data.org/v2/competitions/2014/matches
  • Cifras del equipo: http://api.football-data.org/v2/competitions/2014/standings

Algunos trucos: Puntos a tener en cuenta

He duplicado la tabla de partidos para tener una de partidos como local y otra de partidos como visitante. Era la manera más fácil de filtrar por el equipo y que pudiese mostrar todos los partidos de ese equipo.

Aparte, fijaos que la tabla de equipo tiene una url del escudo de cada club. Recordad el tutorial para mostrar imágenes en tabla. El link al escudo del Leganés y del Getafe no funcionan y he tenido que reemplazar las urls.

El panel de Power BI con los resultados de La Liga

Como resultado de el trabajo explicado anteriormente y con un poco de dedicación al diseño del informe, he diseñado el siguiente panel de La Liga para que interactueis con él:

Conclusiones

La conectividad con APIs web sin necesidad de codificar en Python, C, Java u otro lenguaje de programación nos abre las puertas a millones de datos disponibles vía API web.

Os animo a probarlo, y ya sabéis que si os suscribís a la newsletter del blog tendréis acceso cada mes a los fichero originales pbix de todos los post y tutoriales que he realizado.

¡SUSCRÍBETE YA!
Doy mi consentimiento para almacenar mis datos para envío de newsletters.
Si te suscribes a la newsletter tendrás acceso a los <b><u>ficheros Power BI originales</u></b> de nuestros tutoriales y post. <br><br>Además tendrás derecho a participar en sorteos periódicos que realizaremos en el blog.
We hate spam. Your email address will not be sold or shared with anyone else.
Mostrar más

Iván Arribas

Llevamos siglos generando, relacionando, modificando y almacenando datos....es hora de que les echemos un vistazo. Espero que este blog sirva de ayuda a los que quieran introducirse en este mundo de la Analítica de Datos, igual que me está sirviendo a mi.

Publicaciones relacionadas

34 comentarios

  1. Como estas?, intente hacer el turorial para obtener los datos pero no pude, la opcion avanzada de web no tengo habilitado el header x- auth – Token, he buscado y no encontrado como habilitarlo, agradezco si me lo pueden informar saludos

    1. Hola Juan Camilo,

      ¿Puedes compartir como te aparece la pantalla de la opción avanzada de conexión web? De esa forme será más fácil darte la solución.

      Gracias por participar con tu comentario y por visitar nuestro blog!

    2. Juan, si la opción no aparece en el desplegable del campo puedes excribir el nombre del parámetro directamente.

      Espero que esta respuesta de sirva, si no es así comentámelo y seguimos buscando la respuesta.

      1. Muchas gracias Ivan, después me di cuenta que se podía escribir, pude obtener los datos, muy interesante lo que haces y soy principiante pero con ganas de aprender saludos

  2. Buenas tardes!

    Salud…Me pasa lo mismo que a Juan no veo el header x-auth en las opciones avanzadas. Te lo he explicado más detalladamente atrevas del formulario de contacto.
    Como se habilita?

    Gran aporte y muy interesante para obtener datos sin meter código…lo tenia en python pero esto es más util y practico
    Saludos

    1. Hola Luis,

      gracias por el e-mail con el detalle.

      Como comento en el tutorial, cada API tiene su propio funcionamiento y parámetros. En el formulario de conexión WEB, en el campo “Parámetros de encabezado de solicitud HTTP” existen varias opciones en el desplegable del campo, pero si el nombre del parámetro de tu API no está puedes escribirlo directamente.

      Espero que esta respuesta te sirva de ayuda.

  3. Buenas tardes!

    Estoy tratando con una API parecida, en la que también nos conectamos mediante Key. El problema lo tenemos a la hora de realizar el refresco de los datos desde el servicio de Power BI, pues no hay opción de introducir la key por ningún lado con lo que nos arroja el error de que las credenciales son inválidas (intentamos con el usuario anonymous).

    Un saludo
    Félix Zúñiga

    1. Hola Félix,

      Antes de nada, gracias por leernos!

      En cuanto al problema que planteas, cuando publicas en powerbi.com un origen de datos que tiene variables como la Key de la API puede dar errores. El problema es que powerbi.com hace un “test de conexión” previo, pero sólo utiliza la url base, sin los parámetros y por eso da error. Para que no haga esta “prueba previa” debes marcar en la Actualización Programada, en cada dataset el parámetro “Omitir conexión de prueba”.

      Te dejo un link a una imagen del parámetro para que puedas encontrarlo de manera más fácil: https://vandalytic.com/wp-content/uploads/2020/04/Omitir-conexión-de-prueba.jpg

  4. hola amigo! como puedo progamar la actualizacion de datos? considerando que los resultados cambian semana a semana, no encuentro el menu o donde haceerlo

    1. Hola Daniel,

      Para poder actualizar los datos del informe de forma automática, primero debes publicar tu informe en powerbi.com.

      Una vez lo hecho, debes ir al área de trabajo donde lo hayas publicado (por defecto “Mi área de Trabajo”) y pulsar en la pestaña “Conjuntos de Datos y Flujos de Datos”. Allí encontrarás los conjuntos de datos de todos tus informes publicados, y si te sitúas en el informe quequieres actualizar, podrás pulsar en el icono de la carpeta y programar la actualización.

      Te dejo una captura de pantalla por si te sirve de ayuda: https://vandalytic.com/wp-content/uploads/2020/07/Programar-actualización.png

      Un saludo!

  5. Hola Iván,
    Muchas gracias por tu post. Leyendo entre los comentarios he solucionado el problema de actualización automática de mis datasets.
    Ahora me estoy encontrando con un problema que igual me puedes ayudar a resolver. Estoy intentando conectarme a la API de una herramienta de contabilidad, y en las especificaciones de autenticación indica lo siguiente:

    “Calls made over plain HTTP will fail. API requests without authentication will also fail. ?”

    A la hora de introducir el header en Power BI para hacer la llamada, sólo me permite introducir parámetros de encabezado de solicitud HTTP. Sin embargo el mensaje de ayuda dice: “Para usar encabezados de forma segura para la autenticación, use HTTPS”. ¿Sabes cómo puedo usar parámetros HTTPS en lugar de HTTP?
    Muchísimas gracias y felicidades `por tu trabajo!

    1. Hola Ignacio,

      gracias por tu comentario.

      ¿Estás introduciendo la url de la API con https en vez de http? No conozco el detalle de la aplicación de contabilidad, pero quizás si usas la API url con el inicio “https” en vez de “http” ya funcione.

      Dime si se ha solucionado el problema o si puedes darme más detalle para poder ayudaros.

      Un saludo,

  6. Hola Ivan,

    Tengo una conexión similar a la que has explicado (web service con toke, pero el token caduca cuando transcurre una hora. Por tanto, cuando actualizo en powerbi me dice que las credenciales no son válidas. Y además, no soy capaz de acceder de nuevo a la configuración de la conexión para introducir el nuevo token… alguna idea?

    1. Hola Alfonso,

      en tu caso es un poco más complicado porque por seguridad los tokens caducan. En estas situaciones se suele lanzar un proceso anterior a la actualización para solicitar el token.

      Seguramente en la documentación del fabricante encontrarás la url para solicitar un nuevo token. Te sugiero que hagas una primera importación de datos con esa url para traer a una tabla o variable ese token y luego lo uses en el proceso de actualización de datos.

      En cuanto a cómo actualizar o cambiar la conexión puedes hacerlo en la pantalla de “Transformar Datos” o en “Configuración de Orígenes de Datos” desde Power BI Desktop.

      Espero haberte ayudado!

      1. Gracias Ivan,
        Efectivamente tengo el proceso de obtención de tokens en postman y puedo importar el token a powerbi. Pero no sé cómo convertirlo en una variable que pueda utilizar al configurar los parámetros de la consulta a datos….
        gracias por tu ayuda!

      2. Gracias Ivan,
        Pero los parametros de la url, donde yo pongo un header x-token con el token que me devuelve postman no me aparecen cuando voy a “configuración de origenes de datos”..

        Conoces algún script para automatizar la petición de token y meterlo en la consulta powerbi?

        gracias!

        1. Tienes razón Alfonso,

          debes usar la otra opción que comentaba. Ir a Transformar datos (el editor de power query) y seleccionar la tabla y pulsar en “Editor Avanzado” y allí verás y podrás cambiar el token. Te dejo una imagen:

          Token API

        2. Amigo alfonso, has podido solucionar el tema, tengo el mismo problema de que al hacer la actualizacion me pide nuevamente la autenticación, encontraste como solucionar el tema?

  7. OK! gracias mil!
    entonces, está claro que el mejor método es crear una variable con el token que nos devuelve la llamada de petición de tokens..

    Ahora bien, dónde ejecuto este método para obtener el token:? Esta es la llamada que utilizo en postman:

    POST /login/application/ HTTP/1.1
    Content-Type: application/json

    {“Name”:”micros”, “Key”:”longstringasyourpasscodegeneratedfromtheapplication”}
    Response (JSON)

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8

    {“DefaultDepartmentId”:””,
    ” DefaultDepartmentName “:””,
    “DefaultCompanyId”:””,
    “DefaultCompanyName”:””,
    “Email”:””,
    “Password”:””,
    “Role”:”Application”,
    “MenuId”:”5″,
    “SessionToken”:”e2c152f3-49ea-4b50-948b-bc0520261737″}

  8. Hola Ivan,
    Gracias por compartir tan interesante aplicación.
    Logré la conexión y armar el reporte, ahora bien al publicarlo en powerbi y dejar configurado la actualizacion aútomatica el sistema da un error al URL y entre las opciones de authentication no colocan la que comentas de WEB avanzada, “omiti hacer el test” pero no refrescan los datos, se entiende?
    Te sucedi´o algo similar?

    1. Hola Federico,

      cuando publicas el informe el powerbi.com, debes ir al “Conjunto de Datos” y en Credeciales, clickas sobre Editar credenciales y verás el parámetro de omitir prueba:

      Omitir conexión de prueba

  9. Buenos ´días Iván,
    En mi caso necesito pasar al servicio, además del token, un json con una serie de parámetros.
    He probado a incluirlo en la lista de parámetros, pero no he conseguido que funcione.
    ¿Se te ocurre cómo puedo hacerlo?
    Gracias!

    1. Hola Beatriz,

      no se me ha dado el caso de tener que pasar un JSON como parámetro al conectar con APIs, pero he encontrado este post en la Comunidad de Power BI.

      La idea es pasar el formato JSON como si fuese un texto, con una parte fija y otra basada en campos texto.

      Espero que te ayude.

      Un saludo,

  10. Hola Iván!
    Muy interesante tu POST, he estado intentando conectarme a una API desde POWER BI, pero también necesito pasar como párametro el COOKIE, ya que este cambia cada ves que se realiza una consulta, alguna idea de como puedo hacer esto.

    = Json.Document(Web.Contents(“https://myapp.example.com/api/test.php”, [Headers=[Cookie=”PHPSESSID=123abc”]]))

    He intentado con esto, pero me devuelve un error 500.

    Muchas gracias

    1. Hola David,

      siento el retraso en la respuesta.

      No he tenido este caso anteriormente. Si la API pide una comunicación previa para obtener una clave actualizada, quizás puedas hacer una primera llamada a la API para obtener la clave o cookie. La guardas en un parámetro y usas este parámetro en una segunda llamada.

      Un saludo,

    1. Hola Miguel,

      he echado un vistazo a la documentación de la API de SurveyMonkey y no debería dar problemas. Si te encuentras con algún problema escríbeme y tratamos de solucionarlo.

      Gracias por leernos!

Deja una respuesta

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

Información básica sobre protección de datos Ver más

  • Responsable: Iván Arribas Delgado.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a Bluehost que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Botón volver arriba
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Ver
Privacidad