49 Replies Latest reply: May 31, 2017 2:02 PM by marcio teixeira RSS

    acumulado via Script / percentual item

    marcio teixeira

      Bom dia Comunidade!!!

       

      Fiz a programação do campo acumulado item  na expressão:


        ( =if(RangeSum(above(TOTAL Column(11),0,NoOfRows(TOTAL))) > 100,'100,00',RangeSum(above(TOTAL Column(11),0,NoOfRows(TOTAL)))))  ,


      Só que comecei a ter um problema no acesso ao documento, tanto no Qlikdesktopestao  como pelo Access Point, estao muito demorado para abrir e no Servidor a CPU  vai a 100%.


      Então parti para  fazer no script, que estou com dificuldades de ajustar isso porque são 5 campos que entram na soma/multiplicação/subtração para chegar no percentual que preciso para acumular, esses campos vem de 4 tabelas, estou tentando fazer o Concatenate para juntar na mesma informação mas não estou conseguindo ajustar.


      Tenho uma coluna aonde eu chego no percentual do item:

      meus campos são esses e essas são as tabelas:

       

      =if(sum([Ven. Ult. 365 dias]) + sum([QUANTIDADE_IND]) - sum(QUANTIDADE)< 0,0,

      (sum([Ven. Ult. 365 dias]) + sum([QUANTIDADE_IND]) - sum(QUANTIDADE)) / (sum( TOTAL {1}[total de vendas geral]))* 100)

       

      [Ven. Ult. 365 dias]:           vem da tabela: [Sugestao_Compra]

      [total de vendas]:                vem da tabela: [Sugestao_Compra]

      [QUANTIDADE]:             vem da tabela: [Devoluções]

      [QUANTIDADE_IND]:   vem da tabela:[Industrializações]



      Depois criei a coluna percentual item acumulado com essa expressão: ( muito demorado pra abrir o documento depois de colocada)

       

      ( =if(RangeSum(above(TOTAL Column(11),0,NoOfRows(TOTAL))) > 100,'100,00',RangeSum(above(TOTAL Column(11),0,NoOfRows(TOTAL)))))  ,




      A dimensão que liga é o campo ITEM_ESTOQUE



      tentei seguir teu o exemplo do artigo do Mario Soares : Incluindo saldo/acumulado via Script ou via Expressão

      mas não estou me achando, Agradeço a ajuda.


       

        • Re: acumulado via Script / percentual item
          Clever Anjos

          Pode fazer um teste rápido, talvez alivie um pouco a expressão

          RangeMin(100,RangeSum(above(TOTAL Column(11),0,NoOfRows(TOTAL))))  pois só executa o rangesum() uma vez

          • Re: acumulado via Script / percentual item
            MARIO SOARES

            Amigo, segue;

             

            Tab_Temp_Compra:
            //Sugestao_Compra
            NoConcatenate Load
                ITEM_ESTOQUE,
                Data,
                [Ven. Ult. 365 dias],
                [total de vendas]
            From [Lib://QVD/Sugestao_Compra.QVD] (qvd);
            
            Left Join
            
            //Devolucoes
            Load
                ITEM_ESTOQUE,
                QUANTIDADE
            From [Lib://QVD/Devoluções.QVD] (qvd);
            
            Left Join
            
            //Industrializacaes
            Load
                ITEM_ESTOQUE,
                QUANTIDADE_IND
            From [Lib://QVD/Industrializações.QVD] (qvd);
            
            Tab_Movimento:
            NoConcatenate Load
              ITEM_ESTOQUE,
              Data,
              Rangesum(
                  If( ITEM_ESTOQUE = Previous(ITEM_ESTOQUE),
                      If( Rangesum( [Ven. Ult. 365 dias], [QUANTIDADE_IND], -QUANTIDADE) < 0, 0 + Peek(Saldo),
                          Rangesum( [Ven. Ult. 365 dias], [QUANTIDADE_IND], -QUANTIDADE, Peek(Saldo) )
                        )
                      ,If( Rangesum( [Ven. Ult. 365 dias], [QUANTIDADE_IND], -QUANTIDADE) < 0, 0,
                          Rangesum( [Ven. Ult. 365 dias], [QUANTIDADE_IND], -QUANTIDADE)
                         )
                    )
              ) As  'Saldo'
            Resident Tab_Temp_Compra Order By ITEM_ESTOQUE, Data Asc;
            
            Drop Table Tab_Temp_Compra;
            
            

             

            Amigo, não tinha a origem do atributo [total de vendas geral], então tente fazer via frond-end a parte da divisão pelo total e teste a performance.

            Considerei a tabela Sugestao_Compra como principal, e inclui o atributo Data para ordenação, caso não tenha, pode ser um id incremental da tabela que represente a ordem.

            Incluí NoConcatenate por precaução.

              • Re: acumulado via Script / percentual item
                marcio teixeira

                Mario, vou começar a mexer aqui conforme tua sugestão.

                • Re: acumulado via Script / percentual item
                  marcio teixeira

                  Mario,

                   

                  Estou fazendo em paralelo a tua sugestão também.

                  valeu

                  • Re: acumulado via Script / percentual item
                    marcio teixeira

                    Mario,

                     

                    Vou colocar abaixo como fiz, eu nao tenho campo de data.

                    Fiz via frond-end a parte da divisão como voce sugeriu

                    O meu resultado na coluna foi o mesmo valor da column 11, ele nao fez o acumulado, fez a operação de soma e divisao

                    no frond-end coloquei o campo acumulado / (sum( TOTAL {1}[total de vendas geral]))* 100)


                    ele fez o percentual mas como escrevi igual a column 11, sem acumular, não sei aonde fiz o erro.

                     

                    Tab_Temp_Compra: 

                    //Sugestao_Compra 

                    NoConcatenate Load 

                        ITEM_ESTOQUE, 

                        [Ven. Ult. 365 dias], 

                        [total de vendas geral] 

                    resident Sugestao_Compra; 

                     

                    Left Join 

                     

                    //Devolucoes 

                    Load 

                        ITEM_ESTOQUE, 

                        QUANTIDADE 

                    resident Devoluções; 

                     

                    Left Join 

                     

                    //Industrializacaes 

                    Load 

                        ITEM_ESTOQUE, 

                        QUANTIDADE_IND 

                    resident Industrializações; 

                     

                    Tab_Movimento: 

                    NoConcatenate Load 

                      ITEM_ESTOQUE, 

                      

                      Rangesum( 

                          If( ITEM_ESTOQUE = Previous(ITEM_ESTOQUE), 

                              If( Rangesum( [Ven. Ult. 365 dias], [QUANTIDADE_IND], -QUANTIDADE) < 0, 0 + Peek(acumulado), 

                                  Rangesum( [Ven. Ult. 365 dias], [QUANTIDADE_IND], -QUANTIDADE, Peek(acumulado) ) 

                                ) 

                              ,If( Rangesum( [Ven. Ult. 365 dias], [QUANTIDADE_IND], -QUANTIDADE) < 0, 0, 

                                  Rangesum( [Ven. Ult. 365 dias], [QUANTIDADE_IND], -QUANTIDADE) 

                                 ) 

                            ) 

                      ) As  'acumulado' 

                    Resident Tab_Temp_Compra Order By ITEM_ESTOQUE  Asc; 

                     

                    Drop Table Tab_Temp_Compra; 

                      • Re: acumulado via Script / percentual item
                        MARIO SOARES

                        Amigo, precisa de uma definição de qual ordem deve acontecer o cálculo acumulado para cada linha do registro, para dar certo.

                        Pode postar um print da sua tabela como está no front-end?

                         

                        Observe o resultado acumulado na ordem por produto/título e data por exemplo neste documento para entender a lógica;

                         

                        Incluindo saldo/acumulado via Script ou via Expressão

                          • Re: acumulado via Script / percentual item
                            marcio teixeira

                            a ordenação na tabela eu faço pelo campo: Total Geral( Vendas + Indus - Dev ), na parte de classificação ele esta por expressao decrescente: =sum([Ven. Ult. 365 dias]) + sum([QUANTIDADE_IND]) - sum(QUANTIDADE)

                            conforme o print da minha tabela, estou analisando o documento que voce enviou o linkSem título.png

                              • Re: acumulado via Script / percentual item
                                MARIO SOARES

                                Amigo, segue;

                                 

                                Tab_Temp_Compra1: 
                                //Sugestao_Compra 
                                NoConcatenate Load 
                                    ITEM_ESTOQUE, 
                                    [Ven. Ult. 365 dias], 
                                    [total de vendas] 
                                From [Lib://QVD/Sugestao_Compra.QVD] (qvd); 
                                
                                  Left Join 
                                  //Devolucoes 
                                  Load 
                                      ITEM_ESTOQUE, 
                                      QUANTIDADE 
                                  From [Lib://QVD/Devoluções.QVD] (qvd); 
                                
                                    Left Join 
                                    //Industrializacaes 
                                    Load 
                                        ITEM_ESTOQUE, 
                                        QUANTIDADE_IND 
                                    From [Lib://QVD/Industrializações.QVD] (qvd); 
                                
                                Tab_Temp_Compra2:
                                NoConcatenate Load
                                  ITEM_ESTOQUE,
                                  RangeSum([Ven. Ult. 365 dias], [QUANTIDADE_IND], -QUANTIDADE) As 'Total Geral',
                                  [Ven. Ult. 365 dias],
                                  [total de vendas],
                                  QUANTIDADE,
                                  QUANTIDADE_IND
                                Resident Tab_Temp_Compra1; 
                                Drop Table Tab_Temp_Compra1;
                                
                                Tab_Movimento: 
                                NoConcatenate Load 
                                  ITEM_ESTOQUE, 
                                  [Total Geral],
                                  Rangesum( 
                                      If( ITEM_ESTOQUE = Previous(ITEM_ESTOQUE), 
                                          If( [Total Geral] < 0, Peek(Saldo), Rangesum( [Total Geral], Peek(Saldo) ) ) 
                                          ,If( [Total Geral] < 0, 0, [Total Geral] ) 
                                        ) 
                                  ) As  'Saldo'
                                Resident Tab_Temp_Compra2 Order By ITEM_ESTOQUE, [Total Geral] Desc;
                                Drop Table Tab_Temp_Compra2;
                                
                                  • Re: acumulado via Script / percentual item
                                    marcio teixeira

                                    Mario,

                                     

                                    Coloquei como você enviou acima, mas ele continua colocando o mesmo valor, não o acumulado.

                                     

                                    Tab_Temp_Compra1:

                                    //Sugestao_Compra

                                    NoConcatenate Load

                                        ITEM_ESTOQUE,

                                        [Ven. Ult. 365 dias],

                                        [total de vendas geral] as  [total de vendas]

                                    resident Sugestao_Compra;

                                     

                                     

                                      Left Join

                                      //Devolucoes

                                      Load

                                          ITEM_ESTOQUE,

                                          QUANTIDADE

                                      resident Devoluções;

                                     

                                     

                                        Left Join

                                        //Industrializacaes

                                        Load

                                            ITEM_ESTOQUE,

                                            QUANTIDADE_IND

                                        resident Industrializações;

                                     

                                     

                                    Tab_Temp_Compra2:

                                    NoConcatenate Load

                                      ITEM_ESTOQUE,

                                      RangeSum([Ven. Ult. 365 dias], [QUANTIDADE_IND], -QUANTIDADE) As 'Total Geral',

                                      [Ven. Ult. 365 dias],

                                      [total de vendas],

                                      QUANTIDADE,

                                      QUANTIDADE_IND

                                    Resident Tab_Temp_Compra1;

                                    Drop Table Tab_Temp_Compra1;

                                     

                                     

                                    Tab_Movimento:

                                    NoConcatenate Load

                                      ITEM_ESTOQUE,

                                      [Total Geral],

                                      Rangesum(

                                          If( ITEM_ESTOQUE = Previous(ITEM_ESTOQUE),

                                              If( [Total Geral] < 0, Peek(Saldo), Rangesum( [Total Geral], Peek(Saldo) ) )

                                              ,If( [Total Geral] < 0, 0, [Total Geral] )

                                            )

                                      ) As  'Saldo'

                                    Resident Tab_Temp_Compra2 Order By ITEM_ESTOQUE, [Total Geral] Desc;

                                    Drop Table Tab_Temp_Compra2;

                                      • Re: acumulado via Script / percentual item
                                        MARIO SOARES

                                        Amigo, você diz que [Total Geral] está igual a [Saldo]?

                                         

                                        Crie uma tabela com somente os atributos abaixo, como dimensão;

                                        [ITEM_ESTOQUE], [Total Geral] e [Saldo]

                                         

                                        E apresente um print do resultado.

                                            • Re: acumulado via Script / percentual item
                                              MARIO SOARES

                                              Amigo, segue

                                               

                                              Tab_Temp_Compra1:
                                              //Sugestao_Compra
                                              NoConcatenate Load  
                                                  ITEM_ESTOQUE,
                                                  [Ven. Ult. 365 dias],
                                                  [total de vendas geral] as  [total de vendas]
                                              From [Lib://QVD/Sugestao_Compra.QVD] (qvd);  
                                              
                                                Left Join  
                                                //Devolucoes
                                                Load  
                                                    ITEM_ESTOQUE,
                                                    QUANTIDADE
                                                From [Lib://QVD/Devoluções.QVD] (qvd);  
                                              
                                                  Left Join  
                                                  //Industrializacaes
                                                  Load  
                                                      ITEM_ESTOQUE,
                                                      QUANTIDADE_IND
                                                  From [Lib://QVD/Industrializações.QVD] (qvd);  
                                              
                                              Tab_Temp_Compra2:
                                              NoConcatenate Load  
                                                ITEM_ESTOQUE,
                                                RangeSum([Ven. Ult. 365 dias], [QUANTIDADE_IND], -QUANTIDADE) As 'Total Geral',  
                                                [Ven. Ult. 365 dias],
                                                [total de vendas],
                                                QUANTIDADE,
                                                QUANTIDADE_IND
                                              Resident Tab_Temp_Compra1;
                                              Drop Table Tab_Temp_Compra1;  
                                              
                                              Tab_Movimento:
                                              NoConcatenate Load  
                                                ITEM_ESTOQUE,
                                                [Total Geral],
                                                Rangesum(
                                                    If( RowNo() > 1,
                                                        If( [Total Geral] < 0, Peek(Saldo), Rangesum( [Total Geral], Peek(Saldo) ) )
                                                        ,If( [Total Geral] < 0, 0, [Total Geral] )
                                                      )
                                                ) As  'Saldo'
                                              Resident Tab_Temp_Compra2 Order By [Total Geral] Desc;  
                                              Drop Table Tab_Temp_Compra2; 
                                              
                                              


                                              Amigo, percebi que na sua tabela, o registros de ITEM_ESTOQUE não se repetem (valores distintos), a função If( ITEM_ESTOQUE = Previous(ITEM_ESTOQUE),  ..., ...) era para acumular somente os valores dos itens correspondetes. Então removi.

                                                • Re: acumulado via Script / percentual item
                                                  marcio teixeira

                                                  Grande Mario, fechou meu amigo, sensacional.

                                                  Agora estou recarregando o documento completo para ver como ficou a performance, mas esta vindo certinho no script.

                                                  em seguida te aflo como ficou a performance

                                                    • Re: acumulado via Script / percentual item
                                                      MARIO SOARES

                                                      Que ótimo amigo, fico no aguardo para saber como ficou o seu cenário. Abraço.

                                                        • Re: acumulado via Script / percentual item
                                                          marcio teixeira

                                                          Mario, seguinte meu amigo, vou descrever como ficou e vou colocar aqui 2 print do documento sendo acessado pelo Access Point.

                                                           

                                                          Quando eu coloco para atualizar no Desktop ou no Server e vou abrir ou acessar pela internet a primeira vez o documento demora muito e a CPU continua indo em 100% e ficando, ate aparecer os objetos da tela, depois que é aberto ou acessado pela primeira vez, ele abre sempre muito rápido e não consome quase nada de CPU.

                                                           

                                                          Eu coloquei com um disparador para abrir automaticamente em outra aba, para que o documento não ficasse trancado, assim ele abre muito rápido mesmo sendo a primeira vez depois da atualização, mas quando eu acesso a aba nova a CPU vai a 100% e tranca o documento.

                                                           

                                                          Com certeza o esquema que você indicou pelo script ficou muito bom, porque antes ele não abria nenhuma aba, agora tenho que tentar resolver isso, pois o cliente acessa e ele não vai querer aguardar 5 a 10 minutos que é o tempo que leva para abrir.

                                                           

                                                          Sinceramente não sei como resolver isso, agradeço imensamente a tua ajuda mario.sergio.ti, a ajuda do cleveranjos e do afurtado.

                                                          Pois acredito que tomei um tempo muito precioso de vocês, agradeço a ajuda, a paciência e o empenho em me ajudar e com certeza aprendi muito com vocês, só tenho a agradecer.

                                                           

                                                          Se vocês ainda tiverem mais alguma dica, links de material e orientações sobre otimização, desempenho e melhores praticas eu agradeço imensamente se compartilharem comigo, já acessei alguns materiais publicados aqui no fórum e na internet, amanha irei encerrar essa discussão.

                                                           

                                                          Segue abaixo os prints do comportamento quando o documento abre e quando eu acesso a aba da nova planilha.

                                                           

                                                          aba que abre o BI ( automatico) cpu normal.png

                                                           

                                                           

                                                           

                                                          nova aba quando clica a cpu vai a 100%.png

                                                            • Re: acumulado via Script / percentual item
                                                              MARIO SOARES

                                                              Amigo, como está a expressão do percentual?

                                                              É possíveis transferir a lógica para o script também.

                                                                • Re: acumulado via Script / percentual item
                                                                  marcio teixeira

                                                                  Bom dia Mario,

                                                                   

                                                                  Segue expressão do percentual do item:

                                                                   

                                                                  = (sum([Ven. Ult. 365 dias]) + sum([QUANTIDADE_IND]) - sum(QUANTIDADE)) / (sum( TOTAL {1}[total de vendas geral]))* 100

                                                                    • Re: acumulado via Script / percentual item
                                                                      MARIO SOARES

                                                                      Certo, e agora o percentual acumulado, como está no momento?

                                                                        • Re: acumulado via Script / percentual item
                                                                          marcio teixeira

                                                                          =([Saldo] / (sum( TOTAL {1}[total de vendas geral]))* 100)

                                                                            • Re: acumulado via Script / percentual item
                                                                              MARIO SOARES

                                                                              Amigo, segue;

                                                                               

                                                                              Map_Devolucoes:
                                                                              Mapping Load 
                                                                                ITEM_ESTOQUE,
                                                                                QUANTIDADE
                                                                              From [Lib://QVD/Devoluções.QVD] (qvd); 
                                                                              
                                                                              Map_Industrializacaes:
                                                                              Mapping Load 
                                                                                ITEM_ESTOQUE,
                                                                                QUANTIDADE_IND
                                                                              From [Lib://QVD/Industrializações.QVD] (qvd);
                                                                              
                                                                              Tab_Temp_Compra1:
                                                                              //Sugestao_Compra
                                                                              NoConcatenate Load 
                                                                                  ITEM_ESTOQUE,
                                                                                  Applymap('Map_Devolucoes', ITEM_ESTOQUE) As 'QUANTIDADE',
                                                                                  Applymap('Map_Industrializacaes', ITEM_ESTOQUE) As 'QUANTIDADE_IND',
                                                                                  [Ven. Ult. 365 dias],
                                                                                  [total de vendas geral] As [total de vendas]
                                                                              From [Lib://QVD/Sugestao_Compra.QVD] (qvd); 
                                                                              
                                                                              Tab_Temp_Compra2:
                                                                              NoConcatenate Load 
                                                                                ITEM_ESTOQUE,
                                                                                RangeSum([Ven. Ult. 365 dias], [QUANTIDADE_IND], -QUANTIDADE) As 'Total Geral', 
                                                                                [Ven. Ult. 365 dias],
                                                                                [total de vendas],
                                                                                QUANTIDADE,
                                                                                QUANTIDADE_IND
                                                                              Resident Tab_Temp_Compra1;
                                                                                Outer Join
                                                                                Load Sum([total de vendas]) As 'total de vendas geral' Resident Tab_Temp_Compra2;
                                                                              Drop Table Tab_Temp_Compra1;
                                                                              
                                                                              Tab_Temp_Compra3:
                                                                              NoConcatenate Load 
                                                                                ITEM_ESTOQUE,
                                                                                [Total Geral],
                                                                                [total de vendas geral],
                                                                                Rangesum(
                                                                                    If( RowNo() > 1,
                                                                                        If( [Total Geral] < 0, Peek(Saldo), Rangesum( [Total Geral], Peek(Saldo) ) )
                                                                                        ,If( [Total Geral] < 0, 0, [Total Geral] )
                                                                                      )
                                                                                ) As  'Saldo'
                                                                              Resident Tab_Temp_Compra2 Order By [Total Geral] Desc; 
                                                                              Drop Table Tab_Temp_Compra2;
                                                                              
                                                                              Tab_Movimento: 
                                                                              NoConcatenate Load 
                                                                                ITEM_ESTOQUE,
                                                                                [Total Geral],
                                                                                [total de vendas geral],
                                                                                [Saldo],
                                                                                [Total Geral] / [total de vendas geral] * 100 As 'Percentual do item',
                                                                                [Saldo] / [total de vendas geral] * 100 As 'Percentual do item acumulado'
                                                                              Resident Tab_Temp_Compra3; 
                                                                              Drop Table Tab_Temp_Compra3;
                                                                              
                                                                              
                                                                              

                                                                               

                                                                              Parece que a cardinalidade das tabelas Devoluções para Sugestao_Compra é de 1:1 e Industrializações para Sugestao_Compra é de 1:1, então substituir Left Join por Mapping por conta da performance ao executar o script.

                                                                               

                                                                              Algumas recomendações:

                                                                              Padronizar o nome dos campos;

                                                                              Remover campos/atributos não utilizados;

                                                                              Diminuir a massa de dados utilizando Exists() e delimitar na estrutura o período que é utilizado pelos usuários;

                                                                              Transferir outros cálculos estáticos para o script.

                                                                                • Re: acumulado via Script / percentual item
                                                                                  marcio teixeira

                                                                                  Mario,

                                                                                   

                                                                                  Coloquei cada expressão na sua coluna: 'Percentual do item' e Percentual do item acumulado.

                                                                                  E agora ficou sem valores, estranho: mas quando eu coloco em outro tabela so os campos da tabela Tab_Movimento eles aparecem.

                                                                                   

                                                                                   

                                                                                  Sem título.png

                                                                                    • Re: acumulado via Script / percentual item
                                                                                      MARIO SOARES

                                                                                      Crie uma tabela com os atributos da tabela Tab_Movimento e envie um print;

                                                                                       

                                                                                        [Total Geral], 

                                                                                        [total de vendas geral], 

                                                                                        [Saldo]

                                                                                          • Re: acumulado via Script / percentual item
                                                                                            MARIO SOARES

                                                                                            Mostre agora com todos os atributos da tabela Tab_Movimento.

                                                                                                • Re: acumulado via Script / percentual item
                                                                                                  MARIO SOARES

                                                                                                  O saldo está funcionando corretamente?

                                                                                                    • Re: acumulado via Script / percentual item
                                                                                                      marcio teixeira

                                                                                                      Não meu amigo, aparece com -.

                                                                                                        • Re: acumulado via Script / percentual item
                                                                                                          MARIO SOARES

                                                                                                          Na imagem acima o campo Saldo está com valores na tabela... Não?

                                                                                                            • Re: acumulado via Script / percentual item
                                                                                                              marcio teixeira

                                                                                                              Mario,

                                                                                                               

                                                                                                              Apliquei na tabela de teste dos prints a mesma classificação da planilha compras e agora deu certo no teste:

                                                                                                              =sum([Ven. Ult. 365 dias]) + sum([QUANTIDADE_IND]) - sum(QUANTIDADE)  desc

                                                                                                               

                                                                                                              Mas na planilha de compras aparece com os -, segue imagens:

                                                                                                               

                                                                                                              Sem título.png

                                                                                                              Sem título.png

                                                                                                               

                                                                                                               

                                                                                                               

                                                                                                               

                                                                                                               

                                                                                                               

                                                                                                               

                                                                                                              Sem título.png

                                                                                                                • Re: acumulado via Script / percentual item
                                                                                                                  MARIO SOARES

                                                                                                                  Não entendi porque está utilizando sum([Ven. Ult. 365 dias]) + sum([QUANTIDADE_IND]) - sum(QUANTIDADE) ao invés de 'Total Geral'.

                                                                                                                   

                                                                                                                  Você entendeu a lógica do script que te passei?

                                                                                                                   

                                                                                                                  Classifica pelo [Total Geral] e veja o resultado.

                                                                                                                    • Re: acumulado via Script / percentual item
                                                                                                                      marcio teixeira

                                                                                                                      ta certo Mario, desculpa ai, tava ratiando aqui.

                                                                                                                      Coloquei o campo na ordem mas mesmo assim quando esta na planilha de compras ele nao esta vindo os valores, na planilha de este vem certinho.

                                                                                                                       

                                                                                                                      Entendi sim a logica do teu script.

                                                                                                                        • Re: acumulado via Script / percentual item
                                                                                                                          MARIO SOARES

                                                                                                                          Certo;

                                                                                                                          Não tenho a visão da diferença entre a planilha de compras para a de vendas;

                                                                                                                          Então posso entender que seja algo na modelagem, nos relacionamentos;

                                                                                                                           

                                                                                                                          O saldo estava funcionando antes?

                                                                                                                            • Re: acumulado via Script / percentual item
                                                                                                                              marcio teixeira

                                                                                                                              sim, estava funcionando. estou analisando aqui também para ver aonde pode ser.

                                                                                                                                • Re: acumulado via Script / percentual item
                                                                                                                                  MARIO SOARES

                                                                                                                                  Pode ser a questão da cardinalidade então, havia substituído Left Join por Mapping, porém a técnica não recuperar mais de um valor no AppyMap();

                                                                                                                                  Segue alternativa;

                                                                                                                                   

                                                                                                                                  Tab_Temp_Compra1: 
                                                                                                                                  //Sugestao_Compra 
                                                                                                                                  NoConcatenate Load 
                                                                                                                                      ITEM_ESTOQUE,
                                                                                                                                      [Ven. Ult. 365 dias], 
                                                                                                                                      [total de vendas geral] As [total de vendas] 
                                                                                                                                  From [Lib://QVD/Sugestao_Compra.QVD] (qvd);
                                                                                                                                    Left Join 
                                                                                                                                      Load  ITEM_ESTOQUE, QUANTIDADE  From [Lib://QVD/Devoluções.QVD] (qvd); 
                                                                                                                                    Left Join 
                                                                                                                                      Load  ITEM_ESTOQUE, QUANTIDADE_IND  From [Lib://QVD/Industrializações.QVD] (qvd);     
                                                                                                                                  
                                                                                                                                  Tab_Temp_Compra2: 
                                                                                                                                  NoConcatenate Load 
                                                                                                                                    ITEM_ESTOQUE, 
                                                                                                                                    RangeSum([Ven. Ult. 365 dias], [QUANTIDADE_IND], -QUANTIDADE) As 'Total Geral', 
                                                                                                                                    [Ven. Ult. 365 dias], 
                                                                                                                                    [total de vendas], 
                                                                                                                                    QUANTIDADE, 
                                                                                                                                    QUANTIDADE_IND 
                                                                                                                                  Resident Tab_Temp_Compra1; 
                                                                                                                                    Outer Join 
                                                                                                                                      Load Sum([total de vendas]) As 'total de vendas geral' Resident Tab_Temp_Compra1; 
                                                                                                                                  Drop Table Tab_Temp_Compra1; 
                                                                                                                                  
                                                                                                                                  Tab_Temp_Compra3: 
                                                                                                                                  NoConcatenate Load 
                                                                                                                                    ITEM_ESTOQUE, 
                                                                                                                                    [Total Geral], 
                                                                                                                                    [total de vendas geral], 
                                                                                                                                    Rangesum( 
                                                                                                                                        If( RowNo() > 1, 
                                                                                                                                            If( [Total Geral] < 0, Peek(Saldo), Rangesum( [Total Geral], Peek(Saldo) ) ) 
                                                                                                                                            ,If( [Total Geral] < 0, 0, [Total Geral] ) 
                                                                                                                                          ) 
                                                                                                                                    ) As  'Saldo' 
                                                                                                                                  Resident Tab_Temp_Compra2 Order By [Total Geral] Desc; 
                                                                                                                                  Drop Table Tab_Temp_Compra2; 
                                                                                                                                  
                                                                                                                                  Tab_Movimento: 
                                                                                                                                  NoConcatenate Load 
                                                                                                                                    ITEM_ESTOQUE, 
                                                                                                                                    [Total Geral], 
                                                                                                                                    [total de vendas geral], 
                                                                                                                                    [Saldo], 
                                                                                                                                    [Total Geral] / [total de vendas geral] * 100 As 'Percentual do item', 
                                                                                                                                    [Saldo] / [total de vendas geral] * 100 As 'Percentual do item acumulado' 
                                                                                                                                  Resident Tab_Temp_Compra3; 
                                                                                                                                  Drop Table Tab_Temp_Compra3; 
                                                                                                                                  
                                                                                                                                    • Re: acumulado via Script / percentual item
                                                                                                                                      marcio teixeira

                                                                                                                                      Bah Mario, mexi de tudo que foi jeito para ver o que poderia ser, mas nao aparece o valor nas colunas de %, nem item e nem acumulado, que loucura.

                                                                                                                                        • Re: acumulado via Script / percentual item
                                                                                                                                          MARIO SOARES

                                                                                                                                          Testou com o script acima?

                                                                                                                                            • Re: acumulado via Script / percentual item
                                                                                                                                              marcio teixeira

                                                                                                                                              Sim.

                                                                                                                                               

                                                                                                                                              Mario fiz o seguinte, enxutei bem o documento, vou anexar aqui, não sei se ajuda.

                                                                                                                                              Continua os valores zerados !

                                                                                                                                                • Re: acumulado via Script / percentual item
                                                                                                                                                  MARIO SOARES

                                                                                                                                                  Me passa os QVDs;

                                                                                                                                                  Deveria ter funcionado o script acima, pelo menos o valor de Saldo, pois só acrescentei.

                                                                                                                                                    • Re: acumulado via Script / percentual item
                                                                                                                                                      marcio teixeira

                                                                                                                                                      Segue os QVDs Mario.

                                                                                                                                                        • Re: acumulado via Script / percentual item
                                                                                                                                                          MARIO SOARES

                                                                                                                                                          Amigo, o erro estava em um conflito com o atributo/campo [total de vendas geral] da tabela Tab_Movimento com Sugestao_Compra, estava gerando chaves sintéticas, num todo 5 tabelas com chaves sintéticas, então tive que renomear para [total de vendas global].

                                                                                                                                                          Solução:

                                                                                                                                                           

                                                                                                                                                          Sugestao_Compra:
                                                                                                                                                          LOAD
                                                                                                                                                              Grupo,
                                                                                                                                                              SubGrupo,
                                                                                                                                                              ITEM_ESTOQUE,
                                                                                                                                                              Descrição,
                                                                                                                                                              "Item + Descrição Item",
                                                                                                                                                              Peso,
                                                                                                                                                              O.Compra,
                                                                                                                                                              "Qtd. Caixa",
                                                                                                                                                              "QMI A ou B",
                                                                                                                                                              "Dias Calc. Demanda",
                                                                                                                                                              "Vda Diaria Ultimos 365 dias",
                                                                                                                                                              "Cot. Ult. 365 dias",
                                                                                                                                                              "Ofe. Ult. 365 dias",
                                                                                                                                                              "Ven. Ult. 365 dias",
                                                                                                                                                              "total de vendas geral",
                                                                                                                                                              "TARGET PRICE"
                                                                                                                                                          FROM [lib://converter_e828745e7c63480e5fbdbf0a85a0fe08/Sugestao_Compra.qvd](qvd);
                                                                                                                                                          
                                                                                                                                                          quantidade_vendida:
                                                                                                                                                          LOAD
                                                                                                                                                              PED_FILIAL,
                                                                                                                                                              ITEM_ESTOQUE,
                                                                                                                                                              VEN_QTDE
                                                                                                                                                          FROM [lib://converter_e828745e7c63480e5fbdbf0a85a0fe08/quantidade_vendida.qvd](qvd);
                                                                                                                                                          
                                                                                                                                                          Preço_Net:
                                                                                                                                                          LOAD
                                                                                                                                                              ITEM_ESTOQUE,
                                                                                                                                                              "Preço NET Forn.",
                                                                                                                                                              "Preço Compra"
                                                                                                                                                          FROM [lib://converter_e828745e7c63480e5fbdbf0a85a0fe08/Preço_Net.qvd](qvd);
                                                                                                                                                          
                                                                                                                                                          compra_China:
                                                                                                                                                          LOAD
                                                                                                                                                              coc_codigo,
                                                                                                                                                              coc_numero,
                                                                                                                                                              FOR_NOME,
                                                                                                                                                              ITEM_ESTOQUE,
                                                                                                                                                              ITE_DESCRI,
                                                                                                                                                              oci_qtdtot,
                                                                                                                                                              ITE_DIASPA,
                                                                                                                                                              ITE_DIASCT
                                                                                                                                                          FROM [lib://converter_e828745e7c63480e5fbdbf0a85a0fe08/compra_China.qvd](qvd);
                                                                                                                                                          
                                                                                                                                                          Clientes:
                                                                                                                                                          LOAD
                                                                                                                                                              codigo_cliente,
                                                                                                                                                              Nome_Cliente
                                                                                                                                                          FROM [lib://converter_e828745e7c63480e5fbdbf0a85a0fe08/Clientes.qvd](qvd);
                                                                                                                                                          
                                                                                                                                                          [Vendas 12 meses]:
                                                                                                                                                          LOAD
                                                                                                                                                              MESANO_VENDAS_12_MESES,
                                                                                                                                                              ANO_VENDAS_12_MESES,
                                                                                                                                                              MES_VENDAS_12_MESES,
                                                                                                                                                              TOTAL_VENDAS_12_MESES
                                                                                                                                                          FROM [lib://converter_e828745e7c63480e5fbdbf0a85a0fe08/Vendas 12 meses.qvd](qvd);
                                                                                                                                                          
                                                                                                                                                          [Vendas Media Item]:
                                                                                                                                                          LOAD
                                                                                                                                                              ITEM_ESTOQUE,
                                                                                                                                                              MESANO_VENDAS_MEDIA_ITEM,
                                                                                                                                                              ANO_VENDAS_MEDIA_ITEM,
                                                                                                                                                              MES_VENDAS_MEDIA_ITEM,
                                                                                                                                                              TOTAL_VENDAS_MEDIA_ITEM,
                                                                                                                                                              REG
                                                                                                                                                          FROM [lib://converter_e828745e7c63480e5fbdbf0a85a0fe08/Vendas Media Item.qvd](qvd);
                                                                                                                                                          
                                                                                                                                                          DesvioPadrao:
                                                                                                                                                          LOAD
                                                                                                                                                              ITEM_ESTOQUE,
                                                                                                                                                              MESANO_VENDAS_12_DESV,
                                                                                                                                                              ANO_VENDAS_12_DESV,
                                                                                                                                                              MES_VENDAS_12_DESV,
                                                                                                                                                              TOTAL_VENDAS_12_DESV
                                                                                                                                                          FROM [lib://converter_e828745e7c63480e5fbdbf0a85a0fe08/DesvioPadrao.qvd](qvd);
                                                                                                                                                          
                                                                                                                                                          CurvaFrequencia:
                                                                                                                                                          LOAD
                                                                                                                                                              ITEM_ESTOQUE,
                                                                                                                                                              "TOTAL NOTAS CURVA FREQUENCIA"
                                                                                                                                                          FROM [lib://converter_e828745e7c63480e5fbdbf0a85a0fe08/CurvaFrequencia.qvd](qvd);
                                                                                                                                                          
                                                                                                                                                          QMI:
                                                                                                                                                          LOAD
                                                                                                                                                              ITEM_ESTOQUE,
                                                                                                                                                              codigo_cliente,
                                                                                                                                                              CCM_QTD_CONSUMO,
                                                                                                                                                              CCM_QTD_POTENCIAL,
                                                                                                                                                              CLASS_CLIENTE_QMI
                                                                                                                                                          FROM [lib://converter_e828745e7c63480e5fbdbf0a85a0fe08/QMI.qvd](qvd);
                                                                                                                                                          
                                                                                                                                                          // //QVD de Estoque Ausente
                                                                                                                                                          // [Estoque]:
                                                                                                                                                          // Load
                                                                                                                                                          //  AutoNumber(ITEM_ESTOQUE&'-'&REVENDA,'SK_EST_REV') As '%SK_EST_REV',
                                                                                                                                                          //  REVENDA,
                                                                                                                                                          //  ITEM_ESTOQUE,
                                                                                                                                                          //  QTD_CONTABIL,
                                                                                                                                                          //  QTD_PEDIDA,
                                                                                                                                                          //  DEMANDA_MEDIA,
                                                                                                                                                          //  DISPONIVEL
                                                                                                                                                          // FROM [lib://converter_e828745e7c63480e5fbdbf0a85a0fe08/Estoque.qvd](qvd);
                                                                                                                                                          
                                                                                                                                                          // Apl_negociação:
                                                                                                                                                          // LOAD
                                                                                                                                                          //  AutoNumber(ITEM_ESTOQUE&'-'&REVENDA,'SK_EST_REV') As '%SK_EST_REV',
                                                                                                                                                          //  //REVENDA,
                                                                                                                                                          //  //ITEM_ESTOQUE,
                                                                                                                                                          //  QTD_NEGOCIACAO
                                                                                                                                                          // FROM [lib://converter_e828745e7c63480e5fbdbf0a85a0fe08/Apl_negociação.qvd]
                                                                                                                                                          // (qvd);
                                                                                                                                                          
                                                                                                                                                          Devoluções:
                                                                                                                                                          LOAD
                                                                                                                                                              ITEM_ESTOQUE,
                                                                                                                                                              QUANTIDADE
                                                                                                                                                          FROM [lib://converter_e828745e7c63480e5fbdbf0a85a0fe08/Devoluções.qvd](qvd);
                                                                                                                                                          
                                                                                                                                                          Industrializações:
                                                                                                                                                          LOAD
                                                                                                                                                              ITEM_ESTOQUE,
                                                                                                                                                              QUANTIDADE_IND
                                                                                                                                                          FROM [lib://converter_e828745e7c63480e5fbdbf0a85a0fe08/Industrializações.qvd](qvd);
                                                                                                                                                          
                                                                                                                                                          Tab_Temp_Compra1: //Sugestao_Compra
                                                                                                                                                          NoConcatenate Load
                                                                                                                                                              ITEM_ESTOQUE,
                                                                                                                                                              [Ven. Ult. 365 dias],
                                                                                                                                                              [total de vendas geral] As [total de vendas]
                                                                                                                                                          resident Sugestao_Compra;
                                                                                                                                                            Left Join
                                                                                                                                                              Load  ITEM_ESTOQUE, QUANTIDADE  resident Devoluções;
                                                                                                                                                            Left Join
                                                                                                                                                              Load  ITEM_ESTOQUE, QUANTIDADE_IND  resident Industrializações; 
                                                                                                                                                          Drop Table Devoluções, Industrializações;
                                                                                                                                                          
                                                                                                                                                          Tab_Temp_Compra2:
                                                                                                                                                          NoConcatenate Load
                                                                                                                                                            ITEM_ESTOQUE,
                                                                                                                                                            RangeSum([Ven. Ult. 365 dias], [QUANTIDADE_IND], -QUANTIDADE) As 'Total Geral',
                                                                                                                                                            [Ven. Ult. 365 dias],
                                                                                                                                                            [total de vendas],
                                                                                                                                                            QUANTIDADE,
                                                                                                                                                            QUANTIDADE_IND
                                                                                                                                                          Resident Tab_Temp_Compra1;
                                                                                                                                                            Outer Join
                                                                                                                                                              Load Sum([total de vendas]) As 'total de vendas global' Resident Tab_Temp_Compra1;
                                                                                                                                                          Drop Table Tab_Temp_Compra1;
                                                                                                                                                          
                                                                                                                                                          Tab_Temp_Compra3:
                                                                                                                                                          NoConcatenate Load
                                                                                                                                                            ITEM_ESTOQUE,
                                                                                                                                                            [Total Geral],
                                                                                                                                                            [total de vendas global],
                                                                                                                                                            Rangesum(
                                                                                                                                                                If( RowNo() > 1,
                                                                                                                                                                    If( [Total Geral] < 0, Peek(Saldo), Rangesum( [Total Geral], Peek(Saldo) ) )
                                                                                                                                                                    ,If( [Total Geral] < 0, 0, [Total Geral] )
                                                                                                                                                                  )
                                                                                                                                                            ) As  'Saldo'
                                                                                                                                                          Resident Tab_Temp_Compra2 Order By [Total Geral] Desc;
                                                                                                                                                          Drop Table Tab_Temp_Compra2;
                                                                                                                                                          
                                                                                                                                                          Tab_Movimento:
                                                                                                                                                          NoConcatenate Load
                                                                                                                                                            ITEM_ESTOQUE,
                                                                                                                                                            [Total Geral],
                                                                                                                                                            [total de vendas global],
                                                                                                                                                            [Saldo],
                                                                                                                                                            Num([Total Geral] / [total de vendas global],'00,00%') As 'Percentual do item',
                                                                                                                                                            Num([Saldo] / [total de vendas global],'00,00%') As 'Percentual do item acumulado'
                                                                                                                                                          Resident Tab_Temp_Compra3;
                                                                                                                                                          Drop Table Tab_Temp_Compra3;
                                                                                                                                                          

                                                                                                                                                           

                                                                                                                                                          Resultado:

                                                                                                                                                          Capturar.JPG

                                                                                                                                                          Algumas recomendações importantes:

                                                                                                                                                          • Remover atributos nas querys não utilizados na estrutura do Load
                                                                                                                                                          • Evitar chaves sintéticas, a maioria das vezes é falha na modelagem
                                                                                                                                                          • Definir um modelo para a arquitetura de dados, exemplos: Star, SnowFlake...
                                                                                                                                                          • Utilizar Exists() para remover registros desnecessários
                                                                                                                                                          • Gerar QVDs da fonte de dados e utilizar para carregar no projeto
                                                                                                                                                          • Desenvolver as expressões de cálculos estáticos no back-end (script) e utilizar no front-end (layout)
                                                                                                                                                          • Padronização dos campos

                                                                                                                                                           

                                                                                                                                                          Referências:

                                                                                                                                                          Aplicação final

                                                                                                                                                          Como criar uma tabela a partir de 2 fontes diferentes

                                                                                                                                                          Problema de performance grande Volume de Dados

                                                                                                                                                            • Re: acumulado via Script / percentual item
                                                                                                                                                              marcio teixeira

                                                                                                                                                              Poxa Mario, fechou todas, está 100% , não esta mais sobrecarregando a CPU.

                                                                                                                                                              entendi tudo o que você fez, realmente preciso me dedicar mais a esta parte de performance e modelagem, estou deixando muito a desejar nessa parte.

                                                                                                                                                              Não tenho palavras para agradecer o teu tempo, paciência, empenho e muita boa vontade em me ajudar,

                                                                                                                                                              Vou pesquisar mais sobre as dicas que você passou.

                                                                                                                                                              Muito obrigado meu amigo, fico te devendo mais 1.

                                                                                                                                                               

                                                                                                                                                              Grande abraço.

                                                                                    • Re: acumulado via Script / percentual item
                                                                                      Clever Anjos

                                                                                      Qual a expressão para a Column(11) ?