Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá,
Estou com uma dificuldade em calcular a média dos ultimos 3 meses numa tabela. Estou usando o rangesum($(vQtdConsumo),Before($(vQtdConsumo)),Before($(vQtdConsumo),2)) e como vemos no exemplo abaixo funciona somente para aqueles registros onde o intervalo esteja selecionado.
Perceba que Abril e Maio (em verde) ele somou corretamente, já Fevereiro (Soma de Fev + Jan+ Dez) e Janeiro (Soma de Jan + Dez + Nov), em amarelo, não trouxe certo porque Dezembro e Novembro não aparecem na seleção. Perceba no outro filtro abaixo.
Repare que, se selecionar somente os dois que deram certo no filtro anterior, ele já para de funcionar, pelo mesmo motivo de Janeiro e Fevereiro do print anterior, pois não aparecem no período selecionado. Neste caso precisaria aparecer pra Abril e Março os valores do primeiro print (em verde).
Não sei se estou me fazendo entender, mas em anexo envio uma aplicação teste. Se puderem ajudar eu agradeço.
Olá, Entendo que nesse seu cenário é recomendado a utilização de um calendário AsOfDate.
TMP_Calendario: // Tabela temporaria com todas as datas
LOAD
FieldValue('Data',RecNo()) AS [Data]
AUTOGENERATE FieldValueCount('Data');
CalendarioAsOf: // Periodo Atual
LOAD Distinct
Data as Data
,Data as AsOfData
,'Atual' as AsOfTipo
,1 as FlgAtual
RESIDENT TMP_Calendario;
tmp: LOAD Min(Data) as min, Max(Data) as max Resident TMP_Calendario; // Limitador Registros
LET LimiteInferior = num(Peek('min'));
LET LimiteSuperior = num(Peek('max'));
Drop Table tmp;
Concatenate(CalendarioAsOf) // Acumulado Geral
LOAD Distinct
num(Data - IterNo() +1) as Data
,Data as AsOfData
,'Acumulado Geral' as AsOfTipo
,1 as FlgAcumuladoTotal
RESIDENT TMP_Calendario
WHILE num(Data - IterNo() +1) >= $(LimiteInferior);
Concatenate(CalendarioAsOf) // Acumulado Anual
LOAD * WHERE Year(Data) = Year(AsOfData);
LOAD Distinct
num(Data - IterNo() +1) as Data
,Data as AsOfData
,'Acumulado Anual' as AsOfTipo
,1 as FlgAcumuladoAnual
RESIDENT TMP_Calendario
WHILE num(Data - IterNo() +1) >= $(LimiteInferior);
CONCATENATE (CalendarioAsOf) //3 meses
LOAD * WHERE MonthStart(Data) >= MonthStart(AddMonths(AsOfData,-2)) and MonthStart(Data) <= MonthStart(AsOfData);
LOAD Distinct
num(Data - IterNo() +1) as Data
,Data as AsOfData
,'3 Meses' as AsOfTipo
,1 as FlgAcumulado3Meses
RESIDENT TMP_Calendario
WHILE num(Data - IterNo() +1) >= $(LimiteInferior);
CONCATENATE (CalendarioAsOf) //Mês Anterior
LOAD * WHERE MonthStart(Data) = MonthStart(AddMonths(AsOfData,-1));
LOAD Distinct
num(AddMonths(Data - IterNo() +1,-1)) as Data
,Data as AsOfData
,'Mes Anterior' as AsOfTipo
,1 as FlgMesAnterior
RESIDENT TMP_Calendario
WHILE num(Data - IterNo() +1) >= $(LimiteInferior);
//inner join(CalendarioAsOf)
Calendario:
NoConcatenate
load
Data,
Month(Data) as Mes,
Year(Data) as Ano,
AsOfData,
Date(MonthStart(AsOfData),'MMM/YYYY') as AsOfMes,
Year(AsOfData) as AsOfAno,
AsOfTipo,
FlgAtual,
FlgMesAnterior,
FlgAcumulado3Meses,
FlgAcumuladoAnual,
FlgAcumuladoTotal
Resident CalendarioAsOf;
drop Table TMP_Calendario, CalendarioAsOf;
Anexo o exemplo do script e utilização nas visualizações, QlikView e Qlik Sense.
Don't worry, be Qlik.
Tonial.