Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
marcelvinicius
Creator III
Creator III

Load Incremental para atualizar somente

Bom dia Pessoal, como vão?

Estou com uma dúvida/problema: tenho um Load incremental que esta rodando certinho. Porém se eu rodo a mesma data de consulta ele só soma arquivos ao invés de só atualiza-los. Eu não sei como fazer para ele excluir e atualizar.

Obs.: Retorno dados de uma procedure e a mesma não tem chave primária.

LET vrDataIni  = Date(MonthStart(Today()),'YYYY/MM/DD'); //Primeiro dia do mes

LET vrDataFim  = Date(MonthEnd(Today()),'YYYY/MM/DD'); //Ultimo dia do mes

LET vrMes = Date(MonthStart(Today()), 'DD/MM/YYYY'); //Mes ativo

LET vrAnoQvd = Date(MonthStart(Today()), 'YYYY'); //Ano ativo

Consumo Itens:

//*EXECUTE dbo.GetItemConsumo @Empresa, @Estabelecimento, @DtInicio, @DtFim*/

SQl Execute dbo.GetItemConsumo '1', '1', '$(vrDataIni)','$(vrDataFim)';

Consumo Anterior:

LOAD * FROM [lib://itens/consumoitens_$(vrAnoQvd).qvd] (qvd);

Concatenate

Get Consumo Itens:

SQL SELECT * FROM ##GetItemConsumo;

Store Get Consumo Itens into [lib://itens/consumoitens_$(vrAnoQvd).qvd] (qvd);

18 Replies
marcelvinicius
Creator III
Creator III
Author

A unica coisa é que ele esta substituindo todas as informações, saberia me dizer por que?

Exemplo:

Tenho esse retorno no mês de JAN:

4410 TRAVA  CC297 20/01/2017 00:00:00

4410 TRAVA  CC170 12/01/2017 00:00:00

4410 TRAVA  CC194 03/01/2017 00:00:00

E esse retorno em FEV:

4410 TRAVA  CC193 13/02/2017 00:00:00

4410 TRAVA CC171 22/02/2017 00:00:00

Estou recuperando as datas e salvando, deveria retornar os 5, mas só retorna os últimos 2 (FEV);

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Amigo, acho que você não entendeu completamente o seu script;

Observe o que está fazendo as funções:

Today() = Retorna a data atual do relógio do sistema.

MonthStart() = Retorna à data/hora do primeiro dia do mês.

MonthEnd() = Retorna à data/hora do último dia do mês.

Date() =  Define o formato da data, no seu caso o parâmetro de mascara fornecido 'YYYY/MM/DD'.


Observe que as variáveis vrDataIni e vrDataFim estão sendo utilizados na expressão SQL conforme abaixo em vermelho.

Está sendo gravando nas variáveis o primeiro dia do mês corrente (vrDataIni) e do ultimo dia do mês corrente (vrDataFim).

Logo, o que a tabela [Consumo Itens] irá retornar? Entendeu?


LET vrDataIni = Date(MonthStart(Today()),'YYYY/MM/DD'); //Primeiro dia do mes

LET vrDataFim = Date(MonthEnd(Today()),'YYYY/MM/DD'); //Ultimo dia do mes

LET vrMes = Date(MonthStart(Today()), 'DD/MM/YYYY'); //Mes ativo

LET vrAnoQvd = Date(MonthStart(Today()), 'YYYY'); //Ano ativo

[Consumo Itens]:

//*EXECUTE dbo.GetItemConsumo @Empresa, @Estabelecimento, @DtInicio, @DtFim*/

SQL Execute dbo.GetItemConsumo '1', '1', '$(vrDataIni)','$(vrDataFim)';

Tem outros pontos que não fazem muito sentido para mim, veja:

Consumo Itens:

//*EXECUTE dbo.GetItemConsumo @Empresa, @Estabelecimento, @DtInicio, @DtFim*/

SQl Execute dbo.GetItemConsumo '1', '1', '$(vrDataIni)','$(vrDataFim)';

Consumo Anterior:

LOAD * FROM [lib://itens/consumoitens_$(vrAnoQvd).qvd] (qvd);

Concatenate

Get Consumo Itens:

SQL SELECT * FROM ##GetItemConsumo;

Store Get Consumo Itens into [lib://itens/consumoitens_$(vrAnoQvd).qvd] (qvd); //Store Get Consumo Itens? Mas não realizou uma concatenação forçada com Consumo Anterior? Mas se a tabela concatenada Consumo Anterior estiver os mesmos campos de Consumo Itens, isso também significa que ocorrerá uma concatenação automática com Consumo Itens, logo a função Store não deveria estar com a tabela Consumo Itens para gravar o conjunto então?


Existem muitas formas de fazer o que deseja, mas é necessário ter o domínio dos detalhes e os requisitos, informações que não aparentam estar explícitos na questão.

Ex.:

  • Período de carga inicial (A partir de quando?)
  • Período de carga para atualização (Ex.: >= a 3 meses anteriores a partir do Today() e <= 1 mês anterior a partir do Today())
  • Atualização em quais campos  e onde gravar as alterações dos campos e flags para gerar os históricos se for o caso
  • Período de carga para inclusão (Ex.: mês corrente)
  • Ciclo de carga (Ex.: mensal, semanal...)
  • ...


Script para atualização e inclusão de dados, dependendo das regras dos processos de negócio, as vezes não poderá recuperar o histórico por conta de um detalhe não bem definido no script.

Ex.: Uma tabela de banco de dados que com o tempo o sistema substitui um campo de status (pendente, aprovado, cancelado) de um pedido, e simplesmente não registra o histórico com o tempo para estas ocorrências, então uma vez perdido o histórico no QVD, já era.

Veja amigo:

Concatenando tabelas ‒ QlikView


Acho que a sua resposta está neste link:

Carregando registros novos e atualizados com carregamento incremental ‒ Qlik Sense

Rotina de Carga Incremental Simples - Qknow

Grande abraço.

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

Bom dia Mario, como vai?

Obrigado pelas ajudas, estão sendo de muita utilidade.

Eu vi o que você falou sobre a concatenação e estava fazendo errado mesmo.

Pergunta: eu consigo fazer algum group by?

Obrigado mais uma vez

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Bom dia Marcel, tudo bem comigo, espero que também.

Feliz em saber do seu progresso.

Consegue sim, segue exemplo:

Sum - função de script ‒ QlikView

Abraço.

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

Tudo bem comigo também,

Pergunta: faço o group by na hora de buscar da procedure e passar pro QVD ou quando eu utilizo o QVD?

Segundo: quero usar o group by por que quando eu busco meus dados de movimento de estoque esta trazendo todos os itens de forma desordenada, estou usando certo o group ou teria alguma outra função no Qlik Sense?

Abraços

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Amigo;

O link que te passei, é referente a estrutura Group By da Qlik e não do SQL;

Group By é para agregação, no intuito de utilizar outras funções em conjunto como Sum(), Count(), Avg()...

Seu conceito de "desordenado" seria ordenação? Se sim, é Order by para classificação.

"trazendo todos os itens de forma desordenada" Seria vários registro que não interessa? Se sim, é Where para filtrar.

Exemplo Group By:

Consumo Itens:

Load

    campo1,

    Sum(campo2) As 'campo2'

    Group By campo1;

SQL Execute dbo.GetItemConsumo '1', '1', '$(vrDataIni)','$(vrDataFim)';


Exemplo Where:

Consumo Itens:

Load

    campo1,

    campo2

    Where campo1 = 'itemA';

SQL Execute dbo.GetItemConsumo '1', '1', '$(vrDataIni)','$(vrDataFim)';

Veja vários exemplo com Group By, Order By, Where...:

Load ‒ Qlik Sense

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

Amigo Mario,

Você me passou o exemplo:

  1. Consumo Itens: 
  2. Load 
  3.     campo1, 
  4.     Sum(campo2) As 'campo2' 
  5.     Group By campo1; 
  6. SQL Execute dbo.GetItemConsumo '1', '1', '$(vrDataIni)','$(vrDataFim)';

Rodo antes de executar a procedure então? Não no Select da tabela que ela monta?

Fiz isso e não busca nada:

Tempo decorrido  00:00:01

Carga de arquivos iniciada

Os dados não foram carregados. Solucione o erro e tente carregar novamente.

Obrigado pelas ajudas, estão realmente sendo muito úteis.

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Amigo, você colocou o meu exemplo exatamente no seu script? Você deve edita-lo, pois bem provável que não exista os mesmos campos mencionados na estrutura Load como "campo1";

No meu exemplo, o Load já está acima do SQL Execute que executará a procedure, ou seja um Load precedente;

Consumo Itens:

Load

    campo1, //exemplo de campo que possa existir da procedure

    Sum(campo2) As 'campo2'  //exemplo de agrupamento que deseja fazer

    Group By campo1; //Agrupamento depois que recupera as informações da procedure

SQL Execute dbo.GetItemConsumo '1', '1', '$(vrDataIni)','$(vrDataFim)'; //Recupera dados a procedure


Amigo, você está com problemas... preste muita atenção no link com os exemplo: Load ‒ Qlik Sense

E este também, Load precedente:

https://help.qlik.com/pt-BR/sense/3.2/Subsystems/Hub/Content/Scripting/load-data-from-previously-loa...

Pode ser que você esteja pulando um pouco as etapas do seu aprendizado, precisa dominar bem a estrutura Load primeiro antes de fazer algo mais elaborado como uma carga incremental com atualização;


Já pensou em realizar um curso?

Ou solicitar uma consultoria para apoio?

Se sua empresa não tem muito orçamento para o serviço, já te digo que tenho um preço bom para pequena empresa, sou consultor independente de BI, se precisar de apoio particular, só me contactar;


Skype: mario.sergio.ti


Abraço e sucesso amigo.



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

Boa tarde amigo,

Vamos conversar sim, obrigado pela ajuda.

Atenciosamente.