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, 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].
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;
Como criar uma tabela a partir de 2 fontes diferentes
Problema de performance grande Volume de Dados
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
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.
Clever, fiz o teste e mesma coisa, CPU grudada em 100%
Mario, vou começar a mexer aqui conforme tua sugestão.
Qual a expressão para a Column(11) ?
=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)
Da mesma forma, você pode simplicar com
RangeMax(0,sum([Ven. Ult. 365 dias]) + sum([QUANTIDADE_IND]) - sum(QUANTIDADE))/(sum( TOTAL {1}[total de vendas geral]))* 100
Clever, fiz a alteração nisso também.
Ficou assim:
Quando eu atualizo o documento e mando abrir a primeira vez a CPU vai a 100% e demora, mas depois os demais acessos abre super rápido e não sobrecarrega a CPU,
Mas esse problema de abrir a primeira vez depois da carga diária ainda vai me atrapalhar.
Em paralelo estou fazendo a alteração que o Mario também sugeriu.
Mario,
Estou fazendo em paralelo a tua sugestão também.
valeu