Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Pessoal, tenho uma tabela de vendas com um campo de data no formato: MM/YYYY.
Este campo está nomeado como "anomes" e tenho um campo "receita" na mesma tabela.
Eu preciso que conforme o filtro aplicado em "anomes", seja feito um comparativo da receita do período acumulado do ano até o "anomes" selecionado" e o mesmo período do ano anterior.
Ex: Se aplicar o filtro 11/2017, preciso que calcule o acumulado de 2017 até o mês 11 e outra coluna que compare o acumulado de 2016 até o mês 11.
Tentei algumas sintaxes com Set Analysis mas não consegui fazer.
Vamos lá Bruno.
Para fazer o somatório conforme o filtro realizado:
Sum({<ANOMES={">=$(=Date(Date#(YearStart(Date(Date#(GetFieldSelections(ANOMES),'mm/yyyy'),'mm/yyyy')),'dd/mm/yyyy'),'mm/yyyy'))<=$(=GetFieldSelections(ANOMES))"}>}RECEITA)
Comparativo do mesmo período no ano anterior:
Sum({<ANOMES={">=$(=Date(Date#(AddYears(YearStart(Date(Date#(GetFieldSelections(ANOMES),'mm/yyyy'),'dd/mm/yyyy')),-1),'dd/mm/yyyy'),'mm/yyyy'))<=$(=Date(Date#(AddMonths(Date(Date#(AddYears(Date(Date#(GetFieldSelections(ANOMES),'mm/yyyy'),'dd/mm/yyyy'),-1),'dd/mm/yyyy'),'mm/yyyy'),1),'dd/mm/yyyy'),'mm/yyyy'))"}>}RECEITA)
Por que tanta formatação??
R:Estou usando o GetFieldSelections, que retorna string. Daí a necessidade de formatar o campo.
Teste minhas fórmulas com o script abaixo:
TABELA:
LOAD
*,
Date(Date#(DATA,'dd/mm/yyyy'),'mm/yyyy') as ANOMES;
LOAD * INLINE [
DATA,RECEITA
01/01/2018,100
01/02/2018,80
01/01/2017,85
01/02/2017,99
01/01/2016,123,
01/02/2016,130
];
Abs e Sucesso!!
Bruno
Sum({<anomes={">=$(=date(floor(YearStart(Max(anomes)))))<=$(=date(floor(MonthEnd(Max(anomes))))"}>} Receita)
coloquei o date(floor()) pois nao sei o conteudo do seu campo data (se é datetime)
senao poderia ser
Sum({<anomes={">=$(=YearStart(Max(anomes)))<=$(=MonthEnd(Max(anomes))"}>} Receita)
do ano passado
Sum({<anomes={">=$(=YearStart(max(anomes),-1)<=$(=MonthEnd(max(anomes),-12)"}>} Receita)
*** Não coloquei em um editor de script portanto pode ter algum erro de parêntesis ou algo do gênero...
Vamos lá Bruno.
Para fazer o somatório conforme o filtro realizado:
Sum({<ANOMES={">=$(=Date(Date#(YearStart(Date(Date#(GetFieldSelections(ANOMES),'mm/yyyy'),'mm/yyyy')),'dd/mm/yyyy'),'mm/yyyy'))<=$(=GetFieldSelections(ANOMES))"}>}RECEITA)
Comparativo do mesmo período no ano anterior:
Sum({<ANOMES={">=$(=Date(Date#(AddYears(YearStart(Date(Date#(GetFieldSelections(ANOMES),'mm/yyyy'),'dd/mm/yyyy')),-1),'dd/mm/yyyy'),'mm/yyyy'))<=$(=Date(Date#(AddMonths(Date(Date#(AddYears(Date(Date#(GetFieldSelections(ANOMES),'mm/yyyy'),'dd/mm/yyyy'),-1),'dd/mm/yyyy'),'mm/yyyy'),1),'dd/mm/yyyy'),'mm/yyyy'))"}>}RECEITA)
Por que tanta formatação??
R:Estou usando o GetFieldSelections, que retorna string. Daí a necessidade de formatar o campo.
Teste minhas fórmulas com o script abaixo:
TABELA:
LOAD
*,
Date(Date#(DATA,'dd/mm/yyyy'),'mm/yyyy') as ANOMES;
LOAD * INLINE [
DATA,RECEITA
01/01/2018,100
01/02/2018,80
01/01/2017,85
01/02/2017,99
01/01/2016,123,
01/02/2016,130
];
Abs e Sucesso!!
Boa tarde, obrigado pela ajuda.
A primeira fórmula funcionou perfeitamente, mas a segunda não.
Do ano anterior está retornando um número bem inferior ao que seria o real.
Só para complementar, o ano anterior está somando apenas os 2 primeiros meses (janeiro e fevereiro).
Abs.
oi Thiago, deixa eu explicar melhor.
Eu filtrei 10-2017.
A primeira expressão somou corretamente o período de 01-2017 até 10-2017.
A segunda expressão somou apenas 01-2016 e 02-2016 (os 2 primeiros meses).
Abs e obrigado.
Bruno,
Verifica assim por favor:
Sum({<anomes={">=$(=YearStart(AddYears(anomes,-1))<=$(=MonthEnd(max(anomes),-12)"}>} Receita) //Aproveitando a fórmula do Furtado.
Ou ainda:
Sum({<anomes={">=$(=YearStart(AddYears(anomes,-1))<=$(=MakeDate(Year(anomes)-1,Month(anomes),MothEnd(anomes)))"}>} Receita)
oi Thiago, tentei com as formulas do Furtado mas fica zerado, estava faltando parenteses mas mesmo assim não funcionou.
Não sei se tem relacionamento com a formatação da data.
A sua primeira funcionou perfeitamente, só a segunda que não somou todo o acumulado.
Então vamos trabalhar a segunda:
Sum({<ANOMES={">=$(=Date(Date#(AddYears(YearStart(Date(Date#(GetFieldSelections(ANOMES),'mm/yyyy'),'dd/mm/yyyy')),-1),'dd/mm/yyyy'),'mm/yyyy'))<=$(=Date(Date#(AddYears(Date(Date#(GetFieldSelections(ANOMES),'mm/yyyy'),'dd/mm/yyyy')),-1),'dd/mm/yyyy'),'mm/yyyy'))"}>}RECEITA)
Agora ele somou o valor total como se não tivesse nenhum filtro aplicado. Ficou a soma de todos os valores de todo o período.
Chato isso hein rs