按指定顺序加载多个qvd文件

时间:2016-03-15 09:11:26

标签: qlikview

众所周知,我们可以使用标准DOS通配符(.qvd*)将多个?文件中的数据加载到QlikView中,如:

MyTable:
LOAD
    *
FROM
[myDateStampedQvd*.qvd]
(qvd)
Where not Exists(id);

然而,对于这种方法,加载文件的顺序是未指定的(我的测试看起来好像是按字母顺序加载,但我没有找到这个记录)。有没有办法可以自己指定订单?

我想这样做,以便我可以先加载最新的带时间戳的文件,这样Exists将省略具有相同ID的旧版本记录。

我能想到的唯一选择是手动循环文件,这是一个非常脆弱的解决方案。这是我唯一的选择吗?

1 个答案:

答案 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;
相关问题