Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
marcio150972
Creator
Creator

acumulado via Script / percentual item

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.


Labels (1)
49 Replies
mario_sergio_ti
Partner - Specialist
Partner - Specialist

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.

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
marcio150972
Creator
Creator
Author

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

mario_sergio_ti
Partner - Specialist
Partner - Specialist

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

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
marcio150972
Creator
Creator
Author

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

mario_sergio_ti
Partner - Specialist
Partner - Specialist

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

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

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
marcio150972
Creator
Creator
Author

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

mario_sergio_ti
Partner - Specialist
Partner - Specialist

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

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
marcio150972
Creator
Creator
Author

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

mario_sergio_ti
Partner - Specialist
Partner - Specialist

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.

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
marcio150972
Creator
Creator
Author

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