Skip to main content
11 novembro 2023
Follow Us

Enviar dados para um streaming dataset do Power BI a partir de um ficheiro CSV

Dentro do universo analytics, uma das áreas que mais chama a minha atenção (e cada vez mais) é a dos dados em real-time. Pelo facto de se produzirem em quantidade e qualidade crescente e pela utilidade da tomada de decisões “no momento” em que os eventos ocorrem, esta é uma área em crescimento.

O desafio que veremos neste post é o de criar um streaming dataset no Power BI a partir de um ficheiro CSV, disponível a partir de uma API de uma aplicação que recebe dados ao segundo.

Streaming datasets do Power BI

Os streaming datasets são conjuntos de dados um pouco diferentes dos usuais. A principal diferença reside no facto de se expandirem em tempo real no momento em que determinados eventos ocorrem.

Ou seja, a cada ocorrência de um determinado evento, seja, por exemplo, a criação de uma nova encomenda, o streaming dataset acrescenta imediatamente uma nova linha ao dataset. Se visualizarmos os dados deste streaming dataset num dashboard, as visualizações atualizam-se também em tempo real.

Portanto, ao contrário dos datasets normais do Power BI, os streaming datasets não se atualizam a momentos fixos no tempo nem a pedido, mas antes quando algo acontece.

Uma outra característica importante dos streaming datasets do Power BI é a possibilidade de se preservar o histórico. Se esta opção estiver selecionada, a entrada de um novo registo no conjunto de dados não vai implicar a saída do mais antigo. Esta questão é relevante se tivermos interesse em, não só, visualizar os dados em streaming, mas também analisar séries longas usando medidas DAX complexas por exemplo.

O tempo real não existe realmente

Na verdade, quando nos referimos “tempo real” estamos (realmente) a referir-nos a uma latência baixa. Isto significa que o evento ocorre e o streaming dataset reage em poucos segundos. As visualizações do dashboard vão reagir poucos segundos depois.

Para a maioria dos cenários, isto não é problemático, mas, para ser rigoroso, o tempo real não existe, pois é impossível que algo aconteça num determinado momento no tempo e ocorra simultaneamente uma representação gráfica desse evento.

Alguns desafios técnicos a considerar

Num cenário real-time, existem bastantes dois desafios técnicos que não podemos ignorar:

  • O mais óbvio é o que lida com a inclusão de novas linhas no dataset. Este é particularmente difícil de resolver se estivermos a lidar com a ocorrência de muitos eventos em simultâneo.
  • Outro desafio, que pode não parecer tão óbvio, é como analisar os dados se estes chegam a todo o momento?
    Para o cálculo de determinados indicadores, como por exemplo, médias, valores mínimos e máximos, só para referir alguns simples, requer uma certa capacidade computacional que pode consumir mais tempo do que está disponível para a atualização dos cálculos e das visualizações. Existem algumas novidades neste domínio a que voltarei num artigo mais tarde.

O nosso caso prático: enviar os dados de um CSV para um streaming dataset

Neste desafio, a aplicação produz um conjunto de dados de grande dimensão, disponível através de um ficheiro CSV, que pode ser acedido a partir de um determinado URL. Pretende-se enviar uma linha para o streaming dataset de cada vez que uma encomenda (uma linha do CSV) seja criada – o mais rápido possível.

O CSV tem a seguinte estrutura:

streaming1

Como podemos ver acima, o ficheiro contém uma série de colunas que estão separadas por vírgulas. Destas, temos interesse apenas nas seguintes:

  • ORDERNUMBER
  • QUANTITY
  • PRICEEACH
  • SALES
  • STATUS
  • CITY

O primeiro passo consiste em criar o streaming dataset no Power BI Service. Para tal, escolhemos uma workspace e selecionamos “New -> Streaming dataset”.

De seguida, selecionamos a caixa “API” e prosseguimos:

streaming2

A definição do dataset surge na caixa seguinte e nela introduzimos os nomes das colunas pretendidas e o respetivo tipo:

streaming3

Às colunas anteriormente identificadas, acrescentamos a coluna DATETIME, que será a identificação do “timestamp” de cada encomenda, ou seja, a data-hora da mesma.

Na parte inferior do painel, podemos validar que o schema deste dataset é o correto, e marcar a opção de preservação dos dados históricos.

streaming4

O streaming dataset é criado e na página seguinte podemos ver o Push URL que será necessário mais à frente para enviarmos (“empurrarmos”) os dados do CSV para cá. Convém guardar este URL num local seguro porque ele contém a chave de acesso ao streaming dataset.

streaming5

O trabalho pesado é realizado em Python e não vou detalhar muito neste post. Se tiver realmente interesse, contacte-me e poderei fornecer o script, ou então escrever um post mais detalhado sobre esta operação.

Para elaborar o script, utilizei o Google Colab, um serviço gratuito da Google que permite correr scripts de Python na cloud sem ser necessário qualquer trabalho de preparação.

O Google Colab interage facilmente com o Google Drive e, para este caso particular, isso é importante pois precisamos de guardar no script o número da encomenda mais recente já carregada no streaming dataset. O trabalho do script será posteriormente carregar as encomendas cujo número de identificação, dado pela variável ORDERNUMBER é superior.

Genericamente, o script recolhe os dados do ficheiro CSV e converte-os num data frame do Python e seleciona as linhas a carregar no streaming dataset. Posteriormente, define uma data class com 3 propriedades:

  • O endpoint (anteriormente obtido no Power BI através do Push URL)
  • O dados a enviar para o Power BI (sob a forma de dicionário do Python)
  • O tempo em segundos pretendido para espaçar cada uma das linhas do CSV

Portanto, se definirmos os dados como o caminho para o CSV e um delay de 1 segundo, os ddos serão enviados para o Power BI streaming dataset a cada segundo uma nova linha.

As visualizações em tempo real no Power BI Dashboard

Resta-nos testar a solução criando um dashboard no Power BI com algumas visualizações gráficas. Apenas algumas visualizações permitem visualizar dados em tempo real no dashboard:

  • Gráficos de linhas
  • Gráficos de colunas
  • Cartões
  • Gráficos de barras
  • Medidores (Gauge)

Vamos começar por criar o dashboard apontando para o streaming dataset criado anteriormente, como demonstra a imagem abaixo:

streaming6

De seguida, vamos selecionar um gráfico de linhas, com os seguintes parâmetros:

  • No eixo horizontal, o timestamp
  • No eixo vertical, o valor das vendas
  • Deixando uma janela temporal de 10 minutos para a visualização

streaming7

Vamos dar-lhe um título e um subtítulo à escolha e visualizar o resultado no dashboard, expandindo a largura do gráfico a meia página:

streaming8

A construção do dashboard no Power BI é bastante simples e intuitiva. É basicamente uma questão de experimentar e testar até acertarmos no resultado pretendido. Para esta prova de conceito, cheguei a um dashboard ainda bastante modesto:

Recording 2

Haveria ainda bastante a fazer, nomeadamente em termos de análise e melhoria desta solução. Talvez num próximo post volte a este projeto. Obrigado pela atenção!


Assine a nossa newsletter e receba o nosso conteúdo diretamente no seu email