Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
1 year ago

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_Admin's avatar
      Syndicate_Admin
      Administrator

      Así es, tengo que consultar la documentación a través de la API de Swagger, ¿esto ayuda?

  • 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_Admin's avatar
      Syndicate_Admin
      Administrator

      @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_Admin's avatar
      Syndicate_Admin
      Administrator

      @v-kpoloju-msft

      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
      Datos

      Inicializar 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_Admin's avatar
        Syndicate_Admin
        Administrator

        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 Learn

        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.

  • 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.