# 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.

Örnek:

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?

Tablo OrderLog

| Başlangıç | End | Sıralama |
| --- | --- | --- |
| 01:00 | 03:35 | A |
| 02:30 | 07:58 | B |
| 03:04 | 10:27 | C |
| 07:23 | 11:43 | D |

Tablo EventLog

| Zaman | Olay | Yorum |
| --- | --- | --- |
| 00:00 | 0 | Kaydırma 1 başlangıcı |
| 01:18 | 1 | Satır durdurma |
| 02:23 | 2 | Satır yeniden başlatma %50 |
| 04:15 | 3 | Satır hızı %100 |
| 08:00 | 4 | Kaydırma 2 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 QlikView içinde, aşağıda olduğu gibi bir tablo oluşturabilirsiniz:

![A table in QlikView combining the above tables.](https://help.qlik.com/tr-TR/qlikview/September2026/Subsystems/Client/Content/Resources/Images/ui_gen_IntervalMatch.png)

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 QlikView'e okunmuş olması gerekir. intervalmatch deyimi, bu alanı veritabanı tablosundan okumaz!
* intervalmatch LOAD veya SELECT deyiminde okunan tablo her zaman tam olarak iki alan (yukarıdaki örnekte Start ve End) içermelidir. Diğer alanlara bir bağlantı oluşturmak için, aralık alanlarını ek alanlarla birlikte ayrı bir LOAD veya SELECT deyiminde (yukarıdaki örnekte ilk SELECT deyimi) 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 IntervalTable.xls;` `NullAsValue FirstDate,LastDate;` ` ` `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 Transact.xls;` ` ` `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:

Örnek tablo 1

| Anahtar | FirstDate | Ekip |
| --- | --- | --- |
| 000110 | 2011-01-21 | Güneybatı |
| 000110 | - | Kuzeybatı |
| 000120 | - | Kuzeybatı |
| 000120 | 2013-03-05 | Güneybatı |
| 000120 | 2013-03-05 | Kuzeybatı |
| 000120 | 2013-01-06 | Güneybatı |

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; böylece bu anahtar tablo yerini almış olacağından, IntervalTable bırakılır.

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

Örnek tablo 2

| Tuş | Ad | Tarih | Satışlar |
| --- | --- | --- | --- |
| 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:

Örnek tablo 3

| Anahtar | Ekip | Ad | FirstDate | LastDate | Tarih | Satışlar |
| --- | --- | --- | --- | --- | --- | --- |
| 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 |