Skip to content

Integracao Power BI / Analytics

Conecte o Power BI diretamente a API do fast_deliv para dashboards operacionais em tempo real.


Configuracao: Power Query Web Connector

Passo 1: Obter token

No Power BI Desktop, va em Transformar Dados > Editor do Power Query > Nova Consulta > Consulta em Branco.

Cole o seguinte script M na barra de formula:

// FastDeliv_Auth — obter token de acesso
let
    SupabaseUrl  = "https://<PROJECT>.supabase.co",
    SupabaseAnon = "<ANON_KEY>",
    Email        = "admin@empresa.com",
    Password     = "sua_senha",

    AuthBody = Text.ToBinary("{""email"":""" & Email & """,""password"":""" & Password & """}"),

    AuthResponse = Web.Contents(
        SupabaseUrl & "/auth/v1/token?grant_type=password",
        [
            Headers = [
                #"Content-Type" = "application/json",
                #"apikey"       = SupabaseAnon
            ],
            Content  = AuthBody,
            ManualStatusHandling = {400, 401}
        ]
    ),

    AuthJson  = Json.Document(AuthResponse),
    AuthToken = AuthJson[access_token]
in
    AuthToken

Nomeie esta consulta como FastDeliv_Token.


Passo 2: Buscar entregas

// FastDeliv_Deliveries
let
    Token = FastDeliv_Token,
    BaseUrl = "https://fast-deliv-backend.vercel.app",

    Response = Web.Contents(
        BaseUrl & "/api/v1/deliveries",
        [
            Headers = [
                Authorization = "Bearer " & Token
            ]
        ]
    ),

    Json      = Json.Document(Response),
    Table     = Table.FromList(Json, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    Expanded  = Table.ExpandRecordColumn(
        Table, "Column1",
        {"id","title","status","origin_address","destination_address",
         "distance_km","driver_earnings","driver_id",
         "created_at","completed_at","cancelled_at"},
        {"id","title","status","origin_address","destination_address",
         "distance_km","driver_earnings","driver_id",
         "created_at","completed_at","cancelled_at"}
    ),

    // Tipagem
    Typed = Table.TransformColumnTypes(Expanded, {
        {"distance_km",    type number},
        {"driver_earnings",type number},
        {"created_at",     type datetimezone},
        {"completed_at",   type datetimezone}
    })
in
    Typed

Passo 3: Buscar motoristas

// FastDeliv_Drivers
let
    Token    = FastDeliv_Token,
    BaseUrl  = "https://fast-deliv-backend.vercel.app",

    Response = Web.Contents(
        BaseUrl & "/api/v1/drivers",
        [Headers = [Authorization = "Bearer " & Token]]
    ),

    Json     = Json.Document(Response),
    Table    = Table.FromList(Json, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    Expanded = Table.ExpandRecordColumn(
        Table, "Column1",
        {"id","full_name","email","is_active","created_at"},
        {"id","full_name","email","is_active","created_at"}
    )
in
    Expanded

Relacionamentos no modelo de dados

No Power BI, configure:

FastDeliv_Deliveries[driver_id] --> FastDeliv_Drivers[id]   (N:1)

Medidas DAX sugeridas

-- Total de entregas
Total Entregas = COUNTROWS(FastDeliv_Deliveries)

-- Entregas concluidas
Entregas Concluidas =
    CALCULATE(
        COUNTROWS(FastDeliv_Deliveries),
        FastDeliv_Deliveries[status] = "completed"
    )

-- Taxa de conclusao (%)
Taxa Conclusao =
    DIVIDE(
        [Entregas Concluidas],
        CALCULATE(
            COUNTROWS(FastDeliv_Deliveries),
            FastDeliv_Deliveries[status] <> "cancelled"
        ),
        0
    )

-- Total pago a motoristas (R$)
Total Ganhos Motoristas =
    CALCULATE(
        SUM(FastDeliv_Deliveries[driver_earnings]),
        FastDeliv_Deliveries[status] = "completed"
    )

-- Ticket medio por entrega
Ticket Medio =
    DIVIDE([Total Ganhos Motoristas], [Entregas Concluidas], 0)

-- Entregas por dia
Entregas por Dia =
    DIVIDE(
        [Total Entregas],
        DATEDIFF(
            MIN(FastDeliv_Deliveries[created_at]),
            TODAY(),
            DAY
        ) + 1,
        0
    )

-- Distancia media por entrega (km)
Distancia Media =
    AVERAGEX(
        FILTER(FastDeliv_Deliveries, FastDeliv_Deliveries[status] = "completed"),
        FastDeliv_Deliveries[distance_km]
    )

Visualizacoes sugeridas

Visual Campo X Campo Y / Valor Filtro
Grafico de barras — Entregas por status status COUNTROWS
Linha do tempo — Entregas por dia created_at (dia) COUNTROWS
KPI — Taxa de conclusao Taxa Conclusao
Tabela — Top motoristas full_name Total Ganhos Motoristas status = completed
Mapa origin_lat/lng

Atualizacao automatica

  1. Publique o relatorio no Power BI Service
  2. Configure Credenciais da fonte de dados: autenticacao anonima (o token e gerenciado pelo script M)
  3. Defina Atualizar agendamento: a cada 1 hora (ou conforme necessidade)

Rotacao de token

O script M reobtém o token a cada atualizacao. Certifique-se de que as credenciais de email/senha estejam armazenadas com segurança nos parametros do Power BI, nao no codigo M.

Parametros Power BI

Extraia Email, Password, SupabaseUrl e SupabaseAnon como Parametros (Pagina inicial > Gerenciar Parametros) para facilitar manutencao.