Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
dairan73
Contributor III
Contributor III

Criar registros diários

Tenho a tabela a seguir mas preciso criar um QVD histórico para saber se em determinado dia o título (ChaveTitulo) estava inadimplente ou não.

O problema é que teria que criar dia a dia a partir da DataEmissao um registro até a data de hoje ou até que o Saldo ficasse 0.

   

ChaveTituloDataEmissaoDataVencimentoDataMovimentacaoValorMovimentacaoAcumulado Valor MovValor Original TituloSaldo
111AAA01/01/201610/01/201604/01/20162000200030001000
111AAA01/01/201610/01/201607/01/201610021003000900
222BBB05/02/201722/02/201720/02/20175005001000500
222BBB05/02/201722/02/201722/02/20172507501000250
222BBB05/02/201722/02/201724/02/2017250100010000

Por exemplo:

Título 111AAA teve seu último pagamento em 07/01/2016, então assim que passou o vencimento em 10/01/2016 deveria criar um registro por dia (até hoje ou até ficar com saldo 0) informando que o titulo está inadimplente e o saldo devedor.

Título 222BBB deveria criar um registro somente do dia 23/02/17 que foi o dia que ficou inadimplente.

É viável fazer esta criação diária ? Alguma ideia de como fazer o código ?

Labels (2)
1 Solution

Accepted Solutions
mario_sergio_ti
Partner - Specialist
Partner - Specialist

Amigo, algo errado no resultado do seu Left Join (temp_Extrato)

Fiz um teste aqui e deu certo, veja só

temp_Extrato:

//Preenchendo_Intervalos_Datas

LOAD

  ChaveTitulo,  DataEmissao,  DataVencimento,  TotalValorMovimentacao,

  [Valor Original Titulo],

  IterNo() As 'Dia',

  Date(DataEmissao + IterNo() - 1,'DD/MM/YYYY') As 'Data'

While DataEmissao + IterNo() - 1 <= If(MaxDataMov<=DataVencimento, DataVencimento,

  If(TotalValorMovimentacao<[Valor Original Titulo], Today(), MaxDataMov));

//Agrupamento

LOAD

  ChaveTitulo,

  Only(DataEmissao) As 'DataEmissao',

  Only(DataVencimento) As 'DataVencimento',

  Max(DataMovimentacao) As 'MaxDataMov',

  Sum(ValorMovimentacao) As 'TotalValorMovimentacao',

  Only([Valor Original Titulo]) As [Valor Original Titulo]

Group By ChaveTitulo;

//Dados da fonte

LOAD * Inline [

ChaveTitulo DataEmissao DataVencimento DataMovimentacao ValorMovimentacao 'Valor Original Titulo'

111AAA 18/03/2017 20/03/2017 19/03/2017 2000 3000

111AAA 18/03/2017 20/03/2017 21/03/2017 100 3000

222BBB 18/03/2017 20/03/2017 18/03/2017 500 750

222BBB 18/03/2017 20/03/2017 19/03/2017 250 750

333CCC 18/03/2017 20/03/2017 19/03/2017 500 1000

333CCC 18/03/2017 20/03/2017 20/03/2017 250 1000

333CCC 18/03/2017 20/03/2017 21/03/2017 250 1000

444DDD 18/03/2017 20/03/2017 19/03/2017 500 1000

444DDD 18/03/2017 20/03/2017 20/03/2017 250 1000

444DDD 18/03/2017 20/03/2017 21/03/2017 100 1000

] (Delimiter Is ' ');

Left Join (temp_Extrato)

//Dados da fonte

Load

  ChaveTitulo,

  DataMovimentacao As Data,

  ValorMovimentacao;

LOAD * Inline [

ChaveTitulo DataMovimentacao ValorMovimentacao

111AAA 19/03/2017 2000

111AAA 21/03/2017 100

222BBB 18/03/2017 500

222BBB 19/03/2017 250

333CCC 19/03/2017 500

333CCC 20/03/2017 250

333CCC 21/03/2017 250

444DDD 19/03/2017 500

444DDD 20/03/2017 250

444DDD 21/03/2017 100

] (Delimiter Is ' ');

Tab_MovimentacaoDiaria:

NoConcatenate Load

  ChaveTitulo,

  DataEmissao,

  DataVencimento,

  TotalValorMovimentacao,

  [Valor Original Titulo],

  Dia,

  Data,

  ValorMovimentacao,

  Rangesum(

      If(ChaveTitulo = Previous(ChaveTitulo),

      rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))

        , ValorMovimentacao)

  ) As 'ValorMovAcumulado',

  [Valor Original Titulo]-Rangesum(

      If(ChaveTitulo = Previous(ChaveTitulo),

      Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))

        , ValorMovimentacao)

  ) As 'SaldoDevedor',

   

  If(

      Rangesum(

          if(ChaveTitulo = Previous(ChaveTitulo),

              Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))

          , ValorMovimentacao)

      )

        < [Valor Original Titulo],

    'Devedor',

    'Não Devedor'

  ) As 'SituacaoCliente'   

Resident temp_Extrato Order By ChaveTitulo, Data Asc;

Drop Table temp_Extrato;

Você modificou algo a mais do que o endereço dos dados?

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti

View solution in original post

5 Replies
mario_sergio_ti
Partner - Specialist
Partner - Specialist

Amigo, segue;

temp_Extrato:

//Preenchendo_Intervalos_Datas

LOAD

  ChaveTitulo,  DataEmissao,  DataVencimento,  TotalValorMovimentacao,

  [Valor Original Titulo],

  IterNo() As 'Dia',

  Date(DataEmissao + IterNo() - 1,'DD/MM/YYYY') As 'Data'

While DataEmissao + IterNo() - 1 <= If(MaxDataMov<=DataVencimento, DataVencimento,

  If(TotalValorMovimentacao<[Valor Original Titulo], Today(), MaxDataMov));

//Agrupamento

LOAD

  ChaveTitulo,

  Only(DataEmissao) As 'DataEmissao',

  Only(DataVencimento) As 'DataVencimento',

  Max(DataMovimentacao) As 'MaxDataMov',

  Sum(ValorMovimentacao) As 'TotalValorMovimentacao',

  Only([Valor Original Titulo]) As [Valor Original Titulo]

Group By ChaveTitulo;

//Dados da fonte

LOAD ChaveTitulo, DataEmissao, DataVencimento, DataMovimentacao, ValorMovimentacao, [Valor Original Titulo]

FROM [lib://QLIK_SUPORTE/SUATABELA.QVD];

Left Join (temp_Extrato)

//Dados da fonte

Load

  ChaveTitulo,

  DataMovimentacao As Data,

  ValorMovimentacao;

LOAD ChaveTitulo, DataMovimentacao, ValorMovimentacao

FROM [lib://QLIK_SUPORTE/SUATABELA.QVD];

Tab_MovimentacaoDiaria:

NoConcatenate Load

  ChaveTitulo,

  DataEmissao,

  DataVencimento,

  TotalValorMovimentacao,

  [Valor Original Titulo],

  Dia,

  Data,

  ValorMovimentacao,

  Rangesum(

      If(ChaveTitulo = Previous(ChaveTitulo),

      rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))

        , ValorMovimentacao)

  ) As 'ValorMovAcumulado',

  [Valor Original Titulo]-Rangesum(

      If(ChaveTitulo = Previous(ChaveTitulo),

      Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))

        , ValorMovimentacao)

  ) As 'SaldoDevedor',

    

  If(

      Rangesum(

          if(ChaveTitulo = Previous(ChaveTitulo),

              Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))

          , ValorMovimentacao)

      )

        < [Valor Original Titulo],

    'Devedor',

    'Não Devedor'

  ) As 'SituacaoCliente' 

Resident temp_Extrato Order By ChaveTitulo, Data Asc;

Drop Table temp_Extrato;

Substitua FROM [lib://QLIK_SUPORTE/SUATABELA.QVD] para o endereço correto dos dados.

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
dairan73
Contributor III
Contributor III
Author

Mario,

Obrigado pela ajuda, mas não funcionou.

Peguei um título que o vencimento foi 18/01/2015 e ele teve 3 movimentações:

20/01/2015 = 1.000

22/01/2015 = 385,85

22/01/2015 = 1656

2017-03-22 - 001.png

O valor do título é 2270,15 e a soma dos valores de movimentação da o total de 3041,85. Ou seja, no dia 22/01 o valor ultrapassou o valor do título, sendo assim está quitado.

Neste exemplo o script deveria criar as seguintes linhas:

DATA           MOVIMENTACAO      SALDO      SITUAÇÃO

19/01/2015     0                               2270,15      Devedor

20/01/2015     1.000                        1270,15       Devedor

21/01/2015      0                              1270,15      Devedor

A linha do dia 22/01 não é preciso criar pois o saldo fica menor que 0 (-771,70), assim informando que o cliente já pagou mais do que o valor total da fatura.

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Amigo, algo errado no resultado do seu Left Join (temp_Extrato)

Fiz um teste aqui e deu certo, veja só

temp_Extrato:

//Preenchendo_Intervalos_Datas

LOAD

  ChaveTitulo,  DataEmissao,  DataVencimento,  TotalValorMovimentacao,

  [Valor Original Titulo],

  IterNo() As 'Dia',

  Date(DataEmissao + IterNo() - 1,'DD/MM/YYYY') As 'Data'

While DataEmissao + IterNo() - 1 <= If(MaxDataMov<=DataVencimento, DataVencimento,

  If(TotalValorMovimentacao<[Valor Original Titulo], Today(), MaxDataMov));

//Agrupamento

LOAD

  ChaveTitulo,

  Only(DataEmissao) As 'DataEmissao',

  Only(DataVencimento) As 'DataVencimento',

  Max(DataMovimentacao) As 'MaxDataMov',

  Sum(ValorMovimentacao) As 'TotalValorMovimentacao',

  Only([Valor Original Titulo]) As [Valor Original Titulo]

Group By ChaveTitulo;

//Dados da fonte

LOAD * Inline [

ChaveTitulo DataEmissao DataVencimento DataMovimentacao ValorMovimentacao 'Valor Original Titulo'

111AAA 18/03/2017 20/03/2017 19/03/2017 2000 3000

111AAA 18/03/2017 20/03/2017 21/03/2017 100 3000

222BBB 18/03/2017 20/03/2017 18/03/2017 500 750

222BBB 18/03/2017 20/03/2017 19/03/2017 250 750

333CCC 18/03/2017 20/03/2017 19/03/2017 500 1000

333CCC 18/03/2017 20/03/2017 20/03/2017 250 1000

333CCC 18/03/2017 20/03/2017 21/03/2017 250 1000

444DDD 18/03/2017 20/03/2017 19/03/2017 500 1000

444DDD 18/03/2017 20/03/2017 20/03/2017 250 1000

444DDD 18/03/2017 20/03/2017 21/03/2017 100 1000

] (Delimiter Is ' ');

Left Join (temp_Extrato)

//Dados da fonte

Load

  ChaveTitulo,

  DataMovimentacao As Data,

  ValorMovimentacao;

LOAD * Inline [

ChaveTitulo DataMovimentacao ValorMovimentacao

111AAA 19/03/2017 2000

111AAA 21/03/2017 100

222BBB 18/03/2017 500

222BBB 19/03/2017 250

333CCC 19/03/2017 500

333CCC 20/03/2017 250

333CCC 21/03/2017 250

444DDD 19/03/2017 500

444DDD 20/03/2017 250

444DDD 21/03/2017 100

] (Delimiter Is ' ');

Tab_MovimentacaoDiaria:

NoConcatenate Load

  ChaveTitulo,

  DataEmissao,

  DataVencimento,

  TotalValorMovimentacao,

  [Valor Original Titulo],

  Dia,

  Data,

  ValorMovimentacao,

  Rangesum(

      If(ChaveTitulo = Previous(ChaveTitulo),

      rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))

        , ValorMovimentacao)

  ) As 'ValorMovAcumulado',

  [Valor Original Titulo]-Rangesum(

      If(ChaveTitulo = Previous(ChaveTitulo),

      Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))

        , ValorMovimentacao)

  ) As 'SaldoDevedor',

   

  If(

      Rangesum(

          if(ChaveTitulo = Previous(ChaveTitulo),

              Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))

          , ValorMovimentacao)

      )

        < [Valor Original Titulo],

    'Devedor',

    'Não Devedor'

  ) As 'SituacaoCliente'   

Resident temp_Extrato Order By ChaveTitulo, Data Asc;

Drop Table temp_Extrato;

Você modificou algo a mais do que o endereço dos dados?

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
dairan73
Contributor III
Contributor III
Author

Realmente funcionou.

Peguei este código e substituí apenas teu LOAD INLINE pela minha tabela e deu certo.

Muito obrigado!

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Gostei deste desafio rsrs.

Abraço, sucesso!

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti