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: 
andre_tonini
Creator II
Creator II

Ultimos 3 Preços de Compras

Boa Tarde,

        Pessoal, precisaria adicionar um calendário onde Eu possa consultar os documentos por data e que de acordo com esse filtro possa ter em 3 colunas o último preço, penultimo preço e antepenultimo.

         A idéia é poder auditar diariamente a evolução do preço de compra se teve aumento ou redução com relação ao ultimo preço com o histórico das outras 2 últimas compras.

         No exemplo abaixo, hoje dia 18/09/2014 estariamos analisando o que entrou de nota fiscal ontem e analisar se nos últimos 3 preços de compras houve vairação.

11.jpg

          Anexo segue o qvw caso alguem possa me ajudar.

att,

André Tonini

Labels (1)
18 Replies
andre_tonini
Creator II
Creator II
Author

Yuri e Luciano,

        Cara é só Eu chutar pro gol mas ainda não consegui ...rsrsrs...

        Pois bem, analisei e fiz os seguintes testes:

a)  Primeiro resolvi consultar direto no banco de dados (IBExpert) e essa data esta como 'DD.MM.YYYY'
b)  Editei o script e fui alterando as variaveis abaixo em vermelho para 'DD.MM.YYYY' ou 'DD-MM-YYYY' ou 'YYYY/MM/DD' enfim fiz diversas combinações e carregava o script.

SET DateFormat='DD/MM/YYYY';

SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';

SET MonthNames='jan;fev;mar;abr;mai;jun;jul;ago;set;out;nov;dez';

SET DayNames='seg;ter;qua;qui;sex;sáb;dom';

SET vDataUltima = =MOV_DATA;

SET vDataPenultima = Date(MOV_DATA-1, 'DD.MM.YYYY');

SET vDataAntiPenultima = Date(MOV_DATA-2, 'DD.MM.YYYY');

c)  Na expressão notei que está considerando apenas a configuração que está na variavel DateFormat='DD/MM/YYYY' ou seja, se nessa variavel eu colocar 'DD.MM.YYYY' vai funcionar apenas se Eu deixar fixo uma data na expressão.

11.jpg

Att,

André Tonini

lucianosv
Specialist
Specialist

Bom dia.

Tenta tratar a data. Não sei com vêm do banco. Talvez o formato que você apurou seja só visualização.

Testa com as suas.

date(num(today()), 'DD/MM/YYYY')  = '19/09/2014'

date(num(today()), 'DD.MM.YYYY')  = '19.09.2014'

nicolett_yuri

Eu não tinha visto a app em anexo.

Segue como que faz!

Dica: Como você esta fazendo o filtro em outros campos de data e não no DATA_MOV, você deve zera-los (Ano, Mês e Dia) no Set Analysis e depois passar a variável.

andre_tonini
Creator II
Creator II
Author

Olá Yuri,

       Analisei o qvw, porém quando informo uma data no filtro, na coluna "Penultima Compra' e 'AntePenultima Compra" gera valor zerado.

       Montei um exemplo no excel pois pensei que poderia ser algo quanto a data, e dessa forma já me atenderia.

a) Os dados são os que estão na tabela abaixo, onde apresenta os produtos que tiveram movimento de entrada nas respectivas datas (MOV_DATA) e valor (MOV_UNITARIO).

11.jpg

b) Sendo assim, digamos que estou hoje dia 20/09/2014 realizando uma consulta informando no filtro MOV_DATA para saber o que movimentou hoje e saber o penultimo e antpenultimo valor, seria mais ou menos assim:

11.png

Desde já agradeço pela atenção.

André Tonini

nicolett_yuri

André, eu fiz em relação a data, se filtrar 22/09/2014 a penúltima recebe 21/09/2014 e a antepenúltima 20/09/2014, mas na verdade você precisa de acordo com as vendas (não sequencial).

Vou verificar como fazer e te passo um exemplo.

andre_tonini
Creator II
Creator II
Author

Bom dia Yuri,

          Legal...muito obrigado.

André Tonini

nicolett_yuri

Estou achando que não da para fazer com set analysis.

Vou tentar uma solução pelo script

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Boa noite.

Pelo o que entendi o resultado deveria ser o abaixo como exemplo?

Código Produto Data Entrada Nº Nota Fiscal Empresa Preço Ultima Compra Preço Penultima Preço AntePenultima
305807/02/201473305120,230,000,00
305805/03/201428894119,1520,230,00
305808/04/201429723118,1119,1520,23
305810/06/201430772118,1118,1119,15
305824/06/201431187117,5618,1118,11
305803/07/201431352117,5617,5618,11
305828/07/201480422117,7217,5617,56
305807/08/201432170117,7217,7217,56
305814/08/201432359117,7217,7217,72

Se for, basta usar o seguinte codigo abaixo do seu

left join (PRODUTOS_MOVIMENTOS_F)

add LOAD

   MOV_DOCUMENTO,

   PRO_CODIGO,

   MOV_DATA,

   if(PRO_CODIGO = Previous(PRO_CODIGO),Previous(MOV_CUSTOFISCAL))                          as Penultimo,

   if(PRO_CODIGO = Previous(Previous(PRO_CODIGO)),Previous(Previous(MOV_CUSTOFISCAL)))      as AntePenultimo

Resident PRODUTOS_MOVIMENTOS_F Order by PRO_CODIGO,DATA_MOV;

Att,

Alessandro Furtado

furtado@farolbi.com.br
andre_tonini
Creator II
Creator II
Author

Alessandro,

        Boa tarde, tudo bem?

        Desculpa toda essa demora em retorná-lo, mas era exatamente isso que Eu precisava!

        Adicionei no script a parte citada por você e fechou.

SET ThousandSep='.';

SET DecimalSep=',';

SET MoneyThousandSep='.';

SET MoneyDecimalSep=',';

SET MoneyFormat='R$ #.##0,00;-R$ #.##0,00';

SET TimeFormat='hh:mm:ss';

SET DateFormat='DD/MM/YYYY';

SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';

SET MonthNames='jan;fev;mar;abr;mai;jun;jul;ago;set;out;nov;dez';

SET DayNames='seg;ter;qua;qui;sex;sáb;dom';

SET vDataUltima = =MOV_DATA;

SET vDataPenultima = Date(MOV_DATA-1, 'DD/MM/YYYY');

SET vDataAntiPenultima = Date(MOV_DATA-2, 'DD/MM/YYYY');

ODBC CONNECT TO bi;

// ---- Movimento Produto/Custo ---- //

LOAD *,

    YEAR(MOV_DATA) AS ANO_MOV,

    MONTH(MOV_DATA) AS MES_MOV,

    DAY(MOV_DATA) AS DIA_MOV,

    DATE(MOV_DATA) AS DATA_MOV,

    WEEK(MOV_DATA) AS SEMANA_MOV,

    WEEKDAY(MOV_DATA) AS DIA_SEMANA_MOV;

SQL SELECT

  MOV_DATA,

  MOV_PRO_CODIGO AS PRO_CODIGO,

  MOV_FIL_CODIGO,

  MOV_CUSTOFISCAL,

  MOV_DOCUMENTO,

    MOV_UNITARIO,

    MOV_ORIGEM

FROM PRODUTOS_MOVIMENTOS_F WHERE MOV_DATA > '31.12.2013' AND MOV_ORIGEM = 'NTC';

left join (PRODUTOS_MOVIMENTOS_F)

add LOAD

   MOV_DOCUMENTO,

   PRO_CODIGO,

   MOV_DATA,

   if(PRO_CODIGO = Previous(PRO_CODIGO),Previous(MOV_UNITARIO))                          as Penultimo,

   if(PRO_CODIGO = Previous(Previous(PRO_CODIGO)),Previous(Previous(MOV_UNITARIO)))      as AntePenultimo

Resident PRODUTOS_MOVIMENTOS_F Order by PRO_CODIGO,DATA_MOV;

        Obrigado

Att,

André Tonini