16 Kasım 2009 Pazartesi

Daha hızlı reload için qvd kullanmak

QVD. Qlikview'in alternatif veri saklama biçimi çoğu yerde neredeyse hayat kurtarma derecesinde imdadımıza yetişmektedir. Veri kaynaklarından çekilen datanın Qlikview'in kendi sıkıştırma algoritması kullanılarak saklanması prensibine dayanan Qlikview Data(QVD) temelde bir tablo içeriğinin .qvd uzantılı dosyalar biçiminde depolanmasıdır.
Aşağıdaki scripti inceleyelim:

FATURA:
LOAD
MUSTERINO,
KARTNO,
TARIH,
TUTAR
SQL SELECT * FROM DBO.FATURA;

STORE FATURA INTO FATURA.QVD;

Görüldüğü gibi bir sql cümleciğinin veritabanına gönderilmekte ve karşılığında dönen sonuç seti load ifadesinin başındaki FATURA: ifadesi ile hafızaya FATURA ismi ile yüklenmektedir. Oluşan bu FATURA tablosunda 2.5 milyon satır kayıt vardır. Yükleme işlemi ise toplam 3 dakika 32 saniye sürmüştür.
Scriptin sonunda çalıştırdığımız STORE ifadesi ile QVDye de yazdığımız FATURA tablosunu aşağıdaki script içerisinde kullanarak reload işlemini gerçekleştirelim.

FATURA:
LOAD
MUSTERINO,
KARTNO,
TARIH,
TUTAR
FROM FATURA.QVD (QVD);


Bu scriptin çalışması sonunda elde ettiğimiz reload süresi ise sadece 3 saniye.

QVDler bize özellikle çok sık aralıklarla (1-3dk) reload olması gereken worksheetleri her defasında veri kaynağına sıfırdan bağlanarak verinin alınması zahmetinden ve zaman kaybından kurtararak QVDlerin bir ara referans katmanı olarak kullanılması ile sadece değişen datanın kaynak sistemden getirilmesini sağlar. Böylece hem veritabanı sunucusu üzerindeki sorgu yükü azalır hem de kullanıcıların worksheetler yoluyla taze ve anlık bilgiye daha çabuk ulaşması sağlanmış olur.

Group by ile özet tablolar oluşturmak

Bazen sık kullanılan hesaplamaların script tarafına taşınması son derece yararlı ve performans açısından verimli olmaktadır. Bildiğiniz gibi worksheet içerisinde set analysis ifadeleri ile filtreleme yapmak bize son derece esneklik sağlar. Ama esnekliğe o an ihtiyaç yoksa sık kullanılan ifadeleri tabloları oluştururken hesaplayıp hazır getirmek daha akıllıcadır.

Örneğin ürünlerin belli periyodlardaki hedeflenen satış tutarı ile gerçekleşme tutarının tek bir sütunda (VALUE) tutulduğu ve KPI isimli sütunda hedef / tutar ayrımının yapıldığı aşağıdaki gibi bir tablodaki rakamları hedef ve tutar olacak şekilde 2 ayrı sütuna yazabiliriz.


Temp2:
load
period,
urungrubu,
if(kpi='TAR',value,0) as Hedef,
if(kpi='ACT',value,0) as Tutar
resident Temp1;

drop table Temp1;


Final:
load
period,
urungrubu,
sum(Hedef) as HedefToplam,
sum(Tutar) as TutarToplam
resident Temp2
group by
period,
urungrubu;

drop table Temp2;


Böylece

Sum({}VALUE) gibi bir ifadeyi uygulamada kullanmak yerine doğrudan

Sum(HedefToplam) kullanılmış olur.

Bu düzenleme ile küçük ama etkili bir performans tuning yapmış oluruz.