Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Comparação Períodos Atual e Anterior

Boa tarde;

Estou iniciando a construção de um Dashboard, e nessa não terei seleção alguma, todos os filtros deverão ser feito via setanalysis.

Tenho um determinado gráfico, que ira comparar as vendas do mês atual com o mês anterior.

Suponhamos que hoje é dia 10/08/2014.

Vendas Mes_Atual - com a expressão ele ira somar de 01/08/2014 a 10/08/2014:

SUM( {<ANO=Year(Today()), MES=Month(Today())>}   VENDA_LIQUIDA)

Vendas Mes_Anterior - com a expressão ele ira somar de 01/07/2014 a 31/07/2014:

SUM( {<ANO=Year(Today())-1, MES=Month(Today())-1>}   VENDA_LIQUIDA)

Como o Mes_Atual nunca estará "completo", preciso corrigir a expressão Mes_Anterior, para que some apenas o período correspondente, assim terei a comparação correta.

Qual seria a maneira mais simples de fazer isso ?

Labels (1)
1 Solution

Accepted Solutions
offjunior
Creator
Creator

Bom dia!

Eu tentei exemplificar ao máximo como proceder para achar as datas máximas e mínimas de um período. Abra a aplicação, veja o objeto de texto, faça seleções e vá dando uma olhada para ver se é isso que você precisa. Depois é somente adaptar a sua necessidade real.

Abraço!

View solution in original post

30 Replies
Anonymous
Not applicable
Author

Cléber,

Você pode criar uma variável apontando para o seu mês anterior e utiliza-la ex:

SUM({$< Mes={$(vMesAnt)},Ano={$(vAnoAtual)}>} VENDA_LIQUIDA)

Você pode adicionar o seguinte comando na variável

Mês anterior: =Num(Month(Today(0)))-1

Ano Atual: =Year(Today(0))

fernando_tonial
Partner - Specialist
Partner - Specialist

Olá, veja esse post.

Soma YTD

Basta alterar o seu inicio do período, nesse caso para o início do Mês.

Qlikfique-se.

Tonial.

Don't Worry, be Qlik.
Not applicable
Author

Acho que estou me enrolando com a sintaxe do setanalysis quando necessita usar "menor igual".

A variavel vMesAtual = 'Agosto', ou seja...o mes corrente.

Preciso que some de janeiro a agosto do ano anterior, entao fiz assim:

=sum({<ANO= {$(#vAnoAnterior)},MES= {'<=$(#vMesAtual)'} >} VENDA_LIQUIDA)

...mas o resultado esta dando zero...

ele nao deveria somar janeiro a agosto de 2013 ??

Not applicable
Author

Ja tinha lido outro post seu que sugere a criação do flag e daquelas variáveis, mas achei muito elaborado pro que eu preciso, daria pra fazer algo mais simples.

Acho que estou me enrolando com a sintaxe do setanalysis quando necessita usar "menor igual".

A variavel vMesAtual = 'Agosto', ou seja...o mês corrente.

Preciso que some de janeiro a agosto do ano anterior, entao fiz assim:

=sum({<ANO= {$(#vAnoAnterior)},MES= {'<=$(#vMesAtual)'} >} VENDA_LIQUIDA)

...mas o resultado esta dando zero...

ele não deveria somar janeiro a agosto de 2013 ??

Anonymous
Not applicable
Author

Cléber,

Você pode utilizar algo do tipo

Sum(If(Ano=vAnoAnt AND Mes <> vMesAtual, VENDA_LIQUIDA ,0))

Ou

Sum(If(Ano < Year(Today(0)) AND Mes <> Month(Today(0)), VENDA_LIQUIDA,0))

offjunior
Creator
Creator

Amigo, boa tarde!

Percebi que você deve ter um calendário carregado, pois tem campos de MES e ANO, então provavelmente vc tem um campo com a data completa também. Use esse campo com a data completa no lugar de "SUA_DATA" em minha expressão.

'Venda Mês Corrente: '&

Sum({1<SUA_DATA= {"<=$(=Max(SUA_DATA))>=$(=MonthStart(Max(SUA_DATA)))"}

    >} VENDA_LIQUIDA)

'Venda Mês Anterior até o dia atual: '&

Sum({1<SUA_DATA= {"<=$(=AddMonths(Max(SUA_DATA),-1))>=$(=MonthStart(AddMonths(Max(SUA_DATA),-1)))"}

    >} VENDA_LIQUIDA)

Espero ter ajudado.

Not applicable
Author

ola Junior, bom dia !

Tenho sim um calendário carregado, bem como o campo da data completa.

Na verdade quero comparar o mês atual, com os dias ate a data presente, versus o mesmo mês do ANO anterior, no mesmo período de dias.

offjunior
Creator
Creator

Bom dia, tente fazer assim então!

//VENDA LIQUIDA DO MÊS CORRENTE

Sum({1<SUA_DATA= {"<=$(=Max(SUA_DATA))>=$(=MonthStart(Max(SUA_DATA)))"}

    >} VENDA_LIQUIDA)

//VENDA LIQUIDA DO MÊS CORRENTE POREM ANO ANTERIOR

Sum({1<SUA_DATA= {"<=$(=AddYears(Max(SUA_DATA), -1))>=$(=MonthStart(AddYears(Max(SUA_DATA), -1)))"}

    >} VENDA_LIQUIDA)

Caso isso não lhe sirva, me envie somente o LOAD do seu calendário para eu enviar uma aplicação de exemplo pra você.

Estou a disposição, abraço!

Not applicable
Author

Acho que estamos quase lá...acho que ainda não consegui passar o que estou precisando...vou tentar me expressar melhor:

- preciso de 2 números, para posteriormente fazer um percentual dividindo um pelo outro

- venda total do ano atual (esse numero ja tenho com SUM( {<ANO=Year(Today()), MES=Month(Today())>} 

VENDA_LIQUIDA)

- venda total do ano anterior, do mesmo período da formula acima, ou seja, se hoje estamos no dia 01/09/2014, terei os números:

- $999999 - correspondente de 01/01/2014 a 01/09/2014

- $999999 - correspondente de 01/01/2013 a 01/09/2013.

depois farei o mesmo com o mês atual vs mês anterior

- $999999 - correspondente de 01/09/2014 a 01/09/2014

- $999999 - correspondente de 01/09/2013 a 01/09/2013.

Abaixo segue meu calendário, pra vc ter uma ideia. Muito obrigado pela atenção !

LET vDateMin = Num(MakeDate(2011,01,1)); 

//LET vDateMax = Floor((Today()-1));

LET vDateMax = Floor((Today()+3)); 

LET vDateToday = Num(Today()); 

TempCalendar: 

LOAD

$(vDateMin) + RowNo() - 1 AS DateNumber, 

Date($(vDateMin) + RowNo() - 1) AS TempDate 

AUTOGENERATE 1 

WHILE $(vDateMin)+IterNo()-1<= $(vDateMax); 

Calendar: 

LOAD

date(Floor([TempDate]),'DD/MM/YYYY') as DATA,

week(Floor([TempDate])) as semanacalendario,

  if(month(weekend([TempDate]))= month([TempDate]),div(day(WeekEnd([TempDate])),7),div(day(Weekend([TempDate],-1)),7)+1)+1 as NumeroSemanaMes, 

// Standard Date Objects

Day(TempDate) AS DIA,

Num(Month(TempDate)) AS MêsNum,

WeekDay(TempDate) AS [Dia da Semana], 

Week(TempDate) AS [Semana], 

Month(TempDate) AS MES, 

//'Q' & Ceil(Month(TempDate)/3) AS CalendarQuarter, 

Year(TempDate) AS ANO,

// Calendar Date Names 

WeekName(TempDate) as SemanaAno, 

monthname(TempDate) as  MESANO, 

QuarterName(TempDate) as Quarter

RESIDENT TempCalendar ORDER BY TempDate ASC; 

DROP TABLE TempCalendar; 

LET vDateMin = Num(MakeDate(2000,1,1)); 

LET vDateMax = Floor(YearEnd(AddMonths(Today(), 12))); 

LET vDateToday = Num(Today());