Skip to main content
Announcements
Meet the 2024 Qlik Luminaries and Partner Ambassadors! READ ON!
cancel
Showing results for 
Search instead for 
Did you mean: 
renato_araujo
Contributor III
Contributor III

Salvar Qvd mensal de acordo com uma data

Prezados boa tarde, mais uma vez recorrendo a comunidade.

Tenho o Script abaixo:

FOR vNum = Month(DT_PEDIDO)TO AddMonths(Today(),-36)

FatoSellOut:

LOAD

*,

DT_PEDIDO,

DT_PEDIDO&'|'&%KEYBRAND as %KEYPROMOCOES

Resident FatoSellOutTemp2;


STORE FatoSellOut INTO [lib://QVDs/QVDs_Transformados\FatoSellOut_$(vNum).qvd] (qvd);

Next;

Esse trecho esta salvando meus QVDs só que duplicando meus registros a medida que o contador vai rodando.

Preciso salvar um QVD por mês dos últimos 36 meses, mas cada um com seu conjunto de registros, sem acumular do anterior ou duplicar com base no campo DT_PEDIDO.

Exemplo:

Exemplo DT_PEDIDO 10/06/2017 aí salva Fato_SellOut_01

               DT_PEDIDO 10/07/2017 aí salva Fato_SellOut_02

               DT_PEDIDO 10/08/2017 aí salva Fato_SellOut_03 e assim por diante

Mais uma vez agradeço.

Atenciosamente,


Renato Araújo.

Labels (1)
1 Solution

Accepted Solutions
renato_araujo
Contributor III
Contributor III
Author

Bom dia.

A ideia foi dentro do que você sugeriu mesmo criando uma tabela temporária para receber a data e depois fazer o laço de repetição aí ficou assim o script:

[MinData]:

LOAD MIN(DT_PEDIDO) AS DT_PEDIDO_MIN Resident FatoSellOut;


LET vDtIni = Date(MonthStart(Peek('DT_PEDIDO_MIN')),'DD/MM/YYYY');


//LET vDtFim = Date(MonthStart(Today()),'DD/MM/YYYY');


IF vDtIni < Date(MonthStart(AddMonths(TODAY(),-36)),'DD/MM/YYYY') then

LET vDtIni = Date(MonthStart(AddMonths(TODAY(),-36)),'DD/MM/YYYY');

ENDIF;


// Calcula o número de meses a gerar

LET vNumMeses = ((Year(Today()) - Year(vDtIni)) * 12) +

    (Month(Today()) - Month(vDtIni)) + 1;


FOR vNum = 1 TO vNumMeses

    // Cria variavel com ano e mes da DT_PEDIDO

    Let vAno_DtPedido = Year(AddMonths(TODAY(),-($(vNum)-1)));

    Let vMes_DtPedido = Num(Month(AddMonths(TODAY(),-($(vNum)-1))));


trace Gerando mes '$(vAno_DtPedido)' / '$(vMes_DtPedido)' ;


FatoSellOut:

LOAD

    *,

    DT_PEDIDO&'|'&%KEYBRAND as %KEYPROMOCOES

    Resident FatoSellOutTemp2

Where Year(DT_PEDIDO)='$(vAno_DtPedido)'

AND Num(Month(DT_PEDIDO))='$(vMes_DtPedido)';

From FatoSellOut;  


    STORE FatoSellOut INTO [lib://QVDs/QVDs_Transformados\FatoSellOut_$(vNum).qvd] (qvd);

    DROP TABLE FatoSellOut;

Next;

Mais uma vez muito obrigado pela ajuda fernando.tonial‌!

View solution in original post

7 Replies
fernando_tonial
Partner - Specialist
Partner - Specialist

Olá, está faltando o comando DROP TABLE depois do store.
Recomento também colocar uma condicional no Load Resident.

FOR vNum = Month(DT_PEDIDO)TO AddMonths(Today(),-36)

FatoSellOut:

LOAD

*,

DT_PEDIDO,

DT_PEDIDO&'|'&%KEYBRAND as %KEYPROMOCOES

Resident FatoSellOutTemp2

Where Month(DT_PEDIDO)=$(vNum); // Verificar se é assim mesmo com base em seus dados.


STORE FatoSellOut INTO [lib://QVDs/QVDs_Transformados\FatoSellOut_$(vNum).qvd] (qvd);

DROP TABLE FatoSellOut;
Next;



Don't worry, be Qlik.

Tonial

Don't Worry, be Qlik.
renato_araujo
Contributor III
Contributor III
Author

Oi Fernando,

Testei aqui e não esta conseguindo fazer o Store, achei que era problema com a data então fiz uma alteração e agora não esta salvando de forma alguma, acho que estou me esquecendo de algo, mas não consegui verificar o que.

FOR vNum = num(Month(DT_PEDIDO),'00')TO AddMonths(Today(),-36)

FatoSellOut:

LOAD

*,

DT_PEDIDO&'|'&%KEYBRAND as %KEYPROMOCOES

Resident FatoSellOutTemp2

Where Month(DT_PEDIDO)=$(vNum); // Verificar se é assim mesmo com base em seus dados.

STORE FatoSellOut INTO [lib://QVDs/QVDs_Transformados\FatoSellOut_$(vNum).qvd] (qvd);

DROP TABLE FatoSellOut;

Next;

Obrigado pelo ajuda mais uma vez.

fernando_tonial
Partner - Specialist
Partner - Specialist

Assim fica difícil lhe ajudar sem a informação do erro que está ocorrendo, mas pode ser devido a clausula Where.

Where num(Month(DT_PEDIDO),'00')=$(vNum);

Don't worry, be Qlik.

Tonial

Don't Worry, be Qlik.
renato_araujo
Contributor III
Contributor III
Author

Fernando, realmente esqueci de postar o erro, mas fiz a captura da tela e o erro é o seguinte, independente de usar month(DT_PEDIDO) OU num(month(DT_PEDIDO),'00'), tanto no Where quanto no FOR.

Erro Sense.JPG

Obrigado.

fernando_tonial
Partner - Specialist
Partner - Specialist

Vamos fazer diferente então.

TMP_MESANO:
LOAD DISTINCT

     Date(DT_PEDIDO,'YYYYMM') AS ANOMES

Resident FatoSellOutTemp2

FOR vNum = 0 TO NoOfRows('')-1
LET vAnoMes = Peek('ANOMES',$(vNum),'TMP_MESANO');

FatoSellOut:

LOAD

*,

DT_PEDIDO&'|'&%KEYBRAND as %KEYPROMOCOES

Resident FatoSellOutTemp2

Where Date(DT_PEDIDO,'YYYYMM')=$(vAnoMes);

STORE FatoSellOut INTO [lib://QVDs/QVDs_Transformados\FatoSellOut_$(vAnoMes).qvd] (qvd);

DROP TABLE FatoSellOut;


Next


Drop Table TMP_MESANO;

Don't Worry, be Qlik.
renato_araujo
Contributor III
Contributor III
Author

Bom dia.

A ideia foi dentro do que você sugeriu mesmo criando uma tabela temporária para receber a data e depois fazer o laço de repetição aí ficou assim o script:

[MinData]:

LOAD MIN(DT_PEDIDO) AS DT_PEDIDO_MIN Resident FatoSellOut;


LET vDtIni = Date(MonthStart(Peek('DT_PEDIDO_MIN')),'DD/MM/YYYY');


//LET vDtFim = Date(MonthStart(Today()),'DD/MM/YYYY');


IF vDtIni < Date(MonthStart(AddMonths(TODAY(),-36)),'DD/MM/YYYY') then

LET vDtIni = Date(MonthStart(AddMonths(TODAY(),-36)),'DD/MM/YYYY');

ENDIF;


// Calcula o número de meses a gerar

LET vNumMeses = ((Year(Today()) - Year(vDtIni)) * 12) +

    (Month(Today()) - Month(vDtIni)) + 1;


FOR vNum = 1 TO vNumMeses

    // Cria variavel com ano e mes da DT_PEDIDO

    Let vAno_DtPedido = Year(AddMonths(TODAY(),-($(vNum)-1)));

    Let vMes_DtPedido = Num(Month(AddMonths(TODAY(),-($(vNum)-1))));


trace Gerando mes '$(vAno_DtPedido)' / '$(vMes_DtPedido)' ;


FatoSellOut:

LOAD

    *,

    DT_PEDIDO&'|'&%KEYBRAND as %KEYPROMOCOES

    Resident FatoSellOutTemp2

Where Year(DT_PEDIDO)='$(vAno_DtPedido)'

AND Num(Month(DT_PEDIDO))='$(vMes_DtPedido)';

From FatoSellOut;  


    STORE FatoSellOut INTO [lib://QVDs/QVDs_Transformados\FatoSellOut_$(vNum).qvd] (qvd);

    DROP TABLE FatoSellOut;

Next;

Mais uma vez muito obrigado pela ajuda fernando.tonial‌!

fernando_tonial
Partner - Specialist
Partner - Specialist

Legal Renato

Don't worry, be Qlik.

Tonial

Don't Worry, be Qlik.