Skip to main content
Announcements
Global Transformation Awards! Applications are now open. Submit Entry
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)
1 Solution

Accepted Solutions
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

View solution in original post

18 Replies
nicolett_yuri

André, para fazer isso, basta você colocar em variáveis as datas e utiliza-las em set analysis nas expressões.

Exemplo:

SET vDataUltima = =Data;

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

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

SUM({$<Data = {"$(vDataPenultima )"} >} VALOR)

SUM({$<Data = {"$(vDataAntiPenultima)"} >} VALOR)

OBS: Em sua tabela, não deve existir a dimensão Data, caso contrário o resultado esperado não ocorrerá.

andre_tonini
Creator II
Creator II
Author

Olá Yuri,

          Obrigado pelo retorno, não entendi muito bem a respeito da parte do SET (não conheço ainda muito bem essa parte).

          a) Seria assim a criação da variavel?

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 = =Data;

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

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

Um abraço

André Tonini

nicolett_yuri

Isso, mas não esqueça de trocar o "Data" pelo nome do seu campo de data

andre_tonini
Creator II
Creator II
Author

Olá Yuri,

          Desculpa, mas creio que Eu esteja ainda fazendo alguma coisa errada.

a) Segue estrutura do meu script, onde o campo MOV_DATA é "Data" e MOV_UNITARIO é "Valor"

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,

  MOV_CUSTOFISCAL,

    MOV_UNITARIO,

    MOV_ORIGEM

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

b) Na expressão defini o Penultimo Valor e AntePenultimo, respectivamente

SUM({$<DATA_MOV = {"$(vDataPenultima )"} >} MOV_UNITARIO) // esse é o penultimo

SUM({$<MOV_DATA = {"$(vDataAntiPenultima)"} >} MOV_UNITARIO) // esse é o antepenultimo

     Att,

     André Tonini

nicolett_yuri

Provavelmente é algo relacionado ao formato de sua data.

Vou fazer um exemplo com a app que você passou e te mando

lucianosv
Specialist
Specialist

Boa tarde.

Faz um teste assim:

SUM({$<DATA_MOV = {'17/05/2014'} >} MOV_UNITARIO)

SUM({$<MOV_DATA = {'15/05/2014'} >} MOV_UNITARIO)

Coloca dentro de uma caixa de texto com datas que você saiba o valor.

Se não resolver é o formato da data.

andre_tonini
Creator II
Creator II
Author

Boa tarde Luciano,

        Realizei um teste e confirmou que realmente é uma questão de formato de data.

         Informando uma data fixa na expressão, como citou, busca corretamente a informação.

att,

André Tonini

nicolett_yuri

Isso ae

lucianosv
Specialist
Specialist

Agora então é simples.

Testa outros formatos na caixa de texto para achar o correto e depois é só acertar a variável.