Pular para o conteúdo principal

[Power BI Like a PRO] Inserindo usuários em lote numa workspace.

Power Bi - Capturando Taxa de Juros Selic

Olá jovens desbravadores do conhecimento e da angustia (quando passamos um tempo tentando descobrir o que ocasionou determinado bug).

Hoje vamos falar de Juros Selic, que é a taxa referencial de juros utilizada pelo governo para balizar algumas operações e pagamentos de juros da dívida interna, correção de valores da restituição de imposto de renda, juros sobre impostos entre outras coisas.

Bem, o nosso objetivo é capturar e deixar a taxa selic disponível para uso no nosso Power BI e que sempre que houver atualizações no site da Receita Federal essa atualizações sejam capturadas pelo Power BI.

Os dados criados desse webscrap poderão ser enviados para o Serviço do Power BI na nuvem e configurados no seu gateway para atualização programada.

Antesss de mais nada, se você ainda não é inscrito no meu canal no youtube, não deixa de dar uma passada lá e conferir outros vídeos sobre webscrap entre outras brincadeiras. Link AQUI

Para a captura vamos utilizar o site da receita que tem uma página direta para o link da selic.

http://idg.receita.fazenda.gov.br/orientacao/tributaria/pagamentos-e-parcelamentos/taxa-de-juros-selic

Vamos então em Obter Dados>WEB


E vamos informar na URL o link que informei acima.

Após processar o PowerQuery vai te mostrar uma lista de tabelas e você vai selecionar APENAS 1 delas e vai clicar em editar.


Você será direcionado ao powerquery e muito provavelmente terá uma nova Consulta, com 3 etapas já aplicadas como a seguir:





Precisamos apenas da primeira etapa "Fonte" ou "Source" (se seu PBI estiver em inglês), então vamos excluir as duas últimas e manter apenas a primeira.

Você verá que aparecerão todas as tabelas mostradas na etapa anterior, logo após informarmos a URL.

Temos as seguintes colunas:

Caption, Source, ClassName, Id, Data.

Na coluna Data (dados em inglês), temos em algumas delas a seguinte tabela como mostrada abaixo (basta você clicar ao lado do nome "Table" não em cima do nome, mas ao lado dentro da "célula")


Essas tabelas são as tabelas do nosso site da receita que possuem os dados de SELIC, tanto mensal (linhas 2 a 4) quanto acumuladas (linhas 5 a 8) em tabelas encapsuladas. (Você já pode ter lido sobre isso aqui no blog no artigo sobre dCalendario AQUI)

Outro detalhe que podemos perceber é que apenas as linhas que na coluna "ClassName" está preenchida com "listing" possuem os dados de SELIC.

Vamos então filtrar a class name para que apenas fiquemos com as linhas que possuem Tabelas com dados da SELIC. Basta ir no cabeçalho da coluna "ClassName" clicar na seta pra baixo que tem ao lado do nome da coluna e desmarcar "nulo" e ok.

Nossa nova consulta filtrada ficará assim:




Tenho agora duas necessidades:

1) Extrair os dados para que possamos transforma-los em dados tabulares.

2) Separar as tabelas que possuem Selic Mensal e Selic Acumulada.

Como diria "Jack, o Estripador", vamos por partes. (piada de tiozão).

Extraindo os dados.
Vamos iniciar trabalhando com alterações nas próprias tabelas encapsuladas, para deixa-las mais fáceis de trabalhar posteriormente.

Vamos trazer a primeira linha de cada tabela encapsulada na coluna "Data" para o cabeçalho dessa tabela, utilizando a Função Table.PromoteHeaders.

Vamos lá então, Menu>Adicionar Coluna>Coluna Personalizada:

A expressão Table.PromoteHeaders nos pede um argumento obrigatório que é uma TABELA. As minhas tabelas serão a linha da minha coluna "Data".

Com isso, iremos criar uma COLUNA com tabelas encapsuladas com os mesmos dados da coluna "Data" mas com o cabeçalho sendo a primeira linha de cada tabela encapsulada.



Primeira Parte concluída com sucesso... vamos agora transformar cada coluna que possui ANO no cabeçalho como uma nova Linha da nossa tabela encapsulada e teremos então novas tabelas em que todas possuirão apenas 3 colunas, Mes, Ano, Taxa.

Para fazer isso precisamos utilizar a função Table.UnpivotOtherColumns, que vai transformará a coluna de anos em novas linhas.


Para essa função são necessários pelo menos 3 Argumentos, uma Tabela (nossa coluna "CabeçalhoPromovidos"), O nome da coluna ou colunas que desejamos que funcionem como eixo da nossa alteração (Coluna Mês/Ano) que deve ser informada como texto em uma lista ou seja entre chaves e entre aspas duplas {"Mês/Ano"}, nome da nova linha que trará os valores das colunas como texto e nome da nova coluna que conterá os dados.

Teremos a seguinte expressão completa.

= Table.UnpivotOtherColumns([CabeçalhosPromovidos], {"Mês/Ano"}, "Ano", "Taxa %")

E novamente a usaremos em uma nova coluna personalizada, resultando em uma nova coluna com dados agora de uma forma que poderemos, até que enfim, extrair.


Mas antes de extrair vamos excluir as demais colunas que não nos servem para nada e manter apenas a coluna "Despivotada" que tem nossos dados tratados.

Após isso vamos então clicar no símbolo de duas setas contrárias ao lado do nome da Coluna, desmarca a opção "Use o nome da coluna original como prefixo" e depois só clicar em OK.

Temos agora o nosso tabelão, com juros selic, tanto mensal quanto acumulado.


Separando Mensal e Acumulado.
"Conhecereis os teus dados e os teus dados o libertará"

Analisando esse tabelão que criamos, para separar os dados podemos tentar identificar algum detalhe que separe Mensal e Acumulado.

Eu consegui analisar e identificar 3 dados que são diferentes da mensal para a acumulada.

1) Na mensal os nomes dos meses iniciam com letra maiúscula e na acumulada com letra minúscula.
2) Na mensal os valores da Taxa terminam com o símbolo % e na acumulada não.
3) Na mensal os valores são sempre menores que na acumulada no mesmo período.

Podemos então escolher qualquer uma das três. Eu particularmente prefiro escolher aquela que eu tenha certeza que por uma vontade da pessoa que programou o site não possa ser alterada, que é a terceira situação. Isso me garante que eu vá ter menos necessidade de alterar meu ETL e gerar menos risco de trazer dados errados.

Inicialmente eu vou começar fazendo alguns tratamentos na coluna "Taxa %"

Vamos substituir "%" por nada para que todos os números apareçam como número de fato, e vamos substituir "---" por 0.

Basta clicar com o botão direito no cabeçalho da coluna taxa e clicar em substituir valores.





Feito isso teremos então uma coluna apenas com VALORES, e podemos alterar o tipo dela para DECIMAL.

Também vamos deixar todos os nomes dos meses como minúsculo para que na próxima etapa possamos ter sucesso. Botão direito na coluna "Mês/Ano", Transformar>minúscula.

Precisamos agora identifica a cada conjunto "Mes/Ano" - "Ano" qual linha é acumulada e qual é mensal.

Podemos então criar um agrupamento por "Mes/Ano" e "Ano" que nos trará uma coluna de Tabelas, com os dados de cada mês e ano. Basta Selecionar as duas primeiras colunas, clicar com o botão direito do mouse no cabeçalho de uma delas, e selecionar "Agrupar por...".

Abrirá uma caixa que escolheremos Nome da Nova Coluna, escolhi "Encapsulada", e a Operação que é obrigatoriamente "Todas as Linhas".


Nossa coluna de valores foi substituída pela coluna de tabelas encapsuladas, que em cada tabela possui nome do mês, ano e valores mensal e acumulado em duas linhas.

Olhando com mais atenção, você vai perceber que cada tabela encapsulada na primeira linha o valor será sempre menor que na segunda linha, o que nos mostra que teremos na primeira linha o valor mensal e na segunda o valor acumulado.

Vamos inserir então um INDEX dentro de cada uma das tabelas encapsuladas iniciando de 1, depois vamos expandir essas tabelas, e saberemos que onde tivermos 1 em index será o valor mensal e onde tiver 2 em index será o valor acumulado.

Como já vimos anteriormente para trabalhar com tabela encapsulada criamos uma nova "Coluna Personalizada". 


Vamos então utilizar a função Table.AddIndexColumn, que nos pedirá 4 argumentos, Tabela (Coluna "Encapsulada"), Nome da nova coluna como texto "Indice", número inicial do meu índice que vai ser 1 e incremento do meu índice que também será 1 pois queremos um índice de 1 em 1.

Table.AddIndexColumn([Encapsulada], "Indice", 1, 1)


E pronto, nossa nova coluna de tabelas está pronta e linda de morrer.

Podemos novamente excluir as novas colunas que não precisamos, manter so a última coluna adicionada "Personalizar", e expandi-la como fizemos no final da etapa de extração dos dados.

Nossa nova e linda tabela com as informações de 1 para mensal e 2 para acumulado.


A partir daqui é com você, se quiser manter apenas o mensal, filtra pelo índice 1, se quiser manter acumulado filtra pelo índice 2, ou até se quiser ter duas tabelas uma com mensal e outra acumulado, apenas duplica a query e filtra cada nova query como você desejar.

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


E para você que chegou até aqui segura aí o código gerado nesse nosso artigo para você estudar. Basta criar uma nova consulta nula, vai no editor avançado apaga tudo que tiver lá e copia esse código abaixo.
let
    Fonte = Web.Page(Web.Contents("http://idg.receita.fazenda.gov.br/orientacao/tributaria/pagamentos-e-parcelamentos/taxa-de-juros-selic")),
    #"Linhas Filtradas" = Table.SelectRows(Fonte, each ([ClassName] = "listing")),
    #"Personalização Adicionada" = Table.AddColumn(#"Linhas Filtradas", "CabeçalhosPromovidos", each Table.PromoteHeaders([Data])),
    #"Personalização Adicionada1" = Table.AddColumn(#"Personalização Adicionada", "Despivotada", each Table.UnpivotOtherColumns([CabeçalhosPromovidos], {"Mês/Ano"}, "Ano", "Taxa %")),
    #"Outras Colunas Removidas" = Table.SelectColumns(#"Personalização Adicionada1",{"Despivotada"}),
    #"Despivotada Expandido" = Table.ExpandTableColumn(#"Outras Colunas Removidas", "Despivotada", {"Mês/Ano", "Ano", "Taxa %"}, {"Mês/Ano", "Ano", "Taxa %"}),
    #"Valor Substituído" = Table.ReplaceValue(#"Despivotada Expandido","%","",Replacer.ReplaceText,{"Taxa %"}),
    #"Valor Substituído1" = Table.ReplaceValue(#"Valor Substituído","---","0",Replacer.ReplaceText,{"Taxa %"}),
    #"Tipo Alterado" = Table.TransformColumnTypes(#"Valor Substituído1",{{"Taxa %", type number}}),
    #"Texto em Minúscula" = Table.TransformColumns(#"Tipo Alterado",{{"Mês/Ano", Text.Lower, type text}}),
    #"Linhas Agrupadas" = Table.Group(#"Texto em Minúscula", {"Mês/Ano", "Ano"}, {{"Encapsulada", each _, type table}}),
    #"Personalização Adicionada2" = Table.AddColumn(#"Linhas Agrupadas", "Personalizar", each Table.AddIndexColumn([Encapsulada], "Indice", 1, 1)),
    #"Outras Colunas Removidas1" = Table.SelectColumns(#"Personalização Adicionada2",{"Personalizar"}),
    #"Personalizar Expandido" = Table.ExpandTableColumn(#"Outras Colunas Removidas1", "Personalizar", {"Mês/Ano", "Ano", "Taxa %", "Indice"}, {"Mês/Ano", "Ano", "Taxa %", "Indice"})
in

    #"Personalizar Expandido"

Comentários

  1. Muito legal!!! Rafael, vc é fera!!! Excelente artigo!!!

    ResponderExcluir
  2. Show...parabéns Rafael ficou top...obrigado por compartilhar.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Power BI Service - O Publicar na Web não está disponível para mim, e agora?

Olá seus pão duro que adoram publicar link público, tudo bem com vocês?

Hoje vamos dar uma mãozinha para você que por algum motivo arrancou todos os fios de cabelo da cabeça porque não viu mais a opção de Publicar na Web disponível no seu Power BI.

Antes também gostaria de te fazer dois convites:

O segundo, como sempre te convido a conhecer meu canal no YouTube, se inscrever e compartilhar os conteúdos que faço sempre com muito carinho para todos vocês (coisa melosa),

https://youtube.com/rafaelmendonca

Dados os recados vamos para nosso problema...

1) Seu dia amanheceu assim...
Numa bela manha você decide publicar seu relatório e compartilhar para toda a rede e se depara com essa situação:


Cara quem roubou meu botão de "Publicar na Web"?

Mas não se desespere isso pode ser uma configuração que o administrador do tenant (do seu site no serviço do PBI) ou até mesmo você desavisadamente alterou.

2) Verificando a Opção Desabilitada...
A partir daqui você precisa ter acesso de admi…

“Traduzindo” formulas do Excel para DAX.

Como utilizar algumas formulas bem conhecidas no EXCEL em DAX

Olá moçada tudo bem?
Todos sabemos que muitos dos usuários de Excel tem dificuldade de migrar ou utilizar o Power BI, muito pela dificuldade de entender a forma de calcular do DAX e os contextos de linha e de filtro, bem como por já estar acostumado com as formulas no Excel, chegando a procurar um SOMASE (SUMIF) quando quer escrever uma nova medida em DAX (eu fiz isso).
Queria então conversar hoje com esse público e te mostrar como traduzir o que você pensa em EXCEL para DAX.
Iremos brincar então com as seguintes formulas em Excel (versão português).
Somase, Somases, Procv, Cont.se, Cont.ses, Pgto, Concat, Texto, Esquerda, Direita e Seerro.
Utilizaremos para nosso exemplo o modelo de dados abaixo (Power BI e Excel)




Nossos objetivos serão:
- Encontrar o total de Compras para veículos novos (ano de venda igual a 2018). - Encontrar o total de Compras para veículos novos e com valor de venda igual a R$ 1Mi. - Encontrar qual o veículo ve…

Power BI - Colocando sua dCalendario em "Ordem"

Power BI - Colocando sua dCalendario em "Ordem"
Olá Princesas e Princesos.

Hoje iremos brincar, novamente, com dCalendario.

É um assunto legal, uma estrutura praticamente obrigatória, então vamos explora-la ainda mais.

Se você já entende o conceito de ordenar as linhas da coluna da dCalendário de forma a ficar sempre tudo na ORDEM crescente ou DECRESCENTE de Datas, Meses, Anos, Semanas, e etc esse artigo pode ser um tanto quanto boring pra você, então aconselho a procurar outro meio de vida.

MAS ANTES... adivinhem?

Não tá inscrito no canal se inscreve lá www.youtube.com/rafaelmendonca

Exemplo 1 - Ordenando coluna de Nome do Mês.
Uma das colunas que costumamos criar na dCalendario é a Mês Nome (janeiro, fevereiro, março...)

Por padrão a ordenação de uma coluna sempre é ela mesmo, ou seja numa coluna com dados de texto a ordenação vai ser alfabética, e seus meses serão ordenados da seguinte forma:

abril, agosto, dezembro, fevereiro, janeiro, julho, junho, maio, março, novembro…