Qlik Community

Groupe des Utilisateurs Francophones

Vous êtes francophone? Ce groupe est pour vous. Venez découvrir comment démarrer avec Qlik Sense et QlikView, poser vos questions et partager vos tutos et astuces avec les membres de notre communauté.

Highlighted
jmialoundama
Contributor II

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
Valued Contributor

Re: Boucle dans script de chargement

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

jmialoundama
Contributor II

Re: Boucle dans script de chargement

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
Valued Contributor

Re: Boucle dans script de chargement

On peut mettre plusieurs étoiles

TMP_FAIT_WEB:

LOAD

     *

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

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

jmialoundama
Contributor II

Re: Boucle dans script de chargement

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
Valued Contributor

Re: Boucle dans script de chargement

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;

jmialoundama
Contributor II

Re: Boucle dans script de chargement

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
Valued Contributor

Re: Boucle dans script de chargement

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;

jmialoundama
Contributor II

Re: Boucle dans script de chargement

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