간격과 불연속 데이터의 연결

LOAD 또는 SELECT 문에 intervalmatch 접두사를 사용하면 불연속 숫자 값을 하나 이상의 숫자 간격과 연결할 수 있습니다. 이는 아래 예와 같은 프로덕션 환경에서 사용할 수 있는 매우 강력한 기능입니다.

Intervalmatch 예

아래 두 테이블을 보십시오. 첫 번째 테이블에는 여러 주문의 생산 시작 날짜와 종료 날짜가 나와 있습니다. 두 번째 테이블에는 몇 가지 불연속 이벤트가 나와 있습니다. 생산 중단으로 영향을 받은 주문이나 특정 주문 제품을 생산한 근무조 등을 확인하기 위해 이러한 불연속 이벤트를 주문과 연결하려면 어떻게 해야 할까요?

OrderLog 테이블
시작 순서
01:00 03:35 A
02:30 07:58 B
03:04 10:27 C
07:23 11:43 D
EventLog 테이블
Time 이벤트 주석
00:00 0 이동 1 시작
01:18 1 라인 중단
02:23 2 라인 다시 시작 50%
04:15 3 라인 속도 100%
08:00 4 이동 2 시작
11:43 5 생산 종료

먼저 두 테이블을 일반적인 방법으로 로드하고 Time 필드를 StartEnd 필드로 정의된 간격과 연결합니다.

SELECT * from OrderLog;

SELECT * from EventLog;

Intervalmatch (Time) SELECT Start,End from OrderLog;

이제 아래와 같이 Qlik Sense에서 테이블을 만들 수 있습니다.

시작 및 끝으로 정의된 간격에 연결된 시간 필드가 있는 테이블
Time 이벤트 주석 순서 시작
0:00 0 이동 1 시작 - - -
1:18 1 라인 중단 A 1:00 3:35
2:23 2 라인 다시 시작 50% A 1:00 3:35
4:15 3 라인 속도 100% B 2:30 7:58
4:15 3 라인 속도 100% C 3:04 10:....
8:00 4 이동 2 시작 C 3:04 10:....
8:00 4 이동 2 시작 D 7:23 11:....
11:43 5 생산 종료 E 7:23 11:.....

생산 라인 중단에 가장 큰 영향을 받은 것은 주문 A이지만 주문 BC의 경우에도 라인 속도 저하에 영향을 받았음을 손쉽게 확인할 수 있습니다. 주문 CDShift 2에 의해 부분적으로 처리되었습니다.

intervalmatch를 사용할 때는 다음 사항에 주의하십시오.

  • intervalmatch 문을 실행하기 전에 불연속 데이터 포인트(이 예에서는 Time)가 포함된 필드를 Qlik Sense로 읽어와야 합니다. intervalmatch 문은 이 필드를 데이터베이스 테이블에서 읽지 않습니다.
  • intervalmatch LOAD 또는 SELECT 문으로 읽은 테이블에는 항상 정확히 두 개의 필드(위 예에서는 StartEnd)가 포함되어 있어야 합니다. 다른 필드에 대한 링크를 설정하려면 별도의 LOAD 또는 SELECT 문(위의 예에서 첫 번째 SELECT 문)의 추가 필드와 함께 간격 필드를 읽어야 합니다.
  • 간격은 항상 완료된 상태입니다. 즉, 간격에는 종료 지점이 포함되어야 합니다. 제한이 숫자가 아닐 경우 간격이 무시되며(정의되지 않음), 제한이 NULL일 경우 간격이 무기한으로(무제한) 확장됩니다.
  • 간격은 겹칠 수 있으며 불연속 값은 일치하는 모든 간격에 연결됩니다.

확장된 intervalmatch 구문을 사용하여 느리게 변화하는 차원 문제 해결

확장된 intervalmatch 구문을 사용하여 잘 알려진 소스 데이터의 느리게 변화하는 차원 문제를 처리할 수 있습니다.

예제 스크립트:

SET NullInterpret='';

 

IntervalTable:

LOAD Key, ValidFrom, Team

FROM 'lib://dataqv/intervalmatch.xlsx' (ooxml, embedded labels, table is IntervalTable);

 

Key:

LOAD

Key,

ValidFrom as FirstDate,

date(if(Key=previous(Key),

previous(ValidFrom) - 1)) as LastDate,

Team

RESIDENT IntervalTable order by Key, ValidFrom desc;

 

drop table IntervalTable;

 

Transact:

LOAD Key, Name, Date, Sales

FROM 'lib://dataqv/intervalmatch.xlsx' (ooxml, embedded labels, table is Transact);

 

INNER JOIN intervalmatch (Date,Key) LOAD FirstDate, LastDate, Key RESIDENT Key;

누락된 값은 NULL 값이 아니라 빈 문자열로 정의되므로, nullinterpret 문은 테이블 파일에서 데이터를 읽어올 때만 필요합니다.

IntervalTable에서 데이터를 로드하면 다음과 같은 테이블이 만들어집니다.

Table with data loaded from IntervalTable
Key FirstDate Team
000110 2011-01-21 Southwest
000110 - Northwest
000120 - Northwest
000120 2013-03-05 Southwest
000120 2013-03-05 Northwest
000120 2013-03-05 Southwest

nullasvalue 문을 사용하여 NULL 값을 나열된 필드에 매핑할 수 있습니다.

previousorder by를 사용하여 Key, FirstDate, LastDate(특성 필드)를 만들면 나중에 IntervalTable이 키 테이블로 대체된 후 삭제됩니다.

Transact에서 데이터를 로드하면 다음과 같은 테이블이 만들어집니다.

Transact에서 로드된 데이터가 있는 테이블
이름 날짜 판매
000110 Spengler Aaron 2009-08-18 100
000110 Spengler Aaron 2009-12-25 200
000110 Spengler Aaron 2011-02-03 300
000110 Spengler Aaron 2011-05-05 400
000120 Ballard John 2011-06-04 500
000120 Ballard John 2013-01-20 600
000120 Ballard John 2013-03-10 700
000120 Ballard John 2013-03-13 800
000120 Ballard John 2013-09-21 900

inner join 다음에 나오는 intervalmatch 문은 Transact 테이블을 연결하는 가상 키로 위 키를 대체하여 다음과 같은 테이블을 만듭니다.

inner join 다음에 intervalmatch 문이 있는 테이블
이름 처음 날짜 마지막 날짜 날짜 판매
000110 Northwest Spengler Aaron - 2011-01-20 2009-08-18 100
000110 Northwest Spengler Aaron - 2011-01-20 2009-12-25 200
000110 Southwest Spengler Aaron 2011-01-21   2011-02-03 300
000110 Southwest Spengler Aaron 2011-01-21   2011-05-05 400
000120 Northwest Ballard John   2013-01-05 2011-06-04 500
000120 Southwest Ballard John 2013-01-06 2013-03-04 2013-01-20 600
000120 Southwest Ballard John 2013-03-05   2013-03-10 700
000120 Southwest Ballard John 2013-03-05   2013-03-13 800
000120 Southwest Ballard John 2013-03-05   2013-09-21 900