QlikWorld 2020 글로벌 컨퍼런스 데이터를 최대한 활용하는 방법을 알아 보려면 가입하십시오. 서두르세요. 지금 등록하면 할인된 가격으로 제공됩니다.

단일 날짜에서 날짜 간격 만들기

시간 간격은 시작 및 끝을 명시적으로 지정하여 저장되지 않는 경우가 있습니다. 대신 하나의 필드(타임스탬프 변경)를 통해 유추됩니다.

복수의 통화에 대한 환율은 아래 테이블과 같을 수 있습니다. 각 환율 변경은 각각의 행에서 새 전환율에 의해 이루어집니다. 또한 테이블에는 첫 번째 변경이 이루어지기 전의 초기 전환율에 해당하는 빈 날짜가 있는 행이 포함됩니다.

환율
Currency Change Date Rate
EUR - 8.59
EUR 28/01/2013 8.69
EUR 15/02/2013 8.45
USD - 6.50
USD 10/01/2013 6.56
USD 03/02/2013 6.30

이 테이블은 일련의 겹치지 않는 기간을 정의합니다. 시작 데이터는 "Change Date"라고 하고, 끝 날짜는 다음 간격의 시작에 의해 정의됩니다. 그러나 끝 날짜가 각 행의 열에 명확하게 저장되지 않으므로 해당 열을 만들어서 새 테이블이 간격의 목록이 되도록 해야 합니다.

이 스크립트 예제에서는 인라인 로드를 통해 In_Rates 테이블을 만들었습니다. Change Date 열의 날짜는 현지 날짜 서식과 동일한 서식이어야 합니다.

In_Rates: LOAD * Inline [ Currency,Change Date,Rate EUR,,8.59 EUR,28/01/2013,8.69 EUR,15/02/2013,8.45 USD,,6.50 USD,10/01/2013,6.56 USD,03/02/2013,6.30 ];

다음과 같이 하십시오.

  1. 작업할 시간 범위를 결정합니다. 범위의 시작은 데이터의 첫 번째 날짜 이전이어야 하며, 범위의 끝은 마지막 날짜 이후여야 합니다.

    Let vBeginTime = Num('1/1/2013');
    Let vEndTime = Num('1/3/2013');
    Let vEpsilon = Pow(2,-27);
  1. 소스 데이터를 로드하되, 빈 날짜는 이전 항목에서 정의한 범위의 시작으로 변경합니다. 변경 날짜는 "From Date"로 로드되어야 합니다.

    먼저 Currency에 따라 테이블을 정렬한 다음, "From Date"에 따라 내림차순으로 정렬하여 최근 날짜가 맨 위에 오도록 합니다.

    Tmp_Rates:
    LOAD Currency, Rate,
    Date(If(IsNum([Change Date]), [Change Date], $(#vBeginTime))) as FromDate
    Resident In_Rates;
  2. 데이터에서 "To Date"를 계산하기 위한 두 번째 단계를 실행합니다. 현재 레코드에 이전 레코드와 다른 통화가 있는 경우, 새로운 통화의 첫 번째 레코드(및 마지막 간격)이므로 1단계에서 정의한 범위의 끝 날짜를 사용해야 합니다. 동일한 통화인 경우는 이전 레코드의 “From Date”에서 약간의 시간을 빼고, 이 값을 현재 레코드의 “To Date”로 사용해야 합니다.

    Rates:
    LOAD Currency, Rate, FromDate,
    Date(If( Currency=Peek('Currency'),
    Peek('FromDate') - $(#vEpsilon),
    $(#vEndTime)
    )) as ToDate
    Resident Tmp_Rates
    Order By Currency, FromDate Desc;
  3. 입력 테이블 및 임시 테이블을 삭제합니다.

    Drop Table Tmp_Rates;

아래에 나온 스크립트는 다음과 같은 방식으로 소스 테이블을 업데이트합니다.

업데이트된 소스 테이블
Currency Rate FromDate ToDate
EUR 8.45 15/02/2013 vEndTime
EUR 8.69 28/01/2013 14/02/2013 23:59:59
EUR 8.59 vBeginTime 28/01/2013 23:59:99
USD 6.30 03/02/2013 vEndTime
USD 6.56 10/01/2013 2/02/2013 23:59:59
USD 6.50 vBeginTime 9/01/2013 23:59:59

스크립트를 실행하면 테이블의 간격이 정확하게 표시됩니다. 데이터 모델 뷰어의 미리 보기 섹션을 사용하여 결과 테이블을 봅니다.

데이터 미리 보기
Currency Rate FromDate ToDate
EUR 8.45 15/02/2013 01/03/2013
EUR 8.69 28/01/2013 14/02/2013
EUR 8.59 01/01/2013 28/01/2013
USD 6.30 03/02/2013 01/03/2013
USD 6.56 10/01/2013 2/02/2013
USD 6.50 01/01/2013 9/01/2013

이 테이블은 이후 Intervalmatch 메서드를 사용하여 기존 날짜와 비교하는 데 사용할 수 있습니다.

Example:  

전체 Qlik Sense 스크립트는 다음과 같습니다.

Let vBeginTime = Num('1/1/2013');
Let vEndTime = Num('1/3/2013');
Let vEpsilon = Pow(2,-27);
 
In_Rates: LOAD * Inline [ Currency,Change Date,Rate EUR,,8.59 EUR,28/01/2013,8.69 EUR,15/02/2013,8.45 USD,,6.50 USD,10/01/2013,6.56 USD,03/02/2013,6.30 ];
 
 
Tmp_Rates:
LOAD Currency, Rate,
Date(If(IsNum([Change Date]), [Change Date], $(#vBeginTime))) as FromDate
Resident In_Rates;
 
Rates:
LOAD Currency, Rate, FromDate,
Date(If( Currency=Peek('Currency'),
Peek('FromDate') - $(#vEpsilon),
$(#vEndTime)
)) as ToDate
Resident Tmp_Rates
Order By Currency, FromDate Desc;
 
Drop Table Tmp_Rates;