Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
Not applicable

Gráfico acumulado com comparativo entre períodos

Pesquisei bastante no forum tanto em português como em ingles, também fiz uma pesquisa longa no Google/YT para encontrar a solução mas nada me ajudou a construir o que preciso.

Hoje tenho um gráfico de linhas que compara uma produção acumulada MTD vs. período anterior. Por exemplo, compara uma produção acumulada no mês de janeiro/2017 contra a produção acumulada em janeiro/2016.

Capturar.PNG

O exemplo acima foi retirado de uma outra ferramenta que eu utilizo aqui.

Já tentei usar RANGESUM() e AsOf mas o acumulado não muda (ou simplesmente não gera).

Com o RangeSum(Above(Sum([Sales]),0,RowNo())) eu consegui gerar um gráfico acumulado, porém ao tentar comparar com o período anterior, nenhuma tentativa deu certo.

Com o AsOf, utilizei a sugestão do HIC. Ele gera uma tabela com os períodos mas quando eu tento chamar: Sum({<PeriodType{='YTD'} Sales) ele não traz o acumulado. E ao tentar mudar o PeriodType para outras categorias, também não reflete no gráfico.

CONCATENATE (MASTER)

LOAD

     MonthStart(date([Sales],'YYYYMM')) as Period1,

     MonthName([Sales]) as Month

RESIDENT MASTER;

// Temporary table with list of Period values

PeriodTbl:

LOAD date(fieldvalue('Period1',recno()),'YYYYMM') as Period

AUTOGENERATE fieldvaluecount('Period1');

AsOfPeriodTable:

//Load every month as current month into AsOf table

LOAD

Period as AsOfPeriod

,'Current' as PeriodType

,Period as Period1

,Year(Period) as Year

RESIDENT PeriodTbl;

CONCATENATE (AsOfPeriodTable)

//Load Rolling 3 into AsOf table

LOAD

Period as AsOfPeriod

,'Rolling 3' as PeriodType

,date(addmonths(Period,1-iterno()),'YYYYMM') as Period1

,Year(Period) as Year

RESIDENT PeriodTbl

WHILE iterno() <= 3;

CONCATENATE (AsOfPeriodTable)

//Load Rolling 6 into AsOf table

LOAD

Period as AsOfPeriod

,'Rolling 6' as PeriodType

,date(addmonths(Period,1-iterno()),'YYYYMM') as Period1

,Year(Period) as Year

RESIDENT PeriodTbl

WHILE iterno() <= 6;

CONCATENATE (AsOfPeriodTable)

//Load Rolling 12 into AsOf table

LOAD

Period as AsOfPeriod

,'Rolling 12' as PeriodType

,date(addmonths(Period,1-iterno()),'YYYYMM') as Period1

,Year(Period) as Year

RESIDENT PeriodTbl

WHILE iterno() <= 12;

CONCATENATE (AsOfPeriodTable)

//Load YTD into AsOf table

LOAD

Period as AsOfPeriod

,'YTD' as PeriodType

,date(addmonths(Period,1-iterno()),'YYYYMM') as Period1

,Year(Period) as Year

RESIDENT PeriodTbl

WHILE iterno() <= num(month(Period));

LET vStartDate = date(Date#('20080101','YYYYMMDD'));

CONCATENATE (AsOfPeriodTable)

//Load RollingToDate into AsOf table

LOAD

Period as AsOfPeriod

,'RollingToDate' as PeriodType

,date(addmonths(Period,1-iterno()),'YYYYMM') as Period1

,Year(Period) as Year

RESIDENT PeriodTbl

WHILE $(vStartDate) <= date(addmonths(Period,1-iterno()),'YYYYMM') ;

INNER JOIN (AsOfPeriodTable)

LOAD Period as Period1

RESIDENT PeriodTbl;

DROP TABLE PeriodTbl;

Alguém tem uma sugestão ou sabe o caminho da pedras?

Mensagem editada por: Rodrigo Sato

4 Replies
MVP
MVP

Re: Gráfico acumulado com comparativo entre períodos

Rodrigo,

assim?

2017-02-03 23_00_37-QlikView x64 - [C__tmp_Acumulado linha.qvw].png

MVP
MVP

Re: Gráfico acumulado com comparativo entre períodos

Se for assim, segue modelo exemplo !

Not applicable

Re: Gráfico acumulado com comparativo entre períodos

Alessandro, obrigado pela ajuda, mas não consegui montar o gráfico conforme o pivot que você citou. Fiz o data load e até criei a tabela, porém como montar no gráfico? Lembrando que estou usando o Qlik Sense.

Esta mesma solução atenderia uma visão de "mês atual" vs. "média dos últimos 3 meses"?

Not applicable

Re: Gráfico acumulado com comparativo entre períodos

Mudei a abordagem de As-Of Calendar do HIC, gerei as tabelas AS-OF, criei um master calendar, porém ele não soma os valores conforme https://community.qlik.com/blogs/qlikviewdesignblog/2015/11/02/the-as-of-table

Tomei cuidado com relação à data e tratei com date(floor(),'DD/MM/YYYY') para tirar o formato datetime. Ao usar como dimensão qualquer data (seja na tabela transacional, seja na master calendar ou seja na as-of), a métrica não acumula (Sum({$<MonthDiff={"0"}>}^Valor). Por mais que eu mude o set para YearDiff e os parâmetros para ">" ou "<", o valor nunca acumula.

Também revisitei algumas abordagens de aggr(), rangesum() e sum() mas nada que entregasse o que eu preciso fazer.

Alguém com uma solução?