Qlik Sense'te veri yükleme betiği yazmak: bağlantıdan modele
Beceri rehberi

Qlik Sense'te veri yükleme betiği yazmak: bağlantıdan modele

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

Qlik Sense veri yükleme betiğinde LOAD, FROM, Resident, Join, ApplyMap ve QVD kullanımını örnek kodlarla öğrenin. Sık hataları ve çözümlerini görün.

Veri yükleme betiği ne iş görür?

Qlik Sense uygulamasındaki her grafik, bir veri modelinden beslenir ve bu modeli oluşturan şey veri yükleme betiğidir (Load Script). Betik, kaynaklara bağlanır, tabloları belleğe okur, gerekirse dönüştürür, tabloları ortak alan adları üzerinden ilişkilendirir. Grafikleri ne kadar iyi yazarsanız yazın, betikte hatalı bir birleştirme ya da yinelenen kayıt varsa rakamlar yanlış çıkar.

Betik, uygulamanın veri yükleme düzenleyicisinde (Data load editor) yazılır ve her çalıştırmada baştan sona sırayla işlenir. Başka bir deyişle yukarıdan aşağıya akan bir programdır: bir tabloyu yüklemeden önce o tabloya başvuramazsınız, bir tabloyu sildikten sonra ona dönemezsiniz.

İyi bir betik şu katmanlarda düşünülür: kaynaktan ham alma, temizleme ve dönüştürme, uygulamaya sunulacak son model. Bu ayrım, hata ayıklamayı ve ileride bakım yapmayı kolaylaştırır.

Adım adım ilk yükleme: bağlantı, LOAD, FROM

Betiğin temel yapısı tablo etiketi, LOAD ifadesi ve kaynak belirten FROM ya da SQL SELECT satırından oluşur. Dosya tabanlı bir örnek:

Siparisler: LOAD OrderID, CustomerID, OrderDate, Amount FROM [lib://DataFiles/siparisler.xlsx] (ooxml, embedded labels, table is Sheet1);

Burada etiket, tabloya sonradan başvurmak için kullanılır. LOAD sonrası alan listesi, kaynaktaki sütun adlarıdır. Köşeli parantez içindeki yol, uygulamaya tanımlı veri bağlantısını (lib) gösterir. Parantez içindeki seçenekler dosya biçimini söyler. CSV için benzer biçimde metin dosyası seçenekleri yazılır, örneğin (txt, utf8, embedded labels, delimiter is ',').

Veritabanından okumak için önce bağlantıyı seçersiniz, ardından SQL ifadesiyle LOAD birlikte kullanılır:

LIB CONNECT TO 'BaglantiAdi';

Customers: LOAD *; SQL SELECT * FROM customers;

Başlangıç için yıldız (*) pratiktir. Üretim betiğinde ise sütunları tek tek yazmak, kaynak tablo değiştiğinde modelin sessizce bozulmasını önler.

Kontrol: Betiği çalıştırdıktan sonra veri modeli görüntüleyicisinde tablonun satır sayısını kaynakla karşılaştırın. Kaynak ile uygulama arasındaki tutarsızlık, en erken burada yakalanır.

Alan dönüşümleri ve koşullu yükleme

LOAD ifadesinin alan listesinde fonksiyon kullanabilirsiniz. Tipik dönüşümler: metin birleştirme, tarih biçimleme, boşlukları kırpma, koşullu değer atama.

Siparisler: LOAD OrderID, Upper(Trim(CustomerName)) as CustomerName, Date(Floor(OrderDate)) as OrderDate, Amount FROM [lib://DataFiles/siparisler.xlsx] (ooxml, embedded labels, table is Sheet1) Where Not IsNull(Amount);

as sözcüğü alanı yeniden adlandırır. Where koşulu, yüklenecek satırları yükleme anında filtreler. Gereksiz satırları baştan elemek hem model boyutunu hem sonraki hesapları küçültür.

Bir tablodan türetilmiş yeni bir tablo üretmek için Resident kullanılır. Bu, daha önce bellekte yer almış bir tabloyu kaynak olarak okur. Toplulaştırma gerektiğinde Group By ile birlikte yazılır, ancak Group By dışındaki alanlar yalnızca toplulaştırma fonksiyonu içinde yer alabilir. Sıralama gerekiyorsa Resident yüklemesine Order By eklenir.

Ara tablolar işini bitirince Drop Table ile bellekten atılmalıdır. Aksi halde hem bellek hem de istenmeyen ilişkiler (yapay anahtarlar) oluşur.

Tabloları ilişkilendirmek: Join, Concatenate, Mapping

Qlik, aynı adı taşıyan alanları otomatik olarak ilişkilendirir. Bu, güçlü ama dikkat isteyen bir davranıştır: farklı tablolarda tesadüfen aynı adlı alanlar varsa, istemediğiniz bir ilişki ya da döngüsel başvuru oluşur. Önlemek için alanları yeniden adlandırın ya da Qualify ifadesini kullanın.

Başlıca birleştirme yöntemleri şunlardır:

  • Join (Left Join): Yeni yüklenen tabloyu bir öncekine ortak alanlar üzerinden satır olarak ekler. Sonuç tek bir tablo olur. Birebir ya da çoktan bire anahtar eşleşmesinde kullanın; çoktan çoğa eşleşmede satır çoğalır.
  • Concatenate: Aynı yapıdaki tabloları alt alta ekler. Örneğin aylık dosyaları tek bir sipariş tablosunda toplamak için.
  • Mapping Load ve ApplyMap: Tek bir değeri eşleme tablosundan alıp ana tabloya taşımak için. Eşleme tablosu tam olarak iki sütunlu olmalıdır: anahtar ve döndürülecek değer.

Örnek:

BolgeHaritasi: Mapping LOAD CityID, RegionName FROM [lib://DataFiles/sehirler.xlsx] (ooxml, embedded labels, table is Sheet1);

Customers: LOAD CustomerID, ApplyMap('BolgeHaritasi', CityID, 'Bilinmiyor') as Region Resident RawCustomers;

Son parametre, eşleşme bulunamadığında yazılacak varsayılan değerdir. Eşleme tabloları betik bitince otomatik olarak silinir; başka uygulamada kullanmak için tabloyu dosyaya kaydedip orada yeniden kurmanız gerekir. Join yerine ApplyMap tercih etmek, tabloda satır çoğalma riskini ortadan kaldırır.

QVD ile kaydetme ve tekrar kullanma

Büyük kaynaklardan her seferinde okumak yavaştır. Qlik'in kendi sütunlu biçimi QVD, ara sonuçları diske yazıp sonraki yüklemelerde çok daha hızlı okumanızı sağlar. Kullanım kalıbı:

Store Siparisler into [lib://DataFiles/Siparisler.qvd] (qvd); Drop Table Siparisler;

Sonraki betikte aynı dosya From ile okunur. Bu yaklaşım katmanlı mimarinin temelidir: bir uygulama kaynaktan okuyup QVD üretir, diğer uygulamalar yalnızca QVD'yi okur. Böylece kaynak sisteme yük binmez ve bir kez doğrulanmış veri birçok panoda paylaşılır.

Artımlı yükleme de bu yapıya dayanır: yalnızca yeni ya da değişen kayıtları kaynaktan alır, eski kayıtları QVD'den ekler. Burada Where Not Exists koşulu, eski kayıtlarla çakışan satırların çift yüklenmesini engeller. Bu mantık hatalıysa veriler sessizce çoğalır; her artımlı betiği önce küçük bir veri kümesinde deneyin.

Sık yapılan hatalar ve hata ayıklama

  • Yapay anahtarlar: Veri modeli görüntüleyicisinde "$Syn" ile başlayan tablo görürseniz tablolar birden fazla ortak alan üzerinden bağlanmıştır. Alanları yeniden adlandırın ya da bileşik bir anahtar alanı üretin.
  • Döngüsel başvuru: Birkaç tablo halka biçiminde birbirine bağlandığında Qlik tabloları gevşek bağlar. Bir bağlantıyı kıran alan adı değişikliği çözer.
  • Tarih biçimi: Kaynak metin olarak geliyorsa Date# ile ayrıştırıp Date ile biçimleyin. Yanlış ayrıştırılmış tarihler grafik zaman ekseninde boş kalır.
  • Çok büyük Resident yüklemeleri: Her ara adımda tabloyu tekrar okumak süreyi uzatır. Dönüşümleri mümkün olduğunca ilk LOAD içinde yapın.
  • Silinmemiş ara tablolar: Drop Table unutulursa gereksiz tablo modelde kalır ve ilişkiler kirlenir.

Hata ayıklama için betiği bölümlere (sekmelere) ayırın, her bölümün sonunda model görüntüleyicisini açın ve tablo yapısını doğrulayın. Yükleme günlüğü, hangi satırda hangi hatanın oluştuğunu söyler.

Mindset programlarında nerede çalışılır?

Qlik Sense Temelleri eğitimi, raporları yalnızca kullanmak yerine veri modelini de kurmak isteyen analistler ve BI geliştiricileri için uygundur. Müfredatında "Veri Yükleme ve Script Geliştirme" modülü, bu sayfadaki betik pratiğinin doğrudan karşılığıdır. "Veri Modeli Tasarımı ve Performans Optimizasyonu" modülü ise yapay anahtar, ilişki ve bellek boyutu gibi konuları ele alır.

Kurumsal bir ekipte bu bilgi, birden fazla departmanın aynı kaynaktan farklı rakamlar üretmesini önlemek için ortak bir yükleme katmanı kurmaya yarar.

İlgili Mindset programı

Qlik Sense Temelleri

Sık sorulanlar

Sık sorulan sorular

Qlik Sense veri yükleme betiğini nerede yazarım?

Uygulamanın içinde veri yükleme düzenleyicisinde yazılır. Düzenleyicide betiği sekmelere bölebilir, çalıştırabilir ve yükleme günlüğünü izleyebilirsiniz. Basit ihtiyaçlarda veri yöneticisi arayüzü de betik üretir, ancak dönüşüm ve birleştirme üzerinde tam kontrol için betiği elle yazmak gerekir.

Resident ile From arasındaki fark nedir?

From dış bir dosyadan ya da bağlantıdan okur. Resident ise betiğin daha önce bellekte oluşturduğu bir tablodan okur. Bellekteki tabloyu yeniden düzenlemek, toplulaştırmak ya da sıralamak istediğinizde Resident kullanırsınız; iş bitince kaynak tabloyu silmeyi unutmayın.

Join mi ApplyMap mi kullanmalıyım?

Tabloya yalnızca tek bir değer taşıyacaksanız ApplyMap daha güvenlidir, çünkü satır çoğalmaz ve daha hızlıdır. Birden fazla alan taşımanız ya da tabloları gerçekten birleştirmeniz gerekiyorsa Join kullanılır; bu durumda anahtar alanın benzersizliğini önceden kontrol edin.

QVD dosyası neden önerilir?

QVD, Qlik'in kendi dosya biçimidir ve veriyi sıkıştırılmış sütunlu bir yapıda tutar. Büyük kaynakları her seferinde baştan okumak yerine QVD'den okumak yüklemeyi hızlandırır, kaynak sistemin yükünü azaltır ve bir kez doğrulanan veriyi birçok uygulamada paylaştırır.

Betik hata verdiğinde ilk neye bakmalıyım?

Önce yükleme günlüğündeki hata satırına bakın, ardından o satırdaki tablo etiketinin ve alan adlarının doğru yazıldığını kontrol edin. İlişkili hatalarda veri modeli görüntüleyicisinden yapay anahtar ve döngüsel başvuru kontrolü yapın. Betiği küçük parçalara bölmek hatanın yerini daraltır.

Qlik Sense Load Script Yazımı: Adım Adım Örnekler