Forum Discussion
API de REST que se conecta a Power BI
Hola equipo,
Estoy intentando conectar la API de Rest a Power BI. Actualmente estoy usando la siguiente consulta tratando de conectarme a través de "Consulta en blanco"
Pero la consulta a continuación proporciona solo 10k registros. Además, cuando intento conectarme a la web, no estoy seguro de los detalles de la "Clave" para conectarme
vuelo
Fuente = Json.Document(Web.Contents("https://-------------------PageNumber=1&PageSize=50000",
[
Encabezados = [
#"aceptar" = "*/*",
#"x-api-key" = "------------------"
]
]
))
en
Fuente
Al intentar conectarse a través de WEB, no está seguro de qué tipo de detalles clave deben agregarse aquí.
Por favor, consejos
Cualquier ayuda es muy agradecida.
Gracias
Vishant
11 Replies
- Syndicate_AdminAdministrator
¿Qué API REST es esa? ¿Viene con documentación?
- Syndicate_AdminAdministrator
Así es, tengo que consultar la documentación a través de la API de Swagger, ¿esto ayuda?
- Syndicate_AdminAdministrator
¿Tiene un enlace a la documentación?
- Syndicate_AdminAdministrator
Hola @toovishant,
Gracias por ponerse en contacto con la comunidad de Microsoft Fabric y gracias a @lbendlin por sus valiosas aportaciones en este hilo.
En la captura de pantalla, parece que está intentando usar el conector web en Power BI y no está seguro de qué escribir en el campo Clave en Autenticación de API web.
Dado que ya ha logrado llamar correctamente a la API mediante una consulta en blanco con Web.Contents y un encabezado x-api-key personalizado, está absolutamente en el camino correcto. A menudo se prefiere este enfoque cuando se trabaja con API que requieren encabezados personalizados, que la interfaz del conector web estándar no siempre admite bien.
Si aún desea explorar el uso de la interfaz de usuario del conector web, puede continuar a continuación:
- Seleccione Web API como método de autenticación.
- En el campo Clave, introduzca el valor de la clave de API (sin comillas).
- Sin embargo, tenga en cuenta que algunas API (como la suya) requieren que la clave se pase mediante un encabezado personalizado (por ejemplo, x-api-key). Es posible que el conector web no lo permita directamente, en cuyo caso, el método actual que usa Web.Contents en una consulta en blanco sigue siendo la opción más flexible y confiable.
Por favor, consulte los enlaces de los documentos mencionados a continuación para una mejor comprensión:
Conector web de Power Query - Power Query | Microsoft Learn
Web.Contents - PowerQuery M | Microsoft Learn
Con respecto al límite de 10.000 registros: es probable que la razón por la que solo recibe 10.000 registros se deba a la configuración de paginación impuesta por la API. La mayoría de las API de REST usan parámetros como PageNumber, offset o nextLink para devolver datos en fragmentos o páginas.Ya que mencionaste que la API está documentada usando Swagger, te recomiendo que revises cómo se maneja la paginación allí. Una vez que identifique el parámetro correcto (p. ej., ? PageNumber=2, ?offset=10000, etc.), podemos ayudarle a escribir una consulta en Power BI para recorrer todas las páginas y recuperar el conjunto de datos completo.
Si tiene alguna pregunta al respecto, no dude en ponerse en contacto con nosotros. Estaremos encantados de ayudarte. Si esta publicación ayuda, entonces por favor danos 'Felicitaciones' y considera Acéptalo como una solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Gracias por usar el Foro de la comunidad de Microsoft.- Syndicate_AdminAdministrator
@v-kpoloju-msft - Solicite su ayuda. Después de verificar, veo que hay una limitación y necesito solicitar la segunda página y así sucesivamente, cambiando los parámetros a la url. ¿Sabes si puedo crear un bucle para obtener estos datos con la misma consulta?
Gracias
Vishant
- Syndicate_AdminAdministrator
Aquí intenté crear un bucle para obtener todo el conjunto de datos de Page. Pero esto no está funcionando, por favor, ¿puede guiar si esto tiene que ser refinado o es este el enfoque que tengo que usar?
dejar
Función para obtener datos de un número de página determinado
FetchPage = (PageNumber como número) =>
dejar
Fuente = Json.Document(Web.Contents("https://---------------ces",
[
Consulta = [PageNumber = Text.From(PageNumber), PageSize = "10000"],
Encabezados = [
#"aceptar" = "*/*",
#"x-api-key" = "-------------"
]
]
)),
Datos = Fuente[resultados]
en
DatosInicializar variables
Tamaño de página = 10000,
MaxPages = 10, // Suponiendo que la API se limita a 10 páginas
Número de página = 1,
Resultado = FetchPage(PageNumber),
AllData = Resultado,Bucle para obtener todas las páginas dentro del límite
Bucle = Lista.Generar(
() => [PageNumber = 2, Result = FetchPage(2)],
cada [PageNumber] <= MaxPages y List.Count([Resultado]) > 0,
cada [PageNumber = [PageNumber] + 1, Result = FetchPage([PageNumber])],
cada [Resultado]
),Combinar todas las páginas
CombinedData = List.Combine({AllData} & Loop),Convertir en tabla y expandir columnas
#"Convertido en Tabla" = Tabla.FromList(CombinedData, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
en
#"Convertido en tabla"Gracias
Vishant
- Syndicate_AdminAdministrator
Hola @toovishant,
Gracias por compartir los detalles y guiarnos a través de su enfoque.
A partir de su explicación, parece que está intentando recorrer varias páginas de una API de REST mediante List.Generate, que es una estrategia válida en Power Query. Dicho esto, si el ciclo no funciona como se esperaba, hay algunas áreas que vale la pena revisar:
Evaluación de variables en List.Generate: asegúrese de que el PageNumber usado dentro de la función FetchPage se actualiza correctamente en cada iteración. En Power Query, la forma en que se pasa el estado en List.Generate a veces puede dar lugar a un comportamiento inesperado si no se controla cuidadosamente.
Lógica de terminación: está usando un MaxPages codificado de forma rígida = 10, lo cual está bien para las pruebas, pero en producción, es más confiable salir en función de los datos reales, por ejemplo, cuando una página devuelta tiene menos del tamaño de página esperado o está vacía.
Validación de salida de función: puede ser útil validar si FetchPage() devuelve lo que esperas (una lista, tabla o registro) y si el campo "resultados" siempre existe. Un campo faltante o una estructura no coincidente podrían romper silenciosamente el bucle.
Diagnóstico: Como siguiente paso, considere probar la función FetchPage() de forma independiente para un par de números de página a fin de verificar la coherencia en la estructura devuelta. Eso ayudará a aislar si el problema está en la paginación o en la recuperación base.
Por favor, consulte el siguiente enlace de documentación para una mejor comprensión:
List.Generate - PowerQuery M | Microsoft LearnSi tiene alguna pregunta al respecto, no dude en ponerse en contacto con nosotros. Estaremos encantados de ayudarte. Si esta publicación ayuda, entonces por favor danos 'Felicitaciones' y considera Acéptalo como una solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Gracias por usar el Foro de la comunidad de Microsoft.
- Syndicate_AdminAdministrator
Sí, puede conectarse a Power BI mediante la API de REST, pero es principalmente para administrar cosas como conjuntos de datos, informes y actualizaciones, no para extraer datos directamente en los informes. Para ello, normalmente se utilizan conectores como SQL, SharePoint, etc.