Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
girino777
Creator III
Creator III

Preencher meses sem valor

Boa Tarde Amigos..

Tenho uma tabela com o Ano_Mês e o Valor, porém nem todos os meses eu tenho valor nessa tabela.

Ex:

2018-01 - 10.000,00

2018-02 - 23.000,00

2018-05 - 40.000,00

2018-07 - 50.000,00

A minha dúvida é:

Preciso que os períodos de 2018-03, 2018-04 e 2018-06 sejam carregados com o valor do último mês.

Ex:

2018-01 - 10.000,00

2018-02 - 23.000,00

2018-03 - 23.000,00

2018-04 - 23.000,00

2018-05 - 40.000,00

2018-06 - 40.000,00

2018-07 - 50.000,00

Tem como fazer isso na carga ?

Obrigado

Renato

1 Solution

Accepted Solutions
Anonymous
Not applicable

Olá, Renato!

Tente o script abaixo:

Dados:

Load Date#(Ano_Mês, 'YYYY-MM') As Ano_Mês,

     Valor

Inline

[Ano_Mês, Valor

2018-01, 10.000,00

2018-02, 23.000,00

2018-05, 40.000,00

2018-07, 50.000,00

];


Tmp:

First 1

Load Date(Min(Ano_Mês)) As MinAno_Mês,

     Num(((Year(Max(Ano_Mês)) * 12) + Month(Max(Ano_Mês))) - (((Year(Min(Ano_Mês)) * 12) + Month(Min(Ano_Mês)))) + 1) As Intervalo

Resident Dados;

Tmp2:

Load Date(AddMonths(Peek('MinAno_Mês', 0, 'Tmp'), RowNo() - 1), 'YYYY-MM') As Ano_Mês

AutoGenerate(Peek('Intervalo'));

Left Join

Load * Resident Dados;

Resultado:

NoConcatenate

Load Ano_Mês,

     If(IsNull(Valor), Peek('Valor'), Valor) As Valor

Resident Tmp2

Order By Ano_Mês;

Drop Tables Tmp, Tmp2, Dados;

Resultado:

Capturar.PNG

View solution in original post

9 Replies
Thiago_Justen_

Renato,

Teste assim:

set vMaxData=date(today());

set vMinData=Date(AddMonths(today(),-24)); //Troque o 24 pela qtde de meses que você quer retroagir

tempCal:

Load

$(vMinData)+iterno()-1 as tempdata,

date($(vMinData)+iterno()-1) as Data,

Date($(vMinData)+iterno()-1,'YYYY-MM') as Ano_Mês

autogenerate 1  while $(vMinData)+iterno()-1<=$(vMaxData);

Left Join (tempCal)

Load

Ano_Mês,

Valor

From Sua_Base;

Thiago Justen Teixeira Gonçalves
Farol BI
WhatsApp: 24 98152-1675
Skype: justen.thiago
luizclaudio
Creator
Creator

Renato

Esse campo Ano_Mês é data ou texto?

A tabela é em Excel?

A saída é utilizar a função peek(), mas talvez que fazer tratamento do campo para comparar as informações

girino777
Creator III
Creator III
Author

Olá Luis

O campo é texto.

A tabela é do banco de dados.

Anonymous
Not applicable

Olá, Renato!

Tente o script abaixo:

Dados:

Load Date#(Ano_Mês, 'YYYY-MM') As Ano_Mês,

     Valor

Inline

[Ano_Mês, Valor

2018-01, 10.000,00

2018-02, 23.000,00

2018-05, 40.000,00

2018-07, 50.000,00

];


Tmp:

First 1

Load Date(Min(Ano_Mês)) As MinAno_Mês,

     Num(((Year(Max(Ano_Mês)) * 12) + Month(Max(Ano_Mês))) - (((Year(Min(Ano_Mês)) * 12) + Month(Min(Ano_Mês)))) + 1) As Intervalo

Resident Dados;

Tmp2:

Load Date(AddMonths(Peek('MinAno_Mês', 0, 'Tmp'), RowNo() - 1), 'YYYY-MM') As Ano_Mês

AutoGenerate(Peek('Intervalo'));

Left Join

Load * Resident Dados;

Resultado:

NoConcatenate

Load Ano_Mês,

     If(IsNull(Valor), Peek('Valor'), Valor) As Valor

Resident Tmp2

Order By Ano_Mês;

Drop Tables Tmp, Tmp2, Dados;

Resultado:

Capturar.PNG

Thiago_Justen_

Bela solução Daniel! Funciona perfeitamente e com os requisitos que o Renato possui..

Eu escolheria a sua solução para fechar a thread!

Thiago Justen Teixeira Gonçalves
Farol BI
WhatsApp: 24 98152-1675
Skype: justen.thiago
girino777
Creator III
Creator III
Author

Olá Daniel

Bom Dia.!

Eu rodei com os dados da minha tabela e esta apresentando um erro.

Erro.png

Anonymous
Not applicable

Tem como você disponibilizar parte desses dados num excel para eu dar uma olhada?

girino777
Creator III
Creator III
Author

Opa...

Segue o qvf e o qvd.

Muito Obrigado

Anonymous
Not applicable

O seu qvd carrega normalmente com o script que postei, e roda sem erros aqui.

O problema é que os dados estão agrupados por "familia", e cada "familia" aparentemente tem dois valores para cada "Ano_Mês". Neste caso, eu não sei qual dos dois valores que deve ser copiado para o próximo período, caso ele esteja faltando. Sem contar que você aparentemente tem duas colunas de valores ("estoque" e "cvm").

Todos esses detalhes foram omitidos no seu post inicial, e receio que boa parte da lógica que empreguei na minha resposta tenha que ser alterada.