For each..next

Der Steuerungsbefehl for each..next definiert eine Skriptiteration, die für jeden Wert in einer kommagetrennten Liste einen oder mehrere Befehle ausführt. Für jeden Wert der Liste werden die Befehle zwischen for und next einmal ausgeführt.

Syntax:  

Durch eine besondere Syntax ist es möglich, eine Liste mit Verzeichnis- und Dateinamen zu generieren.

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

Arguments:  

Argument Beschreibung
var Eine Skriptvariable, die bei jedem Durchlauf der Schleife den jeweils nächsten Wert in der Werteliste annimmt. Ist var nach next festgelegt, muss sie denselben Variablennamen haben, wie den hinter dem zugehörigen for each.

Der Wert von var kann durch Befehle innerhalb der Schleife geändert werden, dies ist aber nicht empfehlenswert.

Steht in der Schleife eine exit for-Bedingung, wird die Ausführung des Skripts beim ersten Befehl nach der Schleife, d. h. nach der Zeile mit dem abschließenden next, fortgesetzt. Auf exit for kann verzichtet werden, wenn stattdessen when oder unless verwendet wird.

Hinweis: Da for each..next zu den Steuerungsbefehlen gehört und mit einem Semikolon oder einer Zeilenschaltung abschließt, dürfen sich die einzelnen Befehlssequenzen (for each, exit for und next) nicht über mehrere Zeilen erstrecken.

Syntax:  

list := item { , item }

item := constant | (expression) | filelist mask | dirlist mask | fieldvaluelist mask

 

Argument Beschreibung
constant Beliebige Zahl oder String. Beachten Sie, dass ein direkt im Skript geschriebener String zwischen einfachen Anführungszeichen stehen muss. Ein String ohne einfache Anführungszeichen wird als Variable interpretiert. Anschließend wird der Wert der Variable verwendet. Zahlen müssen nicht zwischen einfachen Anführungszeichen stehen.
expression Eine beliebige Formel.
mask

Eine Vorgabe für Dateinamen bzw. Ordnernamen, die alle in Dateinamen zugelassenen Zeichen enthalten kann, sowie die Wildcards * und ?.

Sie können absolute Dateipfade oder lib://-Pfade verwenden.

condition Eine logische Formel, die True oder False ergibt.
statements Jede Gruppe von einem oder mehreren Qlik Sense-Skriptbefehlen.
filelist mask

Durch die Syntax wird eine kommagetrennte Liste aller Dateien im aktuellen Verzeichnis generiert, die der Dateinamenmaske entsprechen.

Hinweis: Dieses Argument unterstützt im Standardmodus nur Bibliotheksverbindungen. Siehe Zugriffsbeschränkung für Dateisystem
dirlist mask

Durch die Syntax wird eine kommagetrennte Liste aller Ordner im aktuellen Ordner generiert, die der Ordnernamenmaske entsprechen.

Hinweis: Dieses Argument unterstützt im Standardmodus nur Bibliotheksverbindungen. Siehe Zugriffsbeschränkung für Dateisystem
fieldvaluelist mask Diese Syntax aggregiert durch die Werte eines Felds, das bereits in Qlik Sense geladen wurde.

Example 1: Laden einer Liste von Dateien

// LOAD the files 1.csv, 3.csv, 7.csv and xyz.csv for each a in 1,3,7,'xyz' LOAD * from file$(a).csv; next

Example 2: Laden einer Dateiliste auf Speichermedium

In diesem Beispiel wird eine Liste aller relevanten Qlik Sense-Dateien in einen Ordner geladen.

sub DoDir (Root) for each Ext in 'qvw', 'qva', 'qvo', 'qvs', 'qvc', 'qvf', 'qvd' for each File in filelist (Root&'\*.' &Ext) LOAD '$(File)' as Name, FileSize( '$(File)' ) as Size, FileTime( '$(File)' ) as FileTime autogenerate 1; next File next Ext for each Dir in dirlist (Root&'\*' ) call DoDir (Dir) next Dir end sub call DoDir ('lib://MyData')

Example 3: Aggregierung nach den Werten eines Felds

In diesem Beispiel wird die Liste der geladenen Werte von FIELD aggregiert und ein neues Feld – NEWFIELD – erstellt. Für jeden Wert von FIELD werden zwei Datensätze NEWFIELD erstellt.

load * inline [ FIELD one two three ]; FOR Each a in FieldValueList('FIELD') LOAD '$(a)' &'-'&RecNo() as NEWFIELD AutoGenerate 2; NEXT a

Die sich ergebende Tabelle sieht folgendermaßen aus:

NEWFIELD
one-1
one-2
two-1
two-2
three-1
three-2