Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
jmialoundama
Specialist
Specialist

Boucle dans script de chargement

Bonjour ,

Je charge 3 tables de ventes différentes , ce qui diffère c'est uniquement l'année ( Une table de vente pour l'année 2016, une table de ventes 2017 et une autre table de ventes  2018).

J'ai donc crée 3 variables qui récupère les années 2016,2017 et 2018 et j'applique ces variables dans mon script de la façon suivantes :

//Récupère l'année en cours, ex : 2018

LET vCurrentYear=year(today()-1);


//Récupère l'année précédente, ex : 2017

LET vPastYear=year(addyears(today()-1,-1));


//Récupère l'année précédente - 2 ,ex: 2016

LET vPastYear2=year(addyears(today()-2,-2));

Puis j'applique ces variables dans le script de la façon suivante :

TMP_FAIT_WEB:

LOAD

     *

FROM [lib://QVD_DEV//F_VENTES_MAGASINS_HEBDO_$(vCurrentYear).QVD](qvd)


CONCATENATE


LOAD

     *

FROM [lib://QVD_DEV//F_VENTES_MAGASINS_HEBDO_$(vPastYear).QVD](qvd)

CONCATENATE

LOAD

    *

FROM [lib://QVD_DEV//F_VENTES_MAGASINS_HEBDO_$(vPastYear2).QVD](qvd)

Je souhaiterai savoir si il était possible de créer une boucle avec un "IF" qui va rechercher les QVD ventes de l'année 2016,2017 et 2018 ?

Merci d'avance

8 Replies
christophebrault
Specialist
Specialist

Bonjour,

Tu peux simplement faire :

TMP_FAIT_WEB:

LOAD

     *

FROM [lib://QVD_DEV//F_VENTES_MAGASINS_HEBDO_*.QVD](qvd)

where subfield(filebasename(),'_',-1)>=year(today()-2);

// Si tu as des fichiers plus anciens, ne charge que l'année en cours et les 2 précédentes

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
jmialoundama
Specialist
Specialist
Author

Ok du coup plus besoin d'utiliser les contenate entre les QVD ?

Et si par exemple, à ma table "TMP_FAIT_WEB" je souhaite ajouter des stocks que je charge de la même façon c'est à  dire en prenant les stocks des 3 dernières années, je devrais écris un script dans ce genre  :

TMP_FAIT_WEB:

LOAD

     *

FROM [lib://QVD_DEV//F_VENTES_MAGASINS_HEBDO_*.QVD](qvd)

where subfield(filebasename(),'_',-1)>=year(today()-2);


CONCATENATE


LOAD

     *

FROM [lib://QVD_DEV//F_STOCKS_HEBDO_*.QVD](qvd)

where subfield(filebasename(),'_',-1)>=year(today()-2);

christophebrault
Specialist
Specialist

On peut mettre plusieurs étoiles

TMP_FAIT_WEB:

LOAD

     *

FROM [lib://QVD_DEV//F_*_HEBDO_*.QVD](qvd)

where subfield(filebasename(),'_',-1)>=year(today()-2);

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
jmialoundama
Specialist
Specialist
Author

J'ai essayé votre méthode mais il reprends les données à partir de  2013 alors que je voudrais celle à partir de 2016

Capture.JPG

TMP_FAIT_WEB:

LOAD

     *

FROM [lib://QVD_DEV//F_*_HEBDO_*.QVD](qvd)

where subfield(filebasename(),'_',-1)>=year(today()-2);


Ce que je souhaiterai savoir c'est comment dire à Qlik de prendre uniquement les fichier qui sont compris entre l'année -2 et l'année courante ?

Car effectivement là, le script va charger toutes les données de 2013 jusqu'a 2016 or que je souhaite uniquement les 3 dernières années (2016,2017,2018)

christophebrault
Specialist
Specialist

Le script ouvre le QVD mais ne charge pas de données

Pour faire un truc propre :

Let vStart = year(Today())-2;

Let vEnd= year(Today());

for vYear = vStart to vEnd

TMP_FAIT_WEB:

LOAD

     *

FROM [lib://QVD_DEV//F_STOCKS_HEBDO_'$(vYear).QVD](qvd);


Next;

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
jmialoundama
Specialist
Specialist
Author

C'est top ça marche

Cependant si je souhaite concatener les données j'ai l'erreur suivante :

Capture.JPG

Let vStart = year(Today())-2;

Let vEnd= year(Today());

for vYear = vStart to vEnd

TMP_FAIT_WEB:

LOAD

    *

FROM [lib://QVD_Prod/F_ODS_STOCKS_MAGASIN_HEBDO_$(vYear).QVD](qvd)

    WHERE MAGASIN_CODE = 5;

CONCATENATE

TMP_FAIT_WEB:

LOAD

    *

FROM [lib://QVD_Prod/F_ODS_STOCKS_DEPOTS_HEBDO_$(vYear).QVD](qvd);

WHERE CODE_DEPOT = 9

Next;



Ce que je voudrais savoir, c'est si je souhaite utiliser cette variable dans une autre table de chargement et que je souhaite concaténer les tables entre-elles, comme ça fonctionne ? (Désolé pour toutes ces questions mais je débute au niveau script un peu plus poussé sous QS)

christophebrault
Specialist
Specialist

Je ne sais pas pourquoi tu as cette erreur, mais tonc script devrait être :

Let vStart = year(Today())-2;

Let vEnd= year(Today());

for vYear = vStart to vEnd

let vStep = NoOfRows('TEMP');

IF isnull(vStep) = -1 THEN

TMP_FAIT_WEB:

ELSE

CONCATENATE(TMP_FAIT_WEB)

END IF

LOAD

    *

FROM [lib://QVD_Prod/F_ODS_STOCKS_MAGASIN_HEBDO_$(vYear).QVD](qvd)

    WHERE MAGASIN_CODE = 5;

CONCATENATE(TMP_FAIT_WEB)

LOAD

    *

FROM [lib://QVD_Prod/F_ODS_STOCKS_DEPOTS_HEBDO_$(vYear).QVD](qvd);

WHERE CODE_DEPOT = 9

Next;

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
jmialoundama
Specialist
Specialist
Author

J'ai essayé la solution que vous avez apporté.

Cependant lorsque j'insère le "ELSE" dans le code , QLIK SENSE n'est pas d'accord :

Capture.PNG