Aralıkları ayrık verilerle eşleme

Bir LOAD veya SELECT deyimine yönelik intervalmatch öneki, ayrık sayısal değerleri bir veya daha fazla sayısal aralığa bağlamak için kullanılır. Bu, örneğin aşağıdaki örnekte gösterildiği gibi üretim ortamlarında kullanılabilen oldukça etkili bir özelliktir.

Intervalmatch örneği

Aşağıdaki iki tabloya bakın. İlk tablo, farklı sıralamaların üretiminin başlangıcını ve bitişini göstermektedir. İkinci tablo, bazı ayrık olayları göstermektedir. Örneğin hangi siparişlerin arızalardan etkilendiğini ve hangi siparişlerin hangi vardiyalar ile işlendiğini bilebilmek için ayrık olayları siparişlerle nasıl ilişkilendirebiliriz?

OrderLog Tablosu
Başlat End Sıra
01:00 03:35 A
02:30 07:58 B
03:04 10:27 C
07:23 11:43 D
EventLog Tablosu
Zaman Olay Yorum
00:00 0 1. vardiya başlangıcı
01:18 1 Hattın durması
02:23 2 Hattın yeniden başlatılması %50
04:15 3 Hat hızı %100
08:00 4 2. vardiya başlangıcı
11:43 5 Üretim sonu

İlk olarak iki tabloyu normal şekilde yükleyin ve ardından Time alanını Start ve End alanlarıyla tanımlanan aralıklara bağlayın:

SELECT * from OrderLog;

SELECT * from EventLog;

Intervalmatch (Time) SELECT Start,End from OrderLog;

Şimdi Qlik Sense içinde, aşağıda olduğu gibi bir tablo oluşturabilirsiniz:

Zaman alanı, Başlangıç ve Bitiş tarafından tanımlanan aralıklara bağlantılandırılmış tablo
Zaman Olay Yorum Sıra Başlat End
0:00 0 1. vardiya başlangıcı - - -
1:18 1 Hattın durması A 1:00 3:35
2:23 2 Hattın yeniden başlatılması %50 A 1:00 3:35
4:15 3 Hat hızı %100 B 2:30 7:58
4:15 3 Hat hızı %100 C 3:04 10:....
8:00 4 2. vardiya başlangıcı C 3:04 10:....
8:00 4 2. vardiya başlangıcı D 7:23 11:....
11:43 5 Üretim sonu E 7:23 11:.....

Artık kolayca görebildiğimiz üzere, hattın durmasından en fazla etkilenen sipariş A olmuş; ancak azalan hat hızı B ve C siparişlerini de etkilemiştir. Yalnızca C ve D siparişleri Shift 2 tarafından kısmi olarak işlenmiştir.

intervalmatch öğesini kullanırken şu noktalara dikkat edin:

  • intervalmatch deyiminden önce, ayrık veri noktalarını (yukarıdaki örnekte Time) içeren alanın önceden Qlik Sense içine okunmuş olması gerekir. intervalmatch deyimi, veritabanı tablosundan bu alanı okumaz!
  • intervalmatch LOAD veya SELECT deyiminde okunan tablo her zaman tam olarak iki alan (yukarıdaki örnekte Start ve End) içermelidir. Diğer alanlarla bağlantı kurmak için, aralık alanlarını ayrı bir LOAD veya SELECT deyiminde (yukarıdaki örnekte ilk SELECT deyimi) yer alan ek alanlarla birlikte okumanız gerekir.
  • Aralıklar her zaman kapalıdır. Yani uç noktaları her zaman aralığa dahil edilir. Sayısal olmayan sınırlar göz ardı edilecek (tanımlanmamış) aralığı oluştururken, NULL sınırları, aralığı süresiz olarak (sınırsız) genişletir.
  • Aralıklar çakışabilir ve ayrık değerler tüm eşleşen aralıklara bağlanır.

Yavaşça değişen boyut sorunlarını çözmek için genişletilmiş intervalmatch söz dizimini kullanma

Genişletilmiş intervalmatch söz dizimi, kaynak verilerde var olduğu bilinen yavaşça değişen boyutlar sorununu ele almak için kullanılabilir.

Örnek kod:

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;

nullinterpret deyimi, yalnızca bir tablo dosyasından veri okunurken gereklidir; bunun nedeni, eksik değerlerin NULL değerler yerine boş dizeler olarak tanımlanmasıdır.

IntervalTable kaynağından verilerin yüklenmesi, şu tabloyla sonuçlanır:

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 deyimi, NULL değerlerin listelenen alanlara eşlenmesine olanak tanır.

previous ve order by kullanarak Key, FirstDate, LastDate öğelerini (öznitelik alanları) oluşturun; bu anahtar tablo yerini almış olacağından, IntervalTable bırakılır.

Transact kaynağından verilerin yüklenmesi, şu tabloyla sonuçlanır:

Transact kaynağından yüklenen verileri içeren tablo
Anahtar Ad Tarih Satış
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

Öncesinde inner join öğesinin geldiği intervalmatch deyimi, aşağıdaki tabloyla sonuçlanacak şekilde, yukarıdaki anahtarı Transact tablosuna bağlanan bir yapay anahtar ile değiştirir:

Öncesinde inner join bulunan intervalmatch deyimini içeren tablo
Anahtar Ekip Ad FirstDate LastDate Tarih Satış
000110 Kuzeybatı Spengler Aaron - 2011-01-20 2009-08-18 100
000110 Kuzeybatı Spengler Aaron - 2011-01-20 2009-12-25 200
000110 Güneybatı Spengler Aaron 2011-01-21   2011-02-03 300
000110 Güneybatı Spengler Aaron 2011-01-21   2011-05-05 400
000120 Kuzeybatı Ballard John   2013-01-05 2011-06-04 500
000120 Güneybatı Ballard John 2013-01-06 2013-03-04 2013-01-20 600
000120 Güneybatı Ballard John 2013-03-05   2013-03-10 700
000120 Güneybatı Ballard John 2013-03-05   2013-03-13 800
000120 Güneybatı Ballard John 2013-03-05   2013-09-21 900