Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
Bom dia,
Hoje me deparei com um problema que eu sabia que chegaria algum dia... Preciso almentar o número de registros na minha tabela baseado em uma regra. Eu resolvia esse tipo de problema com "while" em outra ferramenta, mas em linguagem M não consegui encontrar uma solução.
A baixo segue um exemplo simplório.
CONTA | EMPRESA | DATA INICIO | DATA FIM |
000000 | emp 1 | 01/11/2020 | 01/02/2021 |
111111 | emp 1 | 01/05/2021 | 01/06/2021 |
222222 | emp 2 | 01/04/2021 | 01/06/2021 |
Baseado na tabela a cima, eu preciso criar todos os meses entre o inicio e o fim. O resultado esperado é:
CONTA | EMPRESA | MES ANO |
000000 | emp 1 | 01/11/2020 |
000000 | emp 1 | 01/12/2020 |
000000 | emp 1 | 01/01/2021 |
000000 | emp 1 | 01/02/2021 |
111111 | emp 1 | 01/05/2021 |
111111 | emp 1 | 01/06/2021 |
222222 | emp 2 | 01/04/2021 |
222222 | emp 2 | 01/05/2021 |
222222 | emp 2 | 01/06/2021 |
Obs. a solução precisa ser em M, não pode ser SQL.
Agradeço desde já pela ajuda.
Solved! Go to Solution.
Hi v-stephen-msft ,
thanks for your suggestion, but it's not like what I expected.
Deixo meu agradecimento também ao Gil Raviv, do datachant que compartilhou comigo algumas possibilidades que certamente usarei no futuro.
Bom, eu cheguei a solução que esperava no dia que postei a pergunta, só não havia conseguido passar para compartilhar a solução. De forma resumida, fiz um loop com list.generate() onde incrementava dois valores dependendo da condição, algo mais parecido com um loop aninhado. Hora incrementava a data (loop interno) hora incrementava a linha (loop externo).
Desta forma a iteração funciona corretamente, mas é indispensável a utilização da tabela em buffer para conjuntos grandes.
Última observação, a função list.generate() possúi um terceiro argumento opcional que permite especificar o que será retornado, podemdo assim omitir a coluna i (identificador da linha) e a coluna fim que não possuem mais utilidade.
Hi v-stephen-msft ,
thanks for your suggestion, but it's not like what I expected.
Deixo meu agradecimento também ao Gil Raviv, do datachant que compartilhou comigo algumas possibilidades que certamente usarei no futuro.
Bom, eu cheguei a solução que esperava no dia que postei a pergunta, só não havia conseguido passar para compartilhar a solução. De forma resumida, fiz um loop com list.generate() onde incrementava dois valores dependendo da condição, algo mais parecido com um loop aninhado. Hora incrementava a data (loop interno) hora incrementava a linha (loop externo).
Desta forma a iteração funciona corretamente, mas é indispensável a utilização da tabela em buffer para conjuntos grandes.
Última observação, a função list.generate() possúi um terceiro argumento opcional que permite especificar o que será retornado, podemdo assim omitir a coluna i (identificador da linha) e a coluna fim que não possuem mais utilidade.
Tua solução salvou meu projeto.
Muito obrigado!!!
Bom dia, eu tentei essa solução que você sugeriu, porém não tive sucesso.
let
Fonte = Python.Execute("import pandas as pd#(lf)#(lf)#(lf)lista = { ""Id"":[1,2,2,3],#(lf) ""Colaborador"":[""João"",""José"",""Mario"",""Vicente""],#(lf) ""Data Inicio"":[""20/03/2023"",""29/03/2023"",""01/04/2023"",""15/04/2023""],#(lf) ""Data Fim"":[""10/04/2023"", ""15/04/2023"",""15/04/2023"",""15/05/2023""]#(lf)#(lf)}#(lf)#(lf)df = pd.DataFrame(lista)#(lf)#(lf)print(df)"),
df1 = Fonte{[Name="df"]}[Value],
#"Tipo Alterado" = Table.TransformColumnTypes(df1,{{"Data Inicio", type date}, {"Data Fim", type date}}),
Tab = Table.Buffer(#"Tipo Alterado"),
#"Numero Linhas" = Table.RowCount(tab),
#"Adição Datas" =
List.Generate(
()=> [i=0,Id = tab{i}[Id], Colaborador = tab{i}[Colaboador], dtini=tab{i}[Data Inicio],dtfim=tab{i}[Data Fim]],
each i < #"Numero Linhas",
each
if [Data Inicio] < [Data Fim]
then [i=[i], Id = [Id], Colaborador = [Colaboador], dtini=Date.AddDays([Data Inicio],1),dtfim=[Data Fim]]
else [i=[i]+1,Id = tab{i}[Id], Colaborador = tab{i}[Colaboador], dtini=tab{i}[Data Inicio],dtfim=tab{i}[Data Fim]]
)
in
#"Adição Datas"
tentei fazer desta forma, porém recebo um erro
Hi @Anonymous ,
First create a custom column, get the next day, separate the four date columns to get four tables.
And then keep the column names of the date columns consistent, and then merge. About append queries.
After removing duplicates, the result is this.
Best Regards,
Stephen Tao
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.