Joviano

Bem vindo ao

Blog do Jovi!

O blog do Jovi tem como objetivo ajudar você com suas dúvidas, além de expandir seu conhecimento através da informação.

Função Personalizada no Power Query – Linguagem M

Imagine que você tem uma caixa de ferramentas que você mesmo pode moldar, criando utensílios específicos para tarefas únicas. No universo do Power Query, esses utensílios são as funções personalizadas (são escritas na linguagem M). São receitas que você cria uma vez e depois usa várias vezes, economizando esforço e aumentando a precisão.

A Linguagem M e sua Relação com o Power Query

Vamos imaginar um jogo de futebol, onde cada jogador, cada posição e cada jogada tem sua importância estratégica. Nesse cenário, a linguagem M representa a equipe, cada função e comando um jogador, e o Power Query é o estádio onde o jogo acontece.

Entendendo a Equipe: A Linguagem M

A linguagem M é como um time de futebol bem coordenado e treinado:

  1. Jogadores Versáteis (Funções e Comandos): Assim como jogadores que podem jogar em diferentes posições, as funções na linguagem M são versáteis e podem ser aplicadas a diversos contextos de dados.
  2. Táticas Avançadas (Transformações Complexas): Cada transformação de dados na linguagem M é como uma jogada tática no futebol, cuidadosamente planejada para avançar em direção ao gol (ou ao insight desejado).
  3. Reação às Condições de Jogo (Adaptabilidade): Assim como um time de futebol se adapta às condições do jogo e ao time adversário, a linguagem M pode ser ajustada para atender a diferentes necessidades de análise de dados, enfrentando desafios variados com flexibilidade.

O Estádio: Power Query

O Power Query é o campo de futebol onde a equipe da linguagem M joga:

  1. Campo de Visualização (Interface do Usuário): Assim como um estádio permite que os espectadores vejam o jogo, o Power Query proporciona uma visão clara das transformações de dados, permitindo ao usuário acompanhar cada “jogada” dos seus comandos M.
  2. Estratégias de Jogo (Processo de Análise): No Power Query, você define a estratégia para manipular seus dados, organizando as transformações em uma sequência lógica, assim como um técnico organiza sua equipe e define as jogadas.
  3. Dinâmica de Jogo (Interatividade): A capacidade de testar, modificar e iterar rapidamente no Power Query é como ajustar a estratégia de jogo em tempo real, reagindo às mudanças do “adversário” (os dados) para alcançar o melhor resultado.

O Desafio do Chefe: Calcular os Meses Entre Duas Datas

Imagine a cena: seu chefe se aproxima com uma demanda urgente: “Quero saber quantos meses existem entre duas datas.” Aqui, as datas são marcos críticos, e sua tarefa é transformar essa diferença temporal em uma contagem mensal, essencial para decisões estratégicas.

Nesse momento, você assume um papel crucial, aplicando sua expertise no Power Query para desvendar essa questão. Com a linguagem M, você não apenas responde ao pedido, mas oferece insights valiosos, ajudando a orientar ações futuras da empresa.

Você está no centro do palco, convertendo um simples pedido em análise estratégica, demonstrando como sua habilidade em manipular dados é fundamental no ambiente de negócios.

Atendendo o Pedido do seu Chefe: Criando a Função Personalizada no Power Query

Vamos mergulhar nos detalhes do comando que você forneceu, explorando cada segmento minuciosamente. Ao final, combinaremos todas as peças, formando a “funçãozona” que resolve o desafio proposto pelo seu chefe.

Vou te explicar o raciocínio de cada uma das variáveis (etapas), e ao final desse artigo vamos reunir todas elas na função personalizada completa.

Vamos lá!

Os Parâmetros Iniciais

(Date1, Date2) =>

Aqui começamos declarando nossa função com dois parâmetros, Date1 e Date2. Eles serão as datas entre as quais queremos calcular a diferença em meses. Esses parâmetros são essenciais porque permitem que a função seja reutilizável para qualquer par de datas.

Calculando a Diferença em Dias

dias = Number.From(Date1) - Number.From(Date2),

Neste ponto, convertemos as datas em valores numéricos para calcular a diferença entre elas. O resultado, dias, representa quantos dias existem de uma data à outra.

Determinando o Valor Absoluto e a Direção

dias_abs = Number.Abs(dias),
mult = if Date2 >= Date1 then 1 else -1,

dias_abs é o valor absoluto da diferença, que nos interessa porque estamos buscando a quantidade total de meses, independente da ordem das datas.

O mult define a direção da contagem, essencial para casos onde a ordem das datas impacta no resultado final.

Estabelecendo os Limites

lista_datas = {Date1, Date2},
menor = List.Min(lista_datas),
maior = List.Max(lista_datas),

Aqui, criamos uma lista contendo ambas as datas e identificamos qual é a menor (menor) e a maior (maior).
Isso estabelece os limites para a geração da sequência de datas.

Criando a Sequência de Datas

lista_datas_entre = 
  List.Dates(
    menor, 
    dias_abs + 1, 
    #duration(1,0,0,0)
  ),

Esta linha gera uma lista de todas as datas entre menor e maior, inclusivas.
Essa sequência completa é crucial para identificar os finais de cada mês dentro do intervalo.

Transformar todas as datas da lista em “Final do Mês”

lista_datas_entre_FimMes = 
  List.Transform(
    lista_datas_entre, 
    each Date.EndOfMonth(_)
  ),

Transformamos cada data na sequência para o último dia do respectivo mês.
Isso nos ajuda a identificar os meses distintos presentes no intervalo.

Contagem Distinta dos Meses

lista_distinta = List.Distinct(lista_datas_entre_FimMes),
qtd = List.Count(lista_distinta) * mult

Por fim, removemos datas duplicadas com List.Distinct e contamos os elementos restantes.
Multiplicamos pelo mult para ajustar baseado na ordem das datas iniciais.

Combinando Tudo: A Função Personalizada no Power Query

(Date1, Date2) =>
let
    dias = Number.From(Date1) - Number.From(Date2),
    dias_abs = Number.Abs(dias),
    mult = if Date2 >= Date1 then 1 else -1,
    lista_datas = {Date1, Date2},
    menor = List.Min(lista_datas),
    maior = List.Max(lista_datas),
    lista_datas_entre = List.Dates(menor, dias_abs + 1, #duration(1,0,0,0)),
    lista_datas_entre_FimMes = List.Transform(lista_datas_entre, each Date.EndOfMonth(_)),
    lista_distinta = List.Distinct(lista_datas_entre_FimMes),
    qtd = List.Count(lista_distinta) * mult
in
    qtd

Com essa “funçãozona”, você agora pode calcular a diferença em meses entre quaisquer duas datas, fornecendo uma resposta precisa e útil para o pedido do seu chefe.

Prefere aprender com vídeo?

Esse artigo é subsídio para um dos vídeos do meu canal no Youtube, e te convido a assistir:

função personalizada no power query linguagem m


Te convido a dar uma olhada também nos demais conteúdos do canal, pois tem muita coisa boa de Power Query, SQL, DAX e Python lá te esperando.

Material de Apoio dessa aula?

CLIQUE AQUI e solicite o link para você ter acesso ao material de apoio dessa aula.
O nome do arquivo de apoio é: “20240321_DiferencaMeses.xlsx

Domine o Universo da Linguagem M

Quer ir além? Conheça a FORMAÇÃO POWER QUERY 2.0 e torne-se um mestre na manipulação de dados. Transforme horas de trabalho em minutos e impressione seu chefe e colegas com suas habilidades mágicas em análise de dados!

Conclusão

Ao dominar funções personalizadas em M e entender o poder do Power Query, você não apenas atende às demandas do seu chefe rapidamente mas também se arma com um conhecimento que pode transformar sua carreira.

Junte-se a nós na FORMAÇÃO POWER QUERY 2.0 e leve suas habilidades ao próximo nível!

Forte Abraço

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Receba conteúdos do Jovi!

Digite seu interesse abaixo:

Quer Aprender sobre Power Query?

Conheça nossa formação e tudo que você pode aprender com ela.

Mais conteúdos gratuitos para você!

Power Query

[ NO AR ] JOVI TALK

Por aqui falamos de tratamento de dados e automações, sempre focando nos analistas de negócio que desejam ganhar tempo nas suas atividades.

Leia mais

OPA, vejo que você é novo por aqui!

Temos um presente de boas vindas para os amantes de Blog!

E ai FERA?!

Não vou atrapalhar tua leitura deste super artigo.

Só quero te dizer que por ser um visitante novo aqui no site, nosso sistema está programado para te enviar um cupom de desconto para a FORMAÇÃO POWER QUERY 2.0, que é um pacotão de cursos do JOVI, com mais de 300 horas de conteúdo.

Informe seus dados a seguir, que te enviaremos as instruções para resgate desse cupom exclusivo.

Após enviar, pode fechar essa janela, que seu presente já está em processamento.

A ementa possui centenas de aulas, e resumimos em um painel de PowerBI o qual enviaremos a você.

Preencha seu nome e email que em instantes receberá a ementa completa deste pacote de cursos.

Formato Aceito: [+ código do pais] [código de área] [número]