Qlik Community

Brasil

cancel
Showing results for 
Search instead for 
Did you mean: 
mbrenzan
Contributor III
Contributor III

Calculo de meses anteriores tabela dinâmica

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. 

mbrenzan_0-1617651868659.png

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.

mbrenzan_1-1617652099719.png

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.

Coordenador de BI - Hospital Santa Casa de Maringá
1 Reply
fernando_tonial
Partner
Partner

Olá, Entendo que nesse seu cenário é recomendado a utilização de um calendário AsOfDate.

ExemploAsOf.png

 

 

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.