Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Posting on Qlik Community is temporarily paused for some users. Thank you for patience and we'll update you soon!
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_
MVP
MVP

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_
MVP
MVP

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.