TUTORIEL · QLIK SENSE

Les boucles dans le script Qlik

Utiliser FOR...NEXT, FOR EACH, DO...LOOP et la clause WHILE sans perdre de vue les données produites.

Répéter avec FOR...NEXT

FOR...NEXT exécute plusieurs fois le même bloc en faisant évoluer un compteur.

Le compteur prend successivement les valeurs comprises entre la borne de départ et la borne de fin.

Le compteur peut être utilisé dans les instructions exécutées à chaque passage.

Exemple

FOR vMois = 1 TO 12
    TRACE Chargement du mois $(vMois);
NEXT vMois
Départ1
Fin12
Répétitions12

Charger une série de fichiers

Une boucle devient utile lorsque le nom de la source suit une règle régulière.

On charge le premier fichier pour créer Ventes, puis on parcourt les fichiers suivants. Le compteur est injecté dans leur nom et CONCATENATE ajoute leurs lignes à la même table.

Dans un vrai traitement, vérifiez que les fichiers attendus existent ou utilisez une liste de fichiers adaptée au besoin.

Exemple

// Premier fichier : création de la table cible
Ventes:
LOAD ID_VENTE, Montant
FROM [lib://Donnees/Ventes_1.qvd] (qvd);

// Fichiers suivants : ajout des lignes
FOR vMois = 2 TO 3
    CONCATENATE (Ventes)
    LOAD ID_VENTE, Montant
    FROM [lib://Donnees/Ventes_$(vMois).qvd] (qvd);
NEXT vMois
SourcesVentes_1.qvd à Ventes_3.qvd
CibleVentes

Parcourir une liste avec FOR EACH

FOR EACH convient lorsqu’il faut parcourir une liste de valeurs plutôt qu’une suite numérique.

La variable reçoit chaque valeur de la liste à tour de rôle.

FOR EACH peut également être utilisé avec des listes construites pour le script.

Exemple

FOR EACH vRegion IN 'Nord', 'Sud', 'Ouest'
    TRACE Région traitée : $(vRegion);
NEXT vRegion
ListeNord, Sud, Ouest
VariablevRegion

Répéter tant qu’une condition est vraie

DO...LOOP pilote la répétition avec une condition logique plutôt qu’avec un nombre de passages fixé.

La condition est évaluée à chaque passage. La variable utilisée doit évoluer pour que la boucle puisse se terminer.

Une condition qui ne devient jamais fausse crée une boucle sans fin.

Exemple

LET vPage = 1;

DO WHILE vPage <= 5
    TRACE Traitement de la page $(vPage);
    LET vPage = vPage + 1;
LOOP
ConditionvPage <= 5
Arrêtcondition fausse

WHILE dans un LOAD : créer plusieurs lignes

La clause WHILE d’un LOAD répond à un autre besoin : une ligne source peut produire plusieurs lignes en sortie.

IterNo() indique le numéro de l’itération pour la ligne source. Ici, une période est développée en une ligne par jour.

Ne confondez pas cette clause WHILE du LOAD avec la structure de contrôle DO...LOOP.

Exemple

CalendrierContrat:
LOAD
    ID_CONTRAT,
    DateDebut + IterNo() - 1 AS Date
RESIDENT Contrats
WHILE DateDebut + IterNo() - 1 <= DateFin;
Entrée1 contrat
Sortie1 ligne par date