Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
marcelvinicius
Contributor III

Carga por data se tiver o mês

Boa tarde pessoal,

Gostaria de tirar uma duvida: consigo criar uma carga de dados para um QVD somente se tiver o mês?

Para tirar a confusão:

Tenho os seguintes parâmetros:

//Busca o mês corrente

LET vrDataIni = DATE(MonthStart(AddMonths(Today())),'YYYY/MM/DD');

LET vrDataFim  = DATE(MonthEnd(AddMonths(Today())),'YYYY/MM/DD');

//Busca um mês antes do mês corrente

LET vrDataIni1  = DATE(MonthStart(AddMonths(Today(),-1)),'YYYY/MM/DD');

LET vrDataFim1  = DATE(MonthEnd(AddMonths(Today(),-1)),'YYYY/MM/DD');

//Busca dois meses antes do mês corrente

LET vrDataIni2  = DATE(MonthStart(AddMonths(Today(),-2)),'YYYY/MM/DD');

LET vrDataFim2  = DATE(MonthEnd(AddMonths(Today(),-2)),'YYYY/MM/DD');

Porém quero saber se consigo fazer esse tipo de carga somente se tiver mês para trás no ano:

Exemplo:

Janeiro de 2017 - um mês antes é Dezembro de 2016  - e eu NÃO quero buscar as informações do mês anterior, ou seja, busca nada.

Tem como fazer isso?

Fui claro?

Atenciosamente.

Tags (1)
1 Solution

Accepted Solutions
thiago_mlg
Contributor II

Re: Carga por data se tiver o mês

Marcel, boa tarde!

Tem varias formas de fazer isso, mais supondo que você continuará sua mesma lógica, fica mais ou menos assim:

Basta você colocar uma verificação em toda variável para saber se estamos no Ano Vigênte.

Busca o mês corrente,

LET vrDataIni = DATE(MonthStart(AddMonths(Today())),'YYYY/MM/DD');

LET vrDataFim  = DATE(MonthEnd(AddMonths(Today())),'YYYY/MM/DD');

//Busca um mês antes do mês corrente apenas se o mês anterior tiver dentro do ano atual..

LET vrDataIni1 = IF(year(MonthStart(AddMonths(Today(),-1))) = year(today()), DATE(MonthStart(AddMonths(Today(),-1)),'YYYY/MM/DD'));

LET vrDataFim1  = IF(year(MonthEnd(AddMonths(Today(),-1))) = year(today()), DATE(MonthEnd(AddMonths(Today(),-1)),'YYYY/MM/DD'));

/

//Busca dois meses antes do mês corrente apenas se o dois meses anterior tiver dentro do ano atual..

LET vrDataIni2 = IF(year(MonthStart(AddMonths(Today(),-2))) = year(today()), DATE(MonthStart(AddMonths(Today(),-2)),'YYYY/MM/DD'));

LET vrDataFim1  = IF(year(MonthEnd(AddMonths(Today(),-2))) = year(today()), DATE(MonthEnd(AddMonths(Today(),-2)),'YYYY/MM/DD'));

e Assim por diante.

Qualquer dúvida à disposição.

Att,

5 Replies
felipedl
Valued Contributor III

Re: Carga por data se tiver o mês

Olá Marcel,

não ficou muito claro se você quer pegar os meses onde há QVDs ou se você quer fazer uma carga específica, com base em datas.

Poderia explicar melhor?

Felipe.

marcelvinicius
Contributor III

Re: Carga por data se tiver o mês

Boa tarde felipedl

Carga especifica. Eu pego informações baseadas nessas datas.

Eu busco sempre 3 meses de dados no banco. Mas quero buscar os ultimos 12 meses, porém não quero montar um QVD com ano de 2016/2017, somente os meses do ano de 2017, entendeu?

Atenciosamente.

felipedl
Valued Contributor III

Re: Carga por data se tiver o mês

Marcel,

É possível fazer algo parecido com isso

// Seta os valores para zero, caso eles sejam englobados em anos inferiores a 2017

let vDataIni = 0;

let vDataFim = 0;

let vDataIni2 = 0;

let vDataFim2 = 0;

let vDataIni3 = 0;

let vDataFim3 = 0;

// Verifica se o ano da data atual é 2017 ou maior

if (Year(Today())>=2017) then

let vDataIni = DATE(MonthStart((Today())),'YYYY/MM/DD');

let vDataFim = DATE(MonthEnd((Today())),'YYYY/MM/DD');

end if;

// Verifica se o ano do mês anterior é 2017 ou maior

if (Year(AddMonths(Today(),-1))>=2017) then

let vDataIni2 = DATE(MonthStart(AddMonths(Today(),-1)),'YYYY/MM/DD');

let vDataFim2 = DATE(MonthEnd(AddMonths(Today(),-1)),'YYYY/MM/DD');

end if;

// Verifica se o ano de dois meses atrás é 2017 ou maior

if (Year(AddMonths(Today(),-2))>=2017) then

let vDataIni3 = DATE(MonthStart(AddMonths(Today(),-2)),'YYYY/MM/DD');

let vDataFim3 = DATE(MonthEnd(AddMonths(Today(),-2)),'YYYY/MM/DD');

end if;

Para o caso em que algum dos meses caia em datas de 2016, o valor dos vDataIni e vDataFim ficará igual a zero.

thiago_mlg
Contributor II

Re: Carga por data se tiver o mês

Marcel, boa tarde!

Tem varias formas de fazer isso, mais supondo que você continuará sua mesma lógica, fica mais ou menos assim:

Basta você colocar uma verificação em toda variável para saber se estamos no Ano Vigênte.

Busca o mês corrente,

LET vrDataIni = DATE(MonthStart(AddMonths(Today())),'YYYY/MM/DD');

LET vrDataFim  = DATE(MonthEnd(AddMonths(Today())),'YYYY/MM/DD');

//Busca um mês antes do mês corrente apenas se o mês anterior tiver dentro do ano atual..

LET vrDataIni1 = IF(year(MonthStart(AddMonths(Today(),-1))) = year(today()), DATE(MonthStart(AddMonths(Today(),-1)),'YYYY/MM/DD'));

LET vrDataFim1  = IF(year(MonthEnd(AddMonths(Today(),-1))) = year(today()), DATE(MonthEnd(AddMonths(Today(),-1)),'YYYY/MM/DD'));

/

//Busca dois meses antes do mês corrente apenas se o dois meses anterior tiver dentro do ano atual..

LET vrDataIni2 = IF(year(MonthStart(AddMonths(Today(),-2))) = year(today()), DATE(MonthStart(AddMonths(Today(),-2)),'YYYY/MM/DD'));

LET vrDataFim1  = IF(year(MonthEnd(AddMonths(Today(),-2))) = year(today()), DATE(MonthEnd(AddMonths(Today(),-2)),'YYYY/MM/DD'));

e Assim por diante.

Qualquer dúvida à disposição.

Att,

marcelvinicius
Contributor III

Re: Carga por data se tiver o mês

Bom dia pessoal.

As duas respostas serviram, mas a do amigo thiago.mlg‌ foi melhor utilizada por buscar sempre a data do sistema sem precisar setar o ano (exemplo: 2017).

Obrigado amigos.