15 Ağustos 2015 Cumartesi

Standart Tabloları: Bir Sütundaki Değerleri Ayrı Sütunlara Çevirmek


Elimizdeki veri ile uğraşırken zaman zaman sütun başlıklarını satıra, satırlarının her birini ayrı bir sütuna dönüştürme ihtiyacı duyuyoruz. Sütun başlıklarını satıra çevirmek için bir önceki yazımda anlattığım Dosya Sihirbazı'nı kullanabiliyoruz. Fakat sütunda yer alan değerlerin her birini ayrı bir sütuna çevirmek için orijinal adıyla Generic table veya diğer ismiyle Standard table'lar oluşturmamız gerekiyor.

Örneğin elimizde yukarıdaki resimdeki gibi bir veri olsun. Ve biz Stage sütununu satırlara çevirmek (yani tabloya beş yeni sütun -queued, reported, closed, rejected ve verified- eklemek) istiyoruz. Yani elimizdeki veriyi aşağıdaki tabloya dönüştüreceğiz.

Elimizdeki veriyi raporumuza ekleyelim. Tablonun INLINE sorgusu aşağıdaki gibidir:
DefectTable:
LOAD * INLINE [
Defect, Group, Priority, Stage
1, Reports, High, Queued
2, Data, Low, Reported
3, Data, High, Closed
4, Object, Medium, Rejected
5, Security, High, Reported
6, System, Medium, Rejected
7, Security, High, Closed
8, Object, Low, Queued
9, Data, Medium, Closed
10, Requirements, Medium, Verified];

Veriyi aktardıktan sonra satırlara çevireceğimiz sütunun her değeri için ayrı bir tablo oluşturuyoruz. Bunun için  QlikView'in GENERIC LOAD özelliğini kullanacağız.
QlikView GENERIC LOAD'un sözdizimi şu şekildedir:
GENERIC LOAD 
   [diğer tablolarla bağlantı kurduracak anahtar alan],
   [değerleri sütunlara çevrilecek sütun adı],
   [yeni sütunların değerleri]
FROM/RESIDENT [kaynak]
Bizim verimize göre GENERIC LOAD sorgumuz şu şekilde olacak:
Workflow:
GENERIC LOAD 
   Defect, 
   Stage, 
   'x' 
RESIDENT DefectTable;
Sonrasında soldaki resimde olduğu gibi her bir sütun değeri için ayrı bir tablo olarak 5 artı kaynak tablomuz olmak üzere toplamda 6 tablomuz olacak.

Her bir sütun değerini ayrı bir sütun yapmak için yola çıkmıştık. Evet, şimdi her bir değerimizin yer aldığı tabloyu ana tablomuzla birleştirerek istediğimiz formatta tek bir tablo elde edeceğiz.
Bunun için tek tek her bir bir değer tablosunu ana tablomuz için LEFT JOIN yapıyoruz:
FOR t = 0 to NoOfTables()
TableList:
LOAD 
   TableName($(t)) as Tablename
   AUTOGENERATE 1
WHERE WildMatch(TableName($(t)), 'Workflow.*');
NEXT t
FOR t = 1 to FieldValueCount('Tablename')
LET vTable = FieldValue('Tablename', $(t));
LEFT JOIN (DefectTable) 
LOAD * 
RESIDENT $(vTable);
DROP TABLE $(vTable);
NEXT t
DROP TABLE TableList;
Ve istediğimiz gibi, en başta elimizdeki verinin Stage sütununda yer alan her bir değeri ayrı bir sütuna çevirmeyi başardık!

İyi çalışmalar..

Hiç yorum yok:

Yorum Gönder