Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
aderlanrm
Partner - Specialist
Partner - Specialist

Porque o Qlikview trava com esse código?

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;   

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
1 Solution

Accepted Solutions
Not applicable

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.

View solution in original post

7 Replies
Not applicable

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!!

aderlanrm
Partner - Specialist
Partner - Specialist
Author

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?

erro-qlikview-rc2-64bits.png

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.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
Not applicable

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!

aderlanrm
Partner - Specialist
Partner - Specialist
Author

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.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
Not applicable

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.

aderlanrm
Partner - Specialist
Partner - Specialist
Author

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.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
Not applicable

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.