Preciso do número do mês mas o dataset só tem o mês por extenso.

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.

a nossa tabelinha em todo o seu esplendor

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]))
Data em mês da data do texto de 1 com o mês. Hein?
Mas funciona

Falta apenas transformar esta columa em inteiro, coisa que podemos fazer logo na fórmula adicionando Int64.Type.

Agora em número

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"))
Agora é a data de 1 com o texto do mês em número com 2023.
Já cá canta.

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.

Até parece uma solução interessante…

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?

Com ano e tudo!

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.

Share

You may also like...

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *