Integraciones

Power Query M

Monitoriza tus flujos de Power Query (en Excel o Power BI) llamando a la API de eventos de InfiniAnalytics con Web.Contents en cada etapa de tu consulta.

Resumen

La autenticación se hace con la cabecera token (no Authorization). Json.FromValue serializa automáticamente el cuerpo de la petición, y Text.FromBinary convierte la respuesta binaria de Web.Contents a texto legible.

Parámetros

ParámetroDescripción
TokenTu token de organización. Lo encuentras en el panel de InfiniAnalytics, dentro de 'Organización'.
automation_idEl UUID del automatismo al que quieres asociar los eventos. Lo encuentras en el listado de automatismos de tu organización, dentro de 'Procesos'.
execution_idUn identificador que tú eliges para agrupar todos los eventos de una misma ejecución. Debe ser el mismo valor en el START, los EVENT/WARNING intermedios, el ERROR y el END de una misma ejecución, y no puede reutilizarse en dos ejecuciones que se solapen en el tiempo. Puede ser un ID propio de tu sistema o, como en los ejemplos, una marca de tiempo (DateTime.LocalNow() en Power Query).

Evita duplicados en tu primera consulta

Al crear una consulta de Power Query nueva, el editor la evalúa dos veces (una al aceptar el código y otra al establecer su destino). Si el código ya envía un evento real, eso significa dos envíos duplicados. Sigue estos pasos para evitarlo.
  1. 1

    Crea la consulta apuntando al endpoint de ping

    Crea la consulta apuntando primero a GET https://api.analytics.infini.es/v1/ping/ (comprobación de conectividad, sin cabeceras ni cuerpo) y cárgala como "Solo crear conexión":

    Power Query M
    let
        Response = Web.Contents("https://api.analytics.infini.es/v1/ping/")
    in
        Text.FromBinary(Response)
  2. 2

    Sustituye el código por el evento real

    Una vez creada, edita esa misma consulta con el código del evento real que quieras enviar (START, EVENT, etc.) y pulsa "Listo". Como la consulta ya existe, esto envía el evento una sola vez.

  3. 3

    Repite para los siguientes eventos

    Para cada evento siguiente de la misma ejecución, repite el paso 2 sobre la misma consulta (edita el contenido y pulsa "Listo").

Ejemplos por tipo de evento

En estos ejemplos los valores están fijos para simplificar; en tu propio pipeline normalmente los calcularás de forma dinámica (por ejemplo, execution_id = Text.From(DateTime.LocalNow())) a partir de la lógica de tus procesos.

START — Registrar inicio de ejecución

Power Query M
let
    BaseUrl = "https://api.analytics.infini.es/v1/register/",
    Token = "your_organization_token",
    Body = [
        automation_id = "3571c1e0-88b9-4104-a0b0-f060b7fcc6eb",
        execution_id = "2025-03-03T15:32:17.571404",
        event = "START",
        description = "Starting the execution"
    ],
    Response = Web.Contents(
        BaseUrl,
        [
            Headers = [
                #"Content-Type" = "application/json",
                token = Token
            ],
            Content = Json.FromValue(Body)
        ]
    )
in
    Text.FromBinary(Response)

EVENT — Registrar evento de ejecución

Power Query M
let
    BaseUrl = "https://api.analytics.infini.es/v1/register/",
    Token = "your_organization_token",
    Body = [
        automation_id = "3571c1e0-88b9-4104-a0b0-f060b7fcc6eb",
        execution_id = "2025-03-03T15:32:17.571404",
        event = "EVENT",
        description = "Relevant event description"
    ],
    Response = Web.Contents(
        BaseUrl,
        [
            Headers = [
                #"Content-Type" = "application/json",
                token = Token
            ],
            Content = Json.FromValue(Body)
        ]
    )
in
    Text.FromBinary(Response)

WARNING — Registrar advertencia de ejecución

Power Query M
let
    BaseUrl = "https://api.analytics.infini.es/v1/register/",
    Token = "your_organization_token",
    Body = [
        automation_id = "3571c1e0-88b9-4104-a0b0-f060b7fcc6eb",
        execution_id = "2025-03-03T15:32:17.571404",
        event = "WARNING",
        description = "Warning description"
    ],
    Response = Web.Contents(
        BaseUrl,
        [
            Headers = [
                #"Content-Type" = "application/json",
                token = Token
            ],
            Content = Json.FromValue(Body)
        ]
    )
in
    Text.FromBinary(Response)

ERROR — Registrar error de ejecución

Power Query M
let
    BaseUrl = "https://api.analytics.infini.es/v1/register/",
    Token = "your_organization_token",
    Body = [
        automation_id = "3571c1e0-88b9-4104-a0b0-f060b7fcc6eb",
        execution_id = "2025-03-03T15:32:17.571404",
        event = "ERROR",
        description = "High-level error description",
        error_id = "e0001",
        error_description = "Detailed error description"
    ],
    Response = Web.Contents(
        BaseUrl,
        [
            Headers = [
                #"Content-Type" = "application/json",
                token = Token
            ],
            Content = Json.FromValue(Body)
        ]
    )
in
    Text.FromBinary(Response)

END — Registrar fin de ejecución

Power Query M
let
    BaseUrl = "https://api.analytics.infini.es/v1/register/",
    Token = "your_organization_token",
    Body = [
        automation_id = "3571c1e0-88b9-4104-a0b0-f060b7fcc6eb",
        execution_id = "2025-03-03T15:32:17.571404",
        event = "END",
        description = "End of execution description"
    ],
    Response = Web.Contents(
        BaseUrl,
        [
            Headers = [
                #"Content-Type" = "application/json",
                token = Token
            ],
            Content = Json.FromValue(Body)
        ]
    )
in
    Text.FromBinary(Response)