Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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!
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
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.
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
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.
Obrigado.
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;
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!
Legal Renato
Don't worry, be Qlik.
Tonial