按指定顺序加载多个 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;
众所周知,我们可以使用标准 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;