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

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

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

아래 테이블에 여러 통화에 대한 환율이 나와 있습니다. 각 환율 변경 내역이 자체 행에 나와 있으며, 각각은 새로운 변환율이 함께 표시되어 있습니다. 또한 테이블에는 첫 번째 변경을 수행하기 전의 초기 전환율에 해당하는 빈 날짜가 포함된 행이 있습니다.

이 테이블은 일련의 겹치지 않는 간격을 정의합니다. 여기서 시작 날짜는 "Change Date"라고 하며 끝 날짜는 다음 간격의 시작 날짜로 정의됩니다. 하지만 끝 날짜가 자체 열에 명시적으로 저장되어 있지 않으므로 해당 열을 만들어야 하고 따라서 새 테이블은 간격의 목록이 됩니다.

다음과 같이 하십시오.

  1. 위에 표시된 테이블이 포함된 Rates.xlsx 파일을 만들어 로드 가능하도록 저장합니다.
  2. Change Date 열의 날짜는 현지 날짜 서식과 동일한 서식이어야 합니다.

  3. 작업할 시간 범위를 결정합니다. 범위 시작은 데이터의 첫 번째 날짜 이전이어야 하고 범위 끝은 마지막 날짜 이후여야 합니다.
  4. 소스 데이터를 로드하고 빈 날짜를 이전 항목에서 정의한 범위의 시작 날짜로 변경합니다. 변경 날짜는 "From Date"로 로드해야 합니다.
  5. 먼저 Currency에 따라 테이블을 정렬한 다음, "From Date"에 따라 내림차순으로 정렬하여 최근 날짜가 맨 위에 오도록 합니다.
  6. 데이터에서 "To Date"를 계산하기 위한 두 번째 단계를 실행합니다. 현재 레코드에 이전 레코드와 다른 통화가 있는 경우, 새로운 통화의 첫 번째 레코드(및 마지막 간격)이므로 1단계에서 정의한 범위의 끝 날짜를 사용해야 합니다. 동일한 통화인 경우는 이전 레코드의 "From Date"에서 약간의 시간을 빼고, 이 값을 현재 레코드의 "To Date"로 사용해야 합니다.

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

QlikView 스크립트는 다음과 같습니다.

Let vBeginTime = Num('1/1/2013');
Let vEndTime = Num('1/3/2013');
Let vEpsilon = Pow(2,-27);
Tmp_Rates:
LOAD Currency, Rate,
Date(If(IsNum([Change Date]), [Change Date], $(#vBeginTime))) as FromDate
From 'C:\MyFiles\Rates.xlsx'
(ooxml, embedded labels, table is Sheet1);
 
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;

 

이 스크립트를 실행하면 테이블의 간격이 정확하게 표시됩니다.

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