Cómo consumir una API REST en Power BI con Power Query
Conectar Power BI directamente a una API REST permite traer datos siempre actualizados de servicios web — CRMs, tiendas online o herramientas de marketing — sin exportaciones manuales. Power Query se encarga de la petición HTTP, convierte la respuesta JSON en una tabla y deja todo listo para la actualización automática. Consumir una API REST en Power BI es más sencillo de lo que parece cuando se conoce el patrón correcto con la función Web.Contents.
Requisitos previos
- Power BI Desktop instalado (una versión reciente).
- La dirección base (URL) de la API y el endpoint que quieres consultar.
- Una clave de API o token de acceso, si la API requiere autenticación.
- Conocimientos básicos del Editor de Power Query (Inicio > Transformar datos).
Paso 1: Abrir Power Query y crear una consulta Web
En Power BI Desktop, haz clic en Obtener datos > Web. Elige la opción Avanzadas para separar la dirección base del resto de la petición — este detalle es importante para que la actualización programada funcione más adelante en el Power BI Service. Pon la dirección base en la primera parte de la URL y la ruta del endpoint en el campo de las partes de la URL.
Cuando confirmes, Power Query crea automáticamente un paso con la función Web.Contents. Lo editarás a mano para tener control total sobre las cabeceras y los parámetros.
Paso 2: Escribir la petición con Web.Contents
Abre el Editor avanzado (Inicio > Editor avanzado) y sustituye el código por el patrón de abajo. Fíjate en que la dirección base queda fija mientras que todo lo demás va en RelativePath y Query — así Power BI reconoce el origen de datos y permite la actualización en la nube.
let
Response = Json.Document(
Web.Contents(
"https://api.example.com",
[
RelativePath = "v1/sales",
Headers = [#"Authorization" = "Bearer YOUR_TOKEN", #"Accept" = "application/json"],
Query = [ page = "1", per_page = "100" ]
]
)
)
in
Response
La función Json.Document convierte la respuesta de texto en un registro o una lista que Power Query ya sabe interpretar. Si tu API usa una clave en lugar de un token, cambia la cabecera Authorization por el nombre que indique la documentación (por ejemplo, x-api-key).
Paso 3: Convertir el JSON en una tabla
La mayoría de las APIs devuelven los registros dentro de un campo, por ejemplo data. Extrae esa lista y conviértela en una tabla con columnas legibles:
let
Response = Json.Document(Web.Contents("https://api.example.com",
[ RelativePath = "v1/sales",
Headers = [#"Authorization" = "Bearer YOUR_TOKEN"],
Query = [ page = "1", per_page = "100" ] ])),
Items = Response[data],
ToTable = Table.FromList(Items, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
Expanded = Table.ExpandRecordColumn(ToTable, "Column1", {"id", "customer", "total"})
in
Expanded
Ajusta los nombres id, customer y total a los campos reales de tu API. A partir de aquí puedes usar la interfaz gráfica de Power Query para cambiar tipos de datos, quitar columnas y filtrar filas.
Paso 4: Gestionar la paginación
Las APIs rara vez devuelven todo de una vez. Para recorrer todas las páginas usa List.Generate, que repite la petición hasta que una página llega vacía:
let
GetPage = (p as number) as list =>
let
r = Json.Document(Web.Contents("https://api.example.com",
[ RelativePath = "v1/sales",
Headers = [#"Authorization" = "Bearer YOUR_TOKEN"],
Query = [ page = Text.From(p), per_page = "100" ] ]))
in
r[data],
Pages = List.Generate(
() => [i = 1, rows = GetPage(1)],
each List.Count([rows]) > 0,
each [i = [i] + 1, rows = GetPage([i] + 1)],
each [rows]
),
AllRows = List.Combine(Pages)
in
AllRows
El resultado es una única lista con los registros de todas las páginas, lista para convertir en tabla igual que en el paso anterior. Adapta la condición de parada a tu API: algunas devuelven un campo next o el total de páginas, que puedes usar en lugar de comprobar si la lista está vacía.
Consejo de seguridad: evita escribir el token directamente en el código. En producción, cuando Power BI pida credenciales, elige Clave de API web u OAuth. Así la clave se guarda de forma segura y no viaja dentro del archivo .pbix.
Verificar el resultado
Comprueba que la columna expandida muestra los datos esperados en la vista previa de Power Query. Haz clic en Cerrar y aplicar y crea un objeto visual sencillo, como una tabla, para ver las filas en el informe. Por último, prueba la actualización con Inicio > Actualizar: si los datos vuelven sin errores de credenciales, la petición está bien configurada. Si aparece el error habitual "Access to the resource is forbidden", revisa el token y la cabecera Authorization.
Conclusión
Con Web.Contents, Json.Document y List.Generate tienes todo lo necesario para convertir casi cualquier API REST en un origen de datos actualizable en Power BI. El siguiente paso es publicar el informe en el Power BI Service y configurar la actualización programada — ¿te fijaste en cómo el patrón RelativePath lo hace posible? Pruébalo ahora con una API pública, por ejemplo de tipos de cambio o de meteorología, para practicar sin depender de credenciales.