2016-03-15 83 views
0

衆所周知,我們可以從多個.qvd文件到的QlikView通過使用標準的DOS通配符(*?)等加載數據:加載多個QVD文件

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

然而,對於該方法加載文件的順序是未指定的(我的測試看起來像是按照字母順序加載的,但我沒有找到這種文件)。有沒有一種方法可以自己指定順序?

我想這樣做,以便我可以先加載最新的時間戳文件,以便Exists將省略具有相同標識的舊版本的記錄。

我能想到的唯一選擇是手動循環文件,這是一個非常脆弱的解決方案。這是我唯一的選擇嗎?

+0

您應該只加載新的文件,然後...保持一個表的文件名,你加載的,不要再加載它們 - 保存它到QVD。然後加載不在列表中的所有文件,然後用QVD「存在」。 它也將爲您節省大量的加載時間.... – EldadT

回答

1

可以加載一個表的文件名和路徑,第一:由FILETIME再次

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 

負載和排序(或者您從文件名解析時間戳在上面的語句,並sorty通過)

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

降AUTOGEN表

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;