Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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, só 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.
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.
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
Que ótimo amigo, fico no aguardo para saber como ficou o seu cenário. Abraço.
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.
Amigo, como está a expressão do percentual?
É possíveis transferir a lógica para o script também.
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
Certo, e agora o percentual acumulado, como está no momento?
=([Saldo] / (sum( TOTAL {1}[total de vendas geral]))* 100)
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.
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.