Função para Criar Calendário (Utilizando Data existente no modelo)

Fala pessoal, tudo beleza?

No último post aprendemos a utilizar uma função para criação de calendário passando uma data início e data fim, hoje aprenderemos como verificar esse range através de um campo existente em nosso modelo.

Para fazer isso utilizaremos três funções: FieldValue, FieldValueCount e While.

  • FieldValue para retornar um valor do campo de data do modelo. Lembrando que sempre será retornado apenas um valor, para o nosso caso resolve, pois utilizaremos essa função junto com as funções MAX e MIN.
  • FieldValueCount utilizaremos para percorrer todos os possíveis valores do campo de data do modelo. Lembrando que a função retorna o número de valores distintos do campo escolhido.
  • While para criar todos os registro no intervalo entre a maior e menor data do modelo.

Vamos ao código:

SUB CriaCalendario(vCampoData,vNomeCalendario,vPrefixoCalendario,vCampoChave)

LET vNomeCalendario = If(Len(‘$(vNomeCalendario)’)=0,’Calendario’,’$(vNomeCalendario)’);
LET vPrefixoCalendario = If(Len(‘$(vPrefixoCalendario)’)=0,”,’$(vPrefixoCalendario)’);
LET vCampoChave = PurgeChar(vCampoChave,'”[]’);

[$(vNomeCalendario)]:
LOAD
Distinct
Data_ as [$(vCampoChave)],
Date(Data_, ‘$(DateFormat)’ ) as [$(vPrefixoCalendario)Data],
Year(Data_) as [$(vPrefixoCalendario)Ano],
Month(Data_) as [$(vPrefixoCalendario)Mes],
Day(Data_) as [$(vPrefixoCalendario)Dia],
Date(MonthStart(Data_), ‘MMM/YYYY’) as [$(vPrefixoCalendario)MesAno];
LOAD
Date(_DataInicio+(Iterno()-1),’$(DateFormat)’ ) as Data_
WHILE (_DataInicio+(Iterno()-1)<=_DataFim); //Regra para gerar todos os registro do intervalo
LOAD
Floor(Min(Fieldvalue(‘$(vCampoData)’,RecNo()))) as _DataInicio, //Função utilizada para buscar valor do campo data do modelo.
Floor(Max(Fieldvalue(‘$(vCampoData)’,RecNo()))) as _DataFim
AUTOGENERATE FieldValueCount(‘$(vCampoData)’); //Função necessária para passar por todos os registros possíveis do campo data do modelo.

ENDSUB;

 
 
OBSERVAÇÃO: É necessário utilizar o FieldValueCount no AutoGenerate, pois precisamos passar por todos os possíveis valores do campo da data. Caso você não utilize, pode ser que o Min e o Max sejam alterados.

 

Pronto, agora basta utilizar a função Call e passar os parâmetros para que o calendário seja criado, conforme exemplo abaixo:

Call CriaCalendario(‘DATA’,’Calendario’,”,’%ChaveData’);

Neste exemplo o calendário será criado com o intervalo entre o intervalo de datas do campo DATA (esse campo esta localizado na tabela Tabela_Fato do exemplo), o nome da tabela será “Calendario”, nenhum prefixo de campos será utilizado e o campo de chave com a minha modelagem é “%ChaveData”.

Para fazer o download da aplicação de exemplo, basta clicar aqui!

 

Por enquanto é isso pessoal!

Semana que vem abordaremos outro assunto!