Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá pessoal, tudo bem?
Estou carregando um Excel (XLSX) de 7.931 linhas, e quando executo a carga, para (Trava, e só finalizando no gerenciador de tarefas do windows é que o Qlikview fecha) exatamente na tabela "Consumo", é com certeza o IF com a data e a variável, pois já tentei usando o mesmo campo "DATA" nos dois lados do IF e funciona, porém fica errado pois a condição sempre será verdadeira.
Preciso de uma coluna com a soma dos últimos 24 meses e outra com a soma dos últimos 6 meses.
O mesmo com a média. Últimos 24 meses e últimos 6 meses.
Porem, somente as notas que o consumo dos últimos 6 meses for 0 (zero), a coluna da média dos últimos 6 meses, se a carga terminar será zero, coloquei apenas para conferencia do resultado, não será necessária.
Vou tentar fazer isso de outra forma, mas já conferi diversas vezes o script e não consegui encontrar nenhum erro lógico, então resolvi postar aqui para esclarecer o porquê do Qlikview travar nessa carga.
Alguém sabe explicar isso? Também aceito sugestões para obter esse resultado, claro que preferencialmente com script.
Segue o código:
set vMax = 24;
set vMin = 6;
let vTempoMaximo = AddMonths(Today(),-$(vMax));
let vTempoMinimo = AddMonths(Today(),-$(vMin));
// Inline para testes
Notas:
LOAD * INLINE [
NOTA, DATA, VALOR
15171, 09/04/2011, "608,2"
15161, 09/03/2011, "75,34"
15153, 10/02/2011, "148,5"
15144, 09/01/2010, "145,23"
15135, 05/12/2009, "126,56"
15126, 05/11/2009, "174,8"
];
Consumo:
LOAD NOTA,
sum(if(Date(DATA)>=Date($(vTempoMaximo)),VALOR)) as [Soma dos $(vMax) Meses],
sum(if(Date(DATA)>=Date($(vTempoMinimo)),VALOR)) as [Soma dos $(vMin) Meses],
avg(if(Date(DATA)>=Date($(vTempoMaximo)),VALOR)) as [Média dos $(vMax) Meses],
avg(if(Date(DATA)>=Date($(vTempoMinimo)),VALOR)) as [Média dos $(vMin) Meses]
Resident Notas
Where avg(if(Date(DATA)>=Date($(vTempoMinimo)),VALOR)) = 0
Group By NOTA;
Olá Aderlan,
Você pode fazer assim e ver se funciona.
SET vMax = 24;
SET vMin = 6;
SET vTempoMaximo = AddMonths(Today(),-$(vMax));
SET vTempoMinimo = AddMonths(Today(),-$(vMin));
// Inline para testes DATABASE
Notas:
LOAD * INLINE [
NOTA, DATA, VALOR
15171, 09/04/2011, "608,2"
15161, 09/03/2011, "75,34"
15153, 10/02/2011, "148,5"
15144, 09/01/2010, "145,23"
15135, 05/12/2009, "126,56"
15126, 05/11/2009, "174,8"
15191, 09/04/2011, "0,0"
15192, 09/03/2011, "0,0"
15193, 10/02/2011, "0,0"
15194, 09/01/2010, "0,0"
15195, 05/12/2009, "0,0"
15196, 05/11/2009, "0,0"
];
TMP_Consumo:
LOAD NOTA,
sum(if(DATA >= $(vTempoMaximo),VALOR)) as [Soma dos $(vMax) Meses],
sum(if(DATA >= $(vTempoMinimo),VALOR)) as [Soma dos $(vMin) Meses],
avg(if(DATA >= $(vTempoMaximo),VALOR)) as [Média dos $(vMax) Meses],
avg(if(DATA >= $(vTempoMinimo),VALOR)) as [Média dos $(vMin) Meses]
Resident Notas
Group By NOTA;
Consumo:
NoConcatenate
LOAD *
Resident TMP_Consumo
Where [Média dos $(vMin) Meses] = 0;
DROP TABLE TMP_Consumo;
Abraços.
Tonial.
Boa Tarde,
Altere o seu código da seguinte forma:
let vTempoMaximo = AddMonths(Today(),-$(vMax));
let vTempoMinimo = AddMonths(Today(),-$(vMin));
Para:
set vTempoMaximo = AddMonths(Today(),-$(vMax));
set vTempoMinimo = AddMonths(Today(),-$(vMin));
E o campo:
sum(if(Date(DATA)>=Date($(vTempoMaximo)),VALOR)) as [Soma dos $(vMax) Meses],
Para:
sum(if(DATA >= $(vTempoMaximo),VALOR)) as [Soma dos $(vMax) Meses],
Abraços!!
Obrigado pela ajuda Eduardo, mas não funcionou!
Realmente o Qlikview não trava com as alterações que você indicou, mas acontece um outro erro:
Execução do script falhou. Deseja voltar aos dados antigos?
E minha dúvida continua... rsrsrsrs... se não tem nenhum erro no código, porque o Qlikview trava?
É um bug ou alguma regra do tipo: Não se deve usar a função Date em condições IF, não usar Sum com Grup By e etc...
Mais uma vez, obrigado.
Grande abraço.
Olá,
Segue um exemplo que utilizei para debugar e encontrar uma forma de demonstrar os valores solicitados.
Utilizei como base o exemplo que vc mencionou.
Abraços!
Excelente o seu teste, porém está sem o WHERE!
Quando removemos a clausula where não dá o segundo erro, mas eu preciso dessa condição, pois só me interessa as linhas as quais a média é 0 (zero).
Claro que nesse código que passei pode não ter uma média zero, foi apenas para exemplificar, mas nos dados reais são 7.931 linhas e com certeza há médias zero.
Como disse no post anterior, com certeza existe outras forma de obter esse resultado, mas a razão desse erro acontecer existe? Estou violando alguma regra no script ou é apenas um bug a ser corrigido, ou até mesmo, já foi corrigido na versão 11 que está saindo.
Valeu!!! Grande abraço.
Olá Aderlan,
Você pode fazer assim e ver se funciona.
SET vMax = 24;
SET vMin = 6;
SET vTempoMaximo = AddMonths(Today(),-$(vMax));
SET vTempoMinimo = AddMonths(Today(),-$(vMin));
// Inline para testes DATABASE
Notas:
LOAD * INLINE [
NOTA, DATA, VALOR
15171, 09/04/2011, "608,2"
15161, 09/03/2011, "75,34"
15153, 10/02/2011, "148,5"
15144, 09/01/2010, "145,23"
15135, 05/12/2009, "126,56"
15126, 05/11/2009, "174,8"
15191, 09/04/2011, "0,0"
15192, 09/03/2011, "0,0"
15193, 10/02/2011, "0,0"
15194, 09/01/2010, "0,0"
15195, 05/12/2009, "0,0"
15196, 05/11/2009, "0,0"
];
TMP_Consumo:
LOAD NOTA,
sum(if(DATA >= $(vTempoMaximo),VALOR)) as [Soma dos $(vMax) Meses],
sum(if(DATA >= $(vTempoMinimo),VALOR)) as [Soma dos $(vMin) Meses],
avg(if(DATA >= $(vTempoMaximo),VALOR)) as [Média dos $(vMax) Meses],
avg(if(DATA >= $(vTempoMinimo),VALOR)) as [Média dos $(vMin) Meses]
Resident Notas
Group By NOTA;
Consumo:
NoConcatenate
LOAD *
Resident TMP_Consumo
Where [Média dos $(vMin) Meses] = 0;
DROP TABLE TMP_Consumo;
Abraços.
Tonial.
Valeu Tonial, realmente dessa forma não dá erro, porém.... rsrsrsrs...
Não querendo ser chato... Por que tenho que fazer dessa forma se não há erros no script que fiz?
Obrigado a todos pela a ajuda.
Abraço.
Realmente não sei o motivo do erro, talvez alguem da QT possa dar uma respota para nós.
Mas para isso tem que abrir um chamado com eles.
Abraços.