将一个qlikview(qvd)文件拆分为两个qvd文件

split concatenation qlikview

611 观看

1回复

11 作者的声誉

我有一个qvd文件,其中包含两年的数据。我必须将数据拆分为两个qvd文件,一个属于当前年份,另一个属于明年或去年。我尝试使用时间分析。但是现在我迷失了要使用的代码。有任何想法或帮助吗?提前致谢。

变量字段的屏幕截图:

日期数据截图

YearsToLoad:
Load
    left(BATCH_NO, 4) as BATCH_NO
;
Load
    distinct BATCH_NO
From 
    Current.qvd (qvd)
;   

for i = 1 to FieldValueCount('BATCH_NO')
    let vYear = FieldValue('BATCH_NO', $(i));

    Years:
    Load
        $(vYear)    as BATCH_NO
    AutoGenerate(1)
    ;

    Current:
    Load
        BATCH_NO
    From
        Current.qvd (qvd)   
    Where
        left(BATCH_NO, 4) = $(vYear)
    ;

    Store  Current into RawDataLoad_$(vYear).qvd;
    Drop Tables Years, Current;

next

    Drop Table YearsToLoad;

当我对数字进行硬编码时,我的脚本是这样的:

[Last]:
NoConcatenate
load *
Resident CurrentData
where BATCH_NO >= 20150101 AND BATCH_NO < 20160101 ;

[Current]:
NoConcatenate
load *
Resident CurrentData
where BATCH_NO >= 20160101 AND BATCH_NO < 20170101 ;

STORE Current into Current.qvd(qvd);
STORE Last into Last.qvd(qvd);

这是我为“ Last.qvd”获得的qvd文件

作者: SPP 的来源 发布者: 2016 年 1 月 6 日

回应 1


1

2479 作者的声誉

下面的脚本将从主qvd加载不同的Years,循环遍历值并为每一年生成qvd。第一部分(注释)是我在此示例中使用的示例数据。

//RawData:
//Load * Inline [
//  Value, Year
//  1    , 2013
//  2    , 2013
//  3    , 2014
//  4    , 2014
//  5    , 2014
//  6    , 2015
//  7    , 2015
//  8    , 2015
//  9    , 2016
//  10   , 2016
//];
//
//Store RawData into RawData.qvd;

// Load the distinct Year values from the main qvd
YearsToLoad:
Load
    distinct Year as YearToLoad
From 
    RawData.qvd (qvd)
;   

// Start looping through the distinct values
for i = 1 to FieldValueCount('YearToLoad')
    let vYear = FieldValue('YearToLoad', $(i));

    // Load the current iteration value
    // The resulted field name must match the field name from the next 
    // load. This way will keep the qvd optimized load
    Years:
    Load
        $(vYear)    as Year
    AutoGenerate(1)
    ;

    RawDataLoad:
    Load
        Value,
        Year
    From
        RawData.qvd (qvd)   
    Where
        Exists(Year) // this is the important bit that will filter the qvd
    ;

    // Store the filtered qvd
    Store RawDataLoad into RawDataLoad_$(vYear).qvd;
    // Drop the temp tables
    Drop Tables Years, RawDataLoad;

next

// Drop the table that loaded the distinct Year values
Drop Table YearsToLoad;

更新资料

如果没有包含年份值的专用字段,而只有日期字段(在这种情况下,格式为YYYYMMDD),则可以使用以下脚本。由于qvd优化的负载将被破坏,因此速度会较慢。

//RawData:
//Load * Inline [
//  Value, Date
//  1    , 20130102
//  2    , 20130103
//  3    , 20140101
//  4    , 20140102
//  5    , 20140103
//  6    , 20150101
//  7    , 20150102
//  8    , 20150103
//  9    , 20160104
//  10   , 20160105
//];
//
//Store RawData into RawData.qvd;
//
//exit Script;

YearsToLoad:
Load
    left(Date, 4) as YearToLoad
;
Load
    distinct Date
From 
    RawData.qvd (qvd)
;   

for i = 1 to FieldValueCount('YearToLoad')
    let vYear = FieldValue('YearToLoad', $(i));

    RawDataLoad:
    Load
        Value,
        Date
    From
        RawData.qvd (qvd)   
    Where
        left(Date, 4) = $(vYear)
    ;

    Store RawDataLoad into RawDataLoad_$(vYear).qvd;
    Drop Table RawDataLoad;

next

Drop Table YearsToLoad;
作者: Stefan Stoichev 发布者: 2016 年 1 月 6 日
32x32