我试图解决这个问题很长一段时间了,但现在我得请求你的帮助。
我的本地PC上有一个QVD文件,例如: server001_CPU.qvd和远程服务器我有共享文件夹,包含许多类型的文件。还有一些名为server001_CPU_YYYYMMDD.csv(例如server001_CPU_20140806.csv)的文件,它们每天生成并且具有与本地qvd文件相同的结构。他们有列DATE。我需要的是(在加载脚本中)检查本地文件中的最后一个DATE并从那天开始加载远程文件到今天然后将它连接在一起。像这样:
CPU:
LOAD * FROM server001_CPU.qvd
LET vMAX = Max(DATE) FROM CPU
DO WHILE vMAX <= Today()
CPU:
LOAD * FROM serverpath/server001_CPU_$(vMAX).csv
LOOP
我真的很努力,但我是QV的新手,对我来说它有着奇怪的逻辑。提前感谢您的帮助。
答案 0 :(得分:0)
您可以尝试以下脚本代码段,该代码段应该可以满足您的需求。
这样做首先打开现有数据集(在QVD中),然后找到最大日期并将其存储在表MaxCPUDate
中。然后将此最大值读入变量并删除表。
这&#34; Max Date&#34;然后从今天的日期中减去值,以确定要加载单个文件的循环次数。循环变量被添加到&#34; Max Date&#34;用于创建要加载的文件名的值。
CPU:
LOAD
*
FROM server001_CPU.qvd (qvd);
MaxCPUDate:
LOAD DISTINCT
max(DATE) as MaxDate
RESIDENT CPU;
LET vMaxCPUDate = peek('MaxDate',-1,'MaxCPUDate');
DROP TABLE MaxCPUDate;
FOR vFileNum = 0 TO (num(Today()) - $(vMaxCPUDate))
LET Filename ='serverpath/server001_CPU_' & date($(vMaxCPUDate) + $(vFileNum),'YYYYMMDD') & '.csv';
CONCATENATE (CPU)
LOAD
*
FROM $(Filename) (txt, codepage is 1252, embedded labels, delimiter is ',', msq);
NEXT