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 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épart | 1 |
|---|---|
| Fin | 12 |
| Répétitions | 12 |
Charger une série de fichiers
Une boucle devient utile lorsque le nom de la source suit une règle régulière.
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| Sources | Ventes_1.qvd à Ventes_3.qvd |
|---|---|
| Cible | Ventes |
Parcourir une liste avec FOR EACH
FOR EACH convient lorsqu’il faut parcourir une liste de valeurs plutôt qu’une suite numérique.
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| Liste | Nord, Sud, Ouest |
|---|---|
| Variable | vRegion |
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é.
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| Condition | vPage <= 5 |
|---|---|
| Arrêt | condition 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.
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ée | 1 contrat |
|---|---|
| Sortie | 1 ligne par date |