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

Load multiple qvd files in specified order

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

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

但是,对于这种方法,文件的加载顺序是未指定的(我的测试使它们看起来像是按字母顺序加载的,但我没有找到这个记录)。有什么方法可以让我自己指定顺序吗?

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

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

您可以先加载带有文件名和路径的 table:

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

再次加载并按文件时间排序(或者您从上面语句中的文件名解析时间戳并以此排序)

FileListTable:
load * Resident [AUTOGENERATE(1)] Order by FileTime desc;

放弃 autogen Table

drop table [AUTOGENERATE(1)];

终于按顺序加载文件(我无法测试它是否适用于 exists)

For vFileNo = 1 to NoOfRows('FileListTable')

      Let vFileName = Peek('FilePath',vFileNo-1,'FileListTable');

      Load *,

         '$(vFileName)' as FileName

      From [$(vFileName)];

   Next vFileNo

drop table FileListTable;