Join ve Keep ile tabloları birleştirme

Join, iki tabloyu alan ve bunları bir tabloda birleştiren bir işlemidir. Sonuçta ortaya çıkan tablonun kayıtları, orijinal tablolardaki kayıtların birleşimleridir; bu genellikle sonuçta ortaya çıkan tablodaki herhangi bir birleşimin bir veya birkaç ortak alan için ortak bir değere sahip olması şeklinde, yani bir natural join ile, gerçekleştirilir. QlikView'da, join işlemleri kod içinde gerçekleştirilebilir ve mantıksal tablolar oluşturur.

Bu durumda QlikView mantığı ayrı tabloları görmek yerine, tek bir dahili tablo olan birleştirme sonucunu görür. Bazı durumlarda bu gereklidir; ancak bazı dezavantajları da mevcuttur:

  • Yüklü tablolar genellikle daha büyük hale gelir ve QlikView daha yavaş çalışır.
  • Bazı bilgiler kaybedilebilir: ilk tablodaki sıklık (kayıtların sayısı) artık kullanılamayabilir.

Tablolar QlikView'da depolanmadan önce iki tablodan birini veya her ikisini tablo verilerinin kesişimine azaltma etkisine sahip olan Keep fonksiyonu, açık birleştirmelerin kullanılması gereken durumların sayısını azaltmak üzere tasarlanmıştır.

Note: Bu belgede, birleştirme terimi genellikle dahili tablolar oluşturulmadan önce gerçekleştirilen birleştirmeler için kullanılmaktadır. Ancak, dahili tablolar oluşturulduktan sonra gerçekleştirilen ilişkilendirme temelde bir birleştirmedir.

Join

Bir birleştirme gerçekleştirmenin en basit yolu, dahili tabloyu başka bir adlandırılmış tabloyla veya önceden oluşturulan son tabloyla birleştiren Join önekini kod içinde kullanmaktır. Birleştirme, iki tabloya ait değerlerin tüm olası bileşimlerini oluşturan bir outer join olur.

Example:  

LOAD a, b, c from table1.csv;

join LOAD a, d from table2.csv;

Sonuçta ortaya çıkan dahili tablo a, b, c ve d alanlarına sahiptir. Kayıtların sayısı, iki tablonun alan değerlerine bağlı olarak değişiklik gösterir.

Note: Üzerinde birleştirme gerçekleştirilecek alanların adları tam olarak aynı olmalıdır. Üzerinde birleştirme gerçekleştirilecek alanların sayısı rastgeledir. Genellikle tabloların bir veya daha az ortak alanı olmalıdır. Hiçbir ortak alan olmaması, tabloların kartezyen ürününü oluşturur. Tüm alanların ortak olması da mümkündür, ancak genellikle bir anlam ifade etmez. Join deyiminde önceden yüklenmiş bir tablonun tablo adı belirtilmedikçe, Join öneki önceden oluşturulan son tabloyu kullanır. Bu nedenle, iki deyimin sıralaması rastgele değildir.

Keep

QlikView olanağının ana özelliklerinden biri, tabloları birleştirmek yerine tablolar arasında ilişkilendirmeler gerçekleştirmektir; bu da bellekteki alanı azaltır, hızı artırır ve büyük ölçüde esneklik sağlar. Keep fonksiyonu, açık birleştirmelerin kullanılması gereken durumların sayısını azaltmak üzere tasarlanmıştır.

İki LOAD veya SELECT deyimi arasındaki Keep öneki, tablolar QlikView ortamında depolanmadan önce iki tablodan birini veya her ikisini tablo verilerinin kesişimine azaltma etkisine sahiptir. Keep önekinin öncesinde her zaman Inner, Left veyaRight anahtar sözcüklerinden biri gelmelidir. Tablolardan kayıt seçimi, karşılık gelen birleştirme ile aynı şekilde gerçekleştirilir. Ancak, iki tablo birleştirilmez ve QlikView içinde iki ayrı ayrı adlandırılmış tablo olarak depolanır.

Inner

QlikView kod dilindeki Join ve Keep öneklerinden önce Inner öneki gelebilir.

Join öğesinden önce kullanılması durumunda, iki tablo arasındaki birleştirmenin iç birleştirme olması gerektiğini belirtir. Sonuç olarak elde edilen tablo yalnızca her iki tarafa ait tam veri kümesiyle iki tablo arasındaki bileşimleri içerir.

Keep öğesinden önce kullanılması durumunda, iki tablonun QlikView içinde depolanmadan önce ortak kesişimlerine azaltılması gerektiğini belirtir.

Example:  

Bu örneklerde Table1 ve Table2 kaynak tablolarını kullanıyoruz:

Inner örnek kaynak tabloları

İlk olarak tablolar üzerinde Inner Join yapıyoruz ve her iki tablodan birleştirilen verilerle yalnızca bir satır (her iki tabloda da bulunan tek kayıt) içeren VTable ortaya çıkıyor.

VTable:

SELECT * from Table1;

inner join SELECT * from Table2;

Inner Join örneği

Bunun yerine Inner Keep uygularsak, halen iki tablonuz olur. İki tablo şüphesiz, ortak alan A aracılığıyla ilişkilidir.

VTab1:

SELECT * from Table1;

VTab2:

inner keep SELECT * from Table2;

Inner Keep örneği

Left

QlikView kod dilindeki Join ve Keep öneklerinden önce left öneki gelebilir.

Join öğesinden önce kullanılması durumunda, iki tablo arasındaki birleştirmenin sol birleştirme olması gerektiğini belirtir. Sonuç olarak elde edilen tablo yalnızca birinci tabloya ait tam veri kümesiyle iki tablo arasındaki bileşimleri içerir.

Keep öğesinden önce kullanılması durumunda, ikinci tablonun QlikView içinde depolanmadan önce birinci tabloyla ortak kesişimine azaltılması gerektiğini belirtir.

Example:  

Bu örneklerde Table1 ve Table2 kaynak tablolarını kullanıyoruz:

Left örnek kaynak tabloları

İlk olarak tablolar üzerinde bir Left Join yapıyoruz ve Table1'den gelen tüm satırları, Table2 içindeki eşleşen satırlardan gelen alanlarla birleştirilmiş olarak içeren VTable ortaya çıkıyor.

VTable:

SELECT * from Table1;

left join SELECT * from Table2;

Left Join örneği

Bunun yerine Left Keep uygularsak, halen iki tablonuz olur. İki tablo şüphesiz, ortak alan A aracılığıyla ilişkilidir.

VTab1:

SELECT * from Table1;

VTab2:

left keep SELECT * from Table2;

Left Keep örneği

Right

QlikView kod dilindeki Join ve Keep öneklerinden önce right öneki gelebilir.

Join öğesinden önce kullanılması durumunda, iki tablo arasındaki birleştirmenin sağ birleştirme olması gerektiğini belirtir. Sonuç olarak elde edilen tablo yalnızca ikinci tabloya ait tam veri kümesiyle iki tablo arasındaki bileşimleri içerir.

Keep öğesinden önce kullanılması durumunda, birinci tablonun QlikView içinde depolanmadan önce ikinci tabloyla ortak kesişimine azaltılması gerektiğini belirtir.

Example:  

Bu örneklerde Table1 ve Table2 kaynak tablolarını kullanıyoruz:

Right örnek kaynak tabloları

İlk olarak tablolar üzerinde bir Right Join yapıyoruz ve Table2'den gelen tüm satırları, Table1 içindeki eşleşen satırlardan gelen alanlarla birleştirilmiş olarak içeren VTable ortaya çıkıyor.

VTable:

SELECT * from Table1;

right join SELECT * from Table2;

Right Join örneği

Bunun yerine Right Keep uygularsak, halen iki tablonuz olur. İki tablo şüphesiz, ortak alan A aracılığıyla ilişkilidir.

VTab1:

SELECT * from Table1;

VTab2:

right keep SELECT * from Table2;

Right Keep örneği