16 Replies Latest reply: Jun 23, 2016 8:34 AM by Clever Anjos RSS

    Demora em calculo trasnformador

    wagner fernandes

      Ola Galera boa tarde,

         Sei que é carnaval mais eu estou direto aqui e com este problema, seguinte, eu trabalho com o conceito de BI tradicional onde eu tenho um Extrator (select * no banco), transformador (onde faço os calculos e transformações necessarias) e por fim a visão que tem apenas o load das tabelas, muito bem, eu necessito fazer alguns calculos de juros e etc na fato e se tirando esses calculos o transformador roda em no maximo 5 minutos, porém com esses calculos esta levando mais de 1 hora, alguem poderia ajudar nesta questão ? seria melhor fazer esses calculos na visão então  pra ser mais rapido ?

       

      eu estou mandando o transformador em anexo tamanho o desespero, pois o projeto tem de entrar em producao na sexta feira. kkkkkkkkk

        • Re: Demora em calculo trasnformador
          Yuri Nicolett

          Wagner, em que parte de seu script estão esses cálculos?

          Qual a volumetria de registros dessa tabela em que esta realizando esses cálculos?

            • Re: Demora em calculo trasnformador
              wagner fernandes

              há aba que tenho esses calculos é a aba  FATO_WHOSALE

              a volumetria seria em torno de 2 milhoes de linha (é isso que quis perguntar Yuri )

                • Re: Demora em calculo trasnformador
                  Yuri Nicolett

                  Wagner, fazer o cálculo em um transformador sempre é a melhor opção, talvez o ponto em que você esteja pecando é em relação a não utilizar carga incremental.

                  Tente verificar uma regra para refazer somente os cálculos que ainda não foram feitos, ou do último dia, ou do último mês. Essa regra vai depender totalmente da regra de negócio de seus dados.

                   

                  Outro ponto: Sua tabela possui muitas colunas e talvez essas colunas não influenciem em seu cálculo. Veja se existe a necessidade de retornar tantas colunas nessa mesma tabela na hora de realizar esses cálculos. Tive um cliente em que foi necessário fazer o cálculo somente com as colunas necessárias e depois do cálculo pronto juntei a tabela com outra que possuía o restante das colunas.

                  • Re: Demora em calculo trasnformador
                    Alessandro Furtado

                    Wagner,

                     

                    eu ja alterei rotina que tinha um LOAD sobre LOAD que levava 35 minutos e fiz o LOAD sobre um resident e caiu para 4 minutos.

                     

                    Se você pegar o LOAD que faz os cálculos, se ler sobre o Resident e não como esta eu quase aposto que vai ficar mais rápido.....por mais estranho que pareca........

                     

                    TMP_FATO_WHOSALE:

                    LOAD

                         Atraso_Dealer_Contrato AS [ATRASO DEALER CONTRATO],

                         Codigo_Dealer AS [CODIGO DEALER],

                         Codigo_Contrato AS [CODIGO CONTRATO],

                         .

                         .

                         .

                    FROM $(vDadosExtraidos)CONTRATOS_WHOSALE.QVD(qvd); 

                     

                    FATO_WHOSALE:

                    LOAD *,

                         //qtde de dias é calculado atraves da diferença de dias entre a data do recebimento e a data auxiliar criada acima       Floor(Interval(floor([DATA AUXILIAR PRAZO CONTRATO]) - Floor([DATA FIM SUB]), 'DD')) AS [QTDE DIAS PRAZO CONTRATO],

                        .

                        .

                        .

                    Resident TMP_FATO_WHOSALE;

                    //

                    drop table TMP_FATO_WHOSALE;

                     

                      • Re: Demora em calculo trasnformador
                        wagner fernandes

                        Então Alessandro, ja havia feito isso de acordo, fiz a carga novamente como TMP e mais pra frente eu fiz a carga com os calculos, da na mesma fica lento do mesmo jeito

                        inclusive fiz 2 testes

                        1 - fiz a carga na tmp e fiz o load com o resident

                        2 - fiz a carga normal e salvei o QVD dai mais pra frente eu carreguei este QVD para incluir os calculos e deu na mesma, a questão é os calculos mesmo, muito pesado.

                          • Re: Demora em calculo trasnformador
                            Alessandro Furtado

                            Wagner,

                            tem um if que vi, me parece estranho.

                             

                                IF(

                                    Floor(Interval([DATA AUXILIAR PRAZO CONTRATO] - [DATA VENDA])) > 0,

                                    IF(

                                         Floor(([DATA DA VISTORIA FATO]) <= [DT FIM CONTRATO] )

                             

                            se perceber o <= do if esta dentro do Floor

                              • Re: Demora em calculo trasnformador
                                wagner fernandes

                                Alessandro realmente tinha esse erro, corrigi e ja fiz as alterações, porém mesmo assim, ja fazem 15 minutos e ate agora só processou 100 mil registros, e são mais de 2 milhoes, não tem condições assim, gente to vendo que não tem o que fazer, vou ter de criar um incremental mesmo e ja era.

                                  • Re: Demora em calculo trasnformador
                                    Yuri Nicolett

                                    O incremental vai resolver o seu problema.

                                    Depois veja se existe a necessidade de separar a tabela para o cálculo

                                      • Re: Demora em calculo trasnformador
                                        wagner fernandes

                                        Nunca implementei um incremental Yuri voce tem algum exemplo, a lógica eu até sei, mais no qlikview nunca implementei, e outra, ja esta separado o calculo da tabela e mesmo assim demorou 13 horas pra calcular tudo !

                                          • Re: Demora em calculo trasnformador
                                            Alessandro Furtado

                                            Boa noite Wagner.

                                             

                                            Se o incremental for em arquivo txt (do tipo de log), tem o comando incremental do load no Qlik que faz isto automaticamente.  Mas somente para arquivo txt.

                                             

                                            Se for banco, depende de ter data/hora ou um numero sequencial da ultima leitura, para continuar.

                                            Ainda tem a questão se tem update/delete nos dados ja lidos.....

                                             

                                            Segue um exemplo de incremental em tabela que nao tem delete nem update

                                             

                                            Eu verifico se ja tem arquivo QVD. Se tem, entao tenho um ponto para continuar.

                                             

                                            Leio o banco e tendo o QVD anterior concateno e salvo sobre o QVD (vai crescendo....).

                                             

                                            Se tiver update/delete ai muda um pouco.  Tem que ter uma data/hora alteracao e where exists e not exists  mas no manual tem exemplos de como fazer.

                                             

                                             

                                            //=================================================================================================================================

                                            //

                                            LET vQvdExists = if(FileSize('$(STGPath)\$(STGPrefixo)CDPOS.QVD') > 0, -1, 0);

                                            IF $(vQvdExists) THEN

                                              MaxSeq:

                                              LOAD MaxString(CHANGENR) as MaxSeq FROM [$(STGPath)\$(STGPrefixo)CDPOS.QVD] (qvd);

                                              LET vIncrementalExpression = ' and CHANGENR >=' & chr(39) & peek('MaxSeq') & chr(39);

                                              DROP table MaxSeq;

                                            ELSE

                                              LET vIncrementalExpression = '';

                                            END IF

                                             

                                             

                                            TRACE '$(vIncrementalExpression)';

                                            //=================================================================================================================================

                                            CDPOS:

                                            SQL SELECT * FROM CDPOS Where TABNAME = 'MARA' and FNAME = 'MSTAE' and OBJECTCLAS = 'MATERIAL' $(vIncrementalExpression);

                                            //

                                            IF $(vQvdExists) THEN

                                              CONCATENATE (CDPOS) LOAD * FROM $(STGPath)\$(STGPrefixo)CDPOS.QVD (qvd) WHERE NOT exists(CHANGENR);

                                            END IF

                                            //

                                            STORE CDPOS INTO $(STGPath)\$(STGPrefixo)CDPOS.QVD(QVD);

                                            DROP TABLE CDPOS;

                                            //=================================================================================================================================

                                            //

                            • Re: Demora em calculo trasnformador
                              wagner fernandes

                              Galera eu gostaria de agradecer de coração ao pronto atendimento que eu tive por partes de vocês, vocês são foda mesmo.

                              seguinte, eu fiz um compilado de tudo o que vocês me disseram, e fiz o seguinte, as comparações de datas com interval e floor eu separei, ou seja, utilizei o floor ja na criação de todos os campos de data que eu utilizei na comparação la no calculo,  fiz um load em cima do primeiro load da fato para fazer o calculo dessa diferença com o interval e criei um campo quantidade, com isso eliminei um IF la no calculo, dentro do pow a mesma coisa, eu eliminei os interval que tinha la e retornava ja o calculo pronto pra dentro da funcao.

                               

                              com isso sem usar o incremental, baixei de 14 horas para 15 minutos.....

                              tudo isso só foi possivel graças as explanações de vocês, meu muito obrigado, aprendi mais essa, ou melhor, mais essas, porque só neste post eu aprendi muitas coisas ao mesmo tempo sobre como o qlikview processa os dados.

                               

                              mais uma vez meu muito obrigado ao yuri.nicolett (ai Yuri ja estou ficando bom só falta seu convite pra equipe estou no aguardo ainda) ao ALESSANDRO FURTADO (não consegui achar seu nome para mencionar alessandro) que me enviou os exemplos e achou o erro na aplicação.

                              • Re: Demora em calculo trasnformador
                                Clever Anjos

                                Já conseguiu a resposta? Se sim, escolha uma e marque como "Correta" para fechar o tópico e nos ajudar a manter a comunidade organizada