Situações daquelas que acontecem. Não deviam, mas mesmo assim…
Problema:
Temos uma coluna com o mês em extenso. Precisamos de converter este mês por extenso no número do mês para depois podermos transformar numa data, de preferência no início do mês.
Há muitas maneiras de resolver isto… algumas mais complicadas que outras, outras que parecem mais complicadas mas que dão muito jeito saber.
Vamos então para o nosso Power Query
Queremos então pegar na coluna mês e transformar em mês num.
Date.Month(Date.FromText("1"&[mês]))
Falta apenas transformar esta columa em inteiro, coisa que podemos fazer logo na fórmula adicionando Int64.Type.
Passo seguinte? Criar a data. Coisa simples… ou não!
Vamos fazer como já vi a ser feito?
De novo uma custom column, desta vez assim:
Date.From("01."&Text.From([mês num])&".2023"))
Claro que poderíamos agora “saltar” um passo e colocar logo a transformação do mês em número dentro da fórmula final.
Mas… e se existisse uma maneira mais fácil?
Vamos relembrar a primeira fórmula, a para transformar o nome do mês em número.
Date.Month(Date.FromText("1"&[mês]))
Esta é apenas parte da solução? Ou pode ser a solução completa?
Pergunta complicada de responder. A famosa resposta do programador. Depende.
E depende do quê? Principalmente da pergunta que me fizerem.
“Eh lá, agora estás a complicar, ó António.“
Eu explico.
Se a pergunta for “sabes como transformar um nome de mês no número do mês?” então esta fórmula é a resposta.
Faz exactamente o que foi pedido, transforma janeiro em 1 e fevereiro em 2.
Se a pergunta for “sabes como transformar um nome de mês no primeiro dia de cada mês no formato data?” então esta fórmula também tem a resposta.
“Já não percebo nada, ó António. Então a fórmula é a resposta às duas e tu disseste que era diferente…”
O que eu disse é que para um caso a fórmula é a resposta… e para o outro tem a resposta.
Vamos analisar em português a fórmula
Date.Month(Date.FromText("1"&[mês]))
Dá-me o mês da data a partir da junção do texto “1” com o nome do mês.
Então se resolvermos retirar a parte em que dizemos “dá-me o mês da…”?
Quem adivinha o que vai acontecer?
Sim, vai acontecer o que se pretendia na segunda questão.
Mas… e se quisermos que o ano não seja o atual? Adicionamos o ano na fórmula.
Solução final para a segunda pergunta?
Date.FromText("1"&[mês]), type date)
Tudo em um passo, sem mais complicações.