7 Replies Latest reply: Jul 15, 2011 5:44 PM by Fernando Tonial RSS

    Porque o Qlikview trava com esse código?

    Aderlan Rodrigues

      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;   

        • Re: Porque o Qlikview trava com esse código?

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

            • Porque o Qlikview trava com esse código?
              Aderlan Rodrigues

              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.

                • Re: Porque o Qlikview trava com esse código?

                  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!

                    • Re: Porque o Qlikview trava com esse código?
                      Aderlan Rodrigues

                      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.

                        • Re: Porque o Qlikview trava com esse código?

                          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.