Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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);
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);
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.:
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.
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
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.
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
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...:
Amigo Mario,
Você me passou o exemplo:
Rodo antes de executar a procedure então? Não no Select da tabela que ela monta?
Fiz isso e não busca nada:
Os dados não foram carregados. Solucione o erro e tente carregar novamente.
Obrigado pelas ajudas, estão realmente sendo muito úteis.
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:
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.
Boa tarde amigo,
Vamos conversar sim, obrigado pela ajuda.
Atenciosamente.