Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
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

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?

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

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

mario_sergio_ti
Partner - Specialist
Partner - Specialist

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;

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

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.

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Testou com o script acima?

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

Sim.

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

Continua os valores zerados !

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Me passa os QVDs;

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

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

Segue os QVDs Mario.

mario_sergio_ti
Partner - Specialist
Partner - Specialist

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

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

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.