Pular para o conteúdo principal

PBI Pilot – Teste grátis sem custos um assistente de IA para o seu Power BI

[Power Query] Código M para Dataset sobre Covid19 no Brasil e a Função Value.Metadata

Muita gente tem feito alguns relatórios legais sobre covid19, como não sou tão fã de fazer relatórios bonitos pra ficar postando, prefiro trabalhar behind the scenes e trazer na verdade um Dataset do ministério da saúde sobre Covid19 nos estados.

PS. Foi feita uma alteração no Código por conta de alterações no nome do arquivo o abaixo é o mais atual então algumas coisas no artigo podem estar diferentes mas a ideia central é a mesma.

O grande detalhe dessa consultá é que utilizei uma função em PowerQuery conhecida por poucos a Value.Metadata.

Essa função permite trazer informações específicas sobre os nossos dados, ela só tem um argumento que é um valor qualquer. 

Se utilizamos como argumento uma tabela, por exemplo, na Value.Metadata ele vai me trazer informações sobre QueryFolding que você já viu aqui nesse VÍDEO.



Além disso vai me trazer informações de qual é a fonte de dados, bem como meu "Path" ou Caminho dessa fonte. No caso como era uma fonte SQL o Path seria servidor e banco.

Ok, mas porque eu utilizei Value.Metadata na consulta do Ministério da Saúde de Covid19?

Bem no site https://covid.saude.gov.br existe um botão onde você pode baixar o dataset utilizado nessa página com os dados de covid19 no Brasil, inspecionando essa página quando clicamos no botão o site faz uma consulta https://covid.saude.gov.br/assets/files/BRnCov19_30032020.csv que é arquivo csv que dá origem aos dados.

Nesse arquivo podemos perceber que o nome segue uma lógica com o prefixo BRnCov19_ seguido da data de ontem sem as barras, 30032020.

Tendo esse link em mãos poderíamos já utilizar alguma logica usando DateTime.LocalNow() para concatenar com o resto do link e trazer o arquivo da data certo?

Não necessariamente. 

O problema é que como o arquivo é diário, ele pode ser atualizado ao longo de um dia ou seja amanha 01/04/2020 se meu dataset estiver configurado para atualizar as 08:00AM não necessariamente já existam os dados de 31/03/2020 pode ser que o dataset no site ainda seja o 30/03/2020.

Nesse caso criei uma lógica que cria uma lista e além do dia atual, me traz o dia anterior e o dia posterior com algo simples como {DateTime.LocalNow(), Date.AddDays(DateTime.LocalNow(), -1), Date.AddDays(DateTime.LocalNow(), 1)}





Após isso realizei uma série de tratamentos inserí prefixo e sufixo, excluí as / e chamei uma função personalizada criada usando o link simples inicial, claro com a RelativePath dentro de uma Web.Contents pra garantir que o meu dado possa ser atualizado na web.

Então em tese seriam feito Web.Contents para 3 links diferentes:

Dia Atual 

Web.Contents("https://covid.saude.gov.br", [RelativePath ="assets/files/BRnCov19_31032020.csv"])

Dia Anterior

Web.Contents("https://covid.saude.gov.br", [RelativePath ="assets/files/BRnCov19_30032020.csv"])

Dia Posterior

Web.Contents("https://covid.saude.gov.br", [RelativePath ="assets/files/BRnCov19_01042020.csv"])


Nisso veio o problema, para as chamadas onde o link não existe o Power BI retorna o erro " Expression.Error: O acesso ao recurso é proibido "


Geralmente trataria um erro com uso de " try otherwise " mas nesse caso não é um erro de calculo mas é um erro de CONEXÃO, o que invalida o meu código, a não ser que eu saiba utilizar nesse caso o Value.Metadata

Utilizando o Web.Contents acima como argumento da Value.Metadata temos como retorno um registro com 6 itens, sendo o que nos interessa é o Response.Status 


No caso do exemplo acima o Response.Status nos retornou null ou seja sem nenhuma informação, o Respose.Status nos trás o status de resposta da consulta HTTP e deveríamos esperar um status 200 que é um status "OK sua solicitação foi bem sucedida", que é o que ocorre se fizermos a mesma solicitação para o arquivo BRnCov19_30032020.csv 


Sendo assim então eu consigo agora criar uma lógica validando se o meu Response.Status for igual a 200 então eu trago o valor da consulta caso contrário trago null, e foi o que fizemos na etapa InvocarFuncao:

= Table.AddColumn(#"Colunas Removidas", "Tabela", each if Value.Metadata(Web.Contents("https://covid.saude.gov.br", [RelativePath =[Link]]))[Response.Status]=200 then Funcao([Link]) else null)

E sendo assim mais um dia foi salvo graças ao Power Query e boas horas de estudo.

Grande abraço e até a próxima.





 


Comentários

  1. Queria fazer minhas proprias analise sobre o covid19 mas estava com sem tempo (preguiça) de garimpar dados...dai vem o mestre e me entrega de mão beijada.... Brincadeira a Parte ....vc mata a pau...

    ResponderExcluir
    Respostas
    1. rs...a ideia foi essa, dar subsídio fácil pra galera que gosta da parte de visualização.

      Excluir
  2. Rafael, essa lógica do Value. Metadata pode ser usada com a função Folder.value, acho que é essa, para escolher o caminho da pasta e retornar o caminho correto onde tenha os dados? A try otherwise até faz para o desktop, mas não funciona na atualização do relatório.

    ResponderExcluir
    Respostas
    1. Qualquer COISA pode ser usada como argumento da Value.Metadata é testar e validar se vai trazer algum resultado interessante abraço.

      Excluir
  3. Excelente. Eu estava fazendo download.
    Agora vou tentar adaptar meu M. Valeu pela dica!

    Se puder dar um pulo no meu painel, seria muito bom!

    http://covid.ax4b.com/

    ResponderExcluir
  4. Muito bom Rafael. Obrigado por facilitar as coisas ...
    Abraço !

    ResponderExcluir
  5. Boa tarde Rafael!
    Hoje tenho um dash a respeito em que utilizo um script VB para capturar o arquivo do mesmo site no final do dia.
    Queria muito poder utilizar seu código para tornar esse processo mais prático, porém, quando tentei, todas as linhas de conteúdo me retornaram como null. Alguma ideia do motivo?
    Outra pergunta, mais como curiosidade, como você obteve o caminho "https://covid.saude.gov.br/assets/files"? Quando eu faço o download, reparo que o link para download é sempre diferente, por isso optei por utilizar um método mais arcaico para obter a base.
    Abraço!

    ResponderExcluir
    Respostas
    1. Olá...eles mudaram os caminhos....o código efetivamente não ta funcionando pra esse site deixei ainda por conta da explicação do Value.Metadata que não tem conteúdo em Português sobre essa função do Power Query.

      Excluir
  6. Rafa muito show o conteúdo!! eu fiquei com uma dúvida, para o if, vc puxou o response status pela coluna [Link], e nao pela Funcao. Teria algum jeito de puxar pra testar diretamente da função?

    um abraço !!

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

[Power BI] O totalizador da minha Tabela ou Matriz "NÃO BATE" e agora?

Olá amantes de visuais de tabela e matriz no Power BI, tudo bem? Hoje vamos falar de um caso que vejo bastante nos grupos do Power BI. “O calculo na linha está batendo mas no total não e agora?” Mas antes de iniciarmos, que tal deixar aquela sua inscrição marota no meu canal no youtube que está recheado de vídeos legais, vai lá seu pão duro de like youtube.com/rafaelmendonca Agora que você já aliviou sua pão-durice você merece conteúdo .... kkkkkkkk Vamos lá, temos então a seguinte tabela gerada no meu conjunto de dados Essa tabela possui uma lista de vendas realizadas por dois vendedores com o numero da ordem da venda, um valor unitário e uma quantidade de itens em cada venda. O que queremos é bem simples meu jovem, calcular o valor total de cada venda e ter um total de todas as vendas... Aí você muito garotão usa a seguinte expressão DAX: E depois joga isso numa tabela. Lindo neh??? Mas o totalizador trouxe um valor que não tem...

PBI Pilot – Teste grátis sem custos um assistente de IA para o seu Power BI

  PBI Pilot – Teste grátis sem custos um assistente de IA para o seu Power BI Falaaa pessoal tudo blz?  A Power Tuning lançou recentemente o PBI Pilot ( www.pbipilot.com  ), um assistente de IA que se comunica com seu modelo de dados do Power BI. Ter um Copilot para Power BI é muito caro, mas com o PBI Pilot você pode fazer algumas perguntas sobre seus dados sem nenhum custo. E não há problema, oferecemos um teste gratuito sem registrar um cartão de crédito. Gostou? Siga as instruções passo a passo abaixo e teste o PBI Pilot você mesmo. 1) Instale a extensão O primeiro passo para começar a usar o PBI Pilot é  Instale a extensão  no seu navegador. Para tornar a extensão mais fácil de usar, você pode fixá-la no menu. 2) Crie sua assinatura Depois de instalar a extensão, acesse o site do Power BI (app.powerbi.com) e clique no ícone da extensão. Ao abrir o assistente, você verá a mensagem de erro abaixo: Clique no botão "Clique aqui para se inscrever novamente" e vo...

Como usar o Web.Contents do Power Query: guia completo

Como usar o Web.Contents do Power Query para acessar dados online O Power Query é uma ferramenta poderosa para obter, transformar e analisar dados de diferentes fontes. Uma dessas fontes é a web, que contém uma grande variedade de dados online que podem ser úteis para os seus projetos. Para acessar dados online a partir de uma URL, você pode usar a função Web.Contents do Power Query. Essa função retorna o conteúdo binário baixado da URL especificada e permite que você use opções adicionais para personalizar a sua consulta. Neste artigo, vamos mostrar como usar o Web.Contents para obter dados de diferentes tipos de arquivos online, como CSV, Excel ou JSON. Também vamos discutir as vantagens e desvantagens dessa função em comparação com outras funções do Power Query. O que é o Web.Contents? O Web.Contents é uma função do Power Query que permite acessar dados online a partir de uma URL. Você pode usar essa função para obter dados de diferentes fontes da web, como arquivos CSV, Excel, JSON...