For Each...Next是一种对‘列表’元素逐个处理的循环方式。列表元素可以为逗号分隔。
其基本语法格式为:
For Each var In list
循环体
Next;
我们还是以上面的例子进行处理
For Each m in 1,2,3,4,5,6,7,8,9,10,11,12
TMP:
Load *
Resident T
WHERE Month(date) = $(m);
// 把数据导出到qvd文件。导出时如果文件夹不存在,会自动创建,无需额外创建。
Store TMP Into [lib://FistDemo/$(m).qvd](qvd);
Drop Table TMP;
Next;
当然,该语法中的list也可以通过其他方式获取。如下两个示例
示例1:假设我们有表T如下,我们现在需要将该表按字段gp进行拆分,gp中的每个元素输出一个qvd文件,其中表T中gp字段的元素个数不确定。
date | gp | value |
2021/4/28 | g1 | 562 |
2021/4/29 | g1 | 235 |
2021/4/30 | g3 | 374 |
2021/5/1 | g2 | 740 |
2021/5/2 | g2 | 914 |
... | ... | ... |
这里需要首先了解一个函数FieldValueList,该函数可以获取指定字段中的去重元素。
For Each g In FieldValueList('gp')
TMP:
Load *
Resident T
WHERE gp = $(g);
// 把数据导出到qvd文件。导出时如果文件夹不存在,会自动创建,无需额外创建。
Store TMP Into [lib://FistDemo/$(g).qvd](qvd);
Drop Table TMP;
Next;
示例2:合并目录C:\QlikSense下的所有Excel(后缀名为.xlsx)文件。
For Each FileIn filelist('C:\QlikSense\*.xlsx')
T:
Load *
,'$(File)' as FileName
,FileSize('$(File)') as FileSize
,FileTime('$(File)') as FileTimeFROM [$(File)]
(ooxml, embedded labels, table is Sheet1);
Next;