众所周知,我们可以使用标准DOS通配符(.qvd
和*
)将多个?
文件中的数据加载到QlikView中,如:
MyTable:
LOAD
*
FROM
[myDateStampedQvd*.qvd]
(qvd)
Where not Exists(id);
然而,对于这种方法,加载文件的顺序是未指定的(我的测试看起来好像是按字母顺序加载,但我没有找到这个记录)。有没有办法可以自己指定订单?
我想这样做,以便我可以先加载最新的带时间戳的文件,这样Exists
将省略具有相同ID的旧版本记录。
我能想到的唯一选择是手动循环文件,这是一个非常脆弱的解决方案。这是我唯一的选择吗?
答案 0 :(得分:1)
您可以先加载包含文件名和路径的表:
set vRoot = 'C:\Folder';
FOR Each Ext in 'qvd'
FOR Each File in filelist ('$(vRoot)'&'\*.'&Ext)
Load '$(File)' as FilePath,
FileSize( '$(File)' ) as Size,
FileTime( '$(File)' ) as FileTime,
Subfield('$(File)', '\', SubstringCount('$(File)', '\') + 1) as FileName
autogenerate 1 ;
next File
next Ext
再次加载并按Filetime排序(或者从上面的语句中解析文件名中的Timestamp并按其排序)
FileListTable:
load * Resident [AUTOGENERATE(1)] Order by FileTime desc;
删除自动表
drop table [AUTOGENERATE(1)];
最后按顺序加载文件(我无法测试它是否适用于存在)
For vFileNo = 1 to NoOfRows('FileListTable')
Let vFileName = Peek('FilePath',vFileNo-1,'FileListTable');
Load *,
'$(vFileName)' as FileName
From [$(vFileName)];
Next vFileNo
drop table FileListTable;