Microsoft Certified Partner

 

 

Veritabanı Analizinden Oluşturulan Sorgularda Filtre Kullanımı


Veritabanı analizleri uygulaması olan tüm programlarımızda (Vogue, DeLux, Excellent, Fabric vb..) veritabanı analizlerinde filtre kullanımı aktif hale getirilmiştir. Programların güncellenmesi sonucu bu özellik kullanılabilecektir. (22/01/2010 ve sonraki tarihli programlar)

Veritabanı analizinden oluşturulan sorgu/raporlar için sabit/değişken olan koşulları sorgu içerisine yazabiliyor değişken olan koşulları ise kullanıcının rapor almadan önce değiştirmesi gerekiyordu.

Yapılan yeni düzenleme ile kullanıcının rapor alma esnasında belirlemek istediği filtre değerlerini sorguya müdahale etmeden rapor öncesi filtre ekranını açarak girmesini sağlıyoruz. (28/09/2007 ve sonraki tarihli V6 programları)

Bu uygulamada sabit olan koşullar yine sorgu içerisine yazılacak olup her defasında kullanıcının bu değerleri girmesine gerek olmayacaktır.

Filtre ekranının oluşturulabilmesi için sorgu tanımlamada filtre parametresi kullanımı gerekmektedir.

Rapor/sorgu düzenlenip değeri sabit olan ve değeri kullanıcı tarafından rapor öncesi belirlenecek koşullar sorgu içerisine (where) yazılır.

Kullanıcının değerini belirleyeceği koşulların (filtre parametreleri) yazım formatı aşağıda tanımlanmıştır.

[Filtrede Gözükecek Ad#Operatör#Veri Tipi#Filtre Ön Değeri]
Filtrede Gözükecek Ad#Operatör#Veri Tipi#Filtre Ön Değeri


Bu formatta Filtre Ön Değeri hariç diğer tüm alanlar zorunlu alanlardır ve yazım sırasının değişmemesi aralarda # kullanılması gerekmektedir.

Başta [ ve sonda ] kullanımı isteğe bağlı olup bütünlüğün sağlanması açısından kullanılmasında fayda vardır.

Filtrede gözükecek ad alanı (örneğin; Cari Hesap Kodu vb.) birden fazla kelimeden oluşuyor ve aralara boşluk bırakılmak isteniyor ise başa ve sona ' kullanılması gerekmektedir. (örnek; 'Cari Hesap Kodu')

Operatörler sorgu içerisinde koşullarda kullandığımız karşılaştırma değerleridir. Bunlar; 

Operatör Anlamı
-------------- --------------
= eşit
<> eşit değil
> büyük
>= büyük eşit
< küçük
<= küçük eşit
LIKE içeren
NOTLIKE içermeyen

Veri tipleri filtreleme yapılacak alanın tipini ifade edecektir. Bunlar; 

Veri Tipi Anlamı
---------------- ---------------
ALFABETIK AlfaNumerik alanlar
TARIH Tarih alanları
SAYI Sayısal alanlar

Parametre yazım sırasında ALFABETIK yerine 1 , TARIH yerine 2 ve SAYI yerine 3 kullanılabilir. Bu durumda,

Veri Tipi Anlamı
---------------- ---------------
1 AlfaNumerik alanlar
2 Tarih alanları
3 Sayısal alanlar

olarak ta kullanılabilir.

Parametre oluşturulması esnasında veri tipi olarak kullanılacak değerler isteğe bağlı olup (örneğin; Tarih alanı için 2 veya TARIH kullanılabilir) aynı sorgu içerisinde bulunan iki tarih alanı için 2 ve TARIH değerleri aynı anda kullanılabilir. 

TARIH>=:['Tarih Başlangıç'#>=#2] AND TARIH<=:['Tarih Bitiş'#<=#TARIH]


Not: Filtre parametre değerinin sorgu içerisinde kullanılabilmesi için önüne : konulması gerekmektedir. Aşağıdaki örneklerde bunu görebilirsiniz. 

Not: Sorgu içerisine yazılacak filtre parametrelerinde yukarıda anlatılan operatör ve veri tiplerinden farklı bir operatör veya veri tipi kullanılması durumunda oluşturduğunuz sorgu hata verecek ve çalışmayacaktır.

Örnek-1 ;
Kullanıcı rapor öncesi filtrede belirleyeceği kodlar arasında kalan stokları listelemek istiyor

Filtre ön değeri verilmemiş hali 

SELECT * FROM SKART
WHERE SIRKET='01' AND KOD>=:['Stok Kodu Başlangıç'#>=#1] AND KOD<=:['Stok Kodu Bitiş'#<=#1]
Veri tipinin 1 yerine ALFABETIK olarak belirlenmesi durumu
SELECT * FROM SKART
WHERE SIRKET='01' AND KOD>=:['Stok Kodu Başlangıç'#>=#ALFABETIK] AND KOD<=:['Stok Kodu Bitiş'#<=#1]


Filtre ön değeri verilmiş hali (başlangıç değeri olarak KT belirlenmiş – ekrana gelen filtrede bu değer değiştirilebilir) 

SELECT * FROM SKART
WHERE SIRKET='01' AND KOD>=:['Stok Kodu Başlangıç'#>=#1#KT] AND KOD<=:['Stok Kodu Bitiş'#<=#1]
Veri tipinin 1 yerine ALFABETIK olarak belirlenmesi durumu
SELECT * FROM SKART
WHERE SIRKET='01' AND KOD>=:['Stok Kodu Başlangıç'#>=#ALFABETIK#KT] AND KOD<=:['Stok Kodu Bitiş'#<=#1]



Örnek-2 ;
Kullanıcı mal alım stok fişlerindeki tek bir cari hesabın cari hesap tarih aralığındaki fişlerini filtrelemek istiyor

Filtre ön değeri verilmemiş hali 

SELECT * FROM SFIS
WHERE SIRKET=’01’ AND CKOD=:['Cari Hesap Kodu'#=#1] AND TARIH>=:['Tarih Başlangıç'#>=#2] AND TARIH<=:['Tarih Bitiş'#<=#TARIH]


Filtre ön değeri verilmiş hali (tarih için 01/01/2007 – 31/12/2007 öndeğeri verilmiş) 

SELECT * FROM SFIS
WHERE SIRKET='01' AND CKOD=:['Cari Hesap Kodu'#=#1] AND TARIH>=:['Tarih Başlangıç'#>=#2#01/01/2007] AND TARIH<=:['Tarih Bitiş'#<=#TARIH#31/12/2007]


Örnek-3 ;
Kullanıcı isminin içerisinde belirli değer geçen stokları listelemek istiyor

Filtre ön değeri verilmemiş hali 

SELECT * FROM SKART
WHERE SIRKET='01' AND KOD LIKE :['Stok Kodu'#LIKE#1]


Filtre ön değeri verilmiş hali içerisinde GH geçenler 

SELECT * FROM SKART
WHERE SIRKET='01' AND KOD LIKE :['Stok Kodu'#LIKE#1#%GH%]

Burada filtre değeri %GH% olarak verilmiştir. Bu kodun herhangi bir yerinde GH geçenler anlamına gelmektedir. (Programlardaki sabit rapor ve filtrelerde % yerine * ve _ yerine ? kullanılmaktadır.)

%GH% Alanın herhangi bir yerinde GH geçenler
%GH Alan değeri GH ile bitenler
GH% Alan değeri GH ile başlayanlar


Detaylı Örnek ; 

01 nolu şirkete ait termini rapor alındığı gün ve geçmiş olan açık müşteri siparişlerinin raporlandığı rapora ait sorgu örneği aşağıdadır. Kullanıcı miktar ve sipariş fiş tarihi değerini rapor esnasında ayrıca filtrelemek istemektedir.
Sorgunun koşul bölümünde şirket kodu, sipariş fişi tipi, açık/kapalı olma durumu ve termin tarihinin rapor alındığı gün ve önce olması gibi sabit koşullar yanında miktar ve tarih değişken koşulları verilmiştir.
Burada miktar için filtre ön değeri 100 olarak belirlenmiş tarih için herhangi bir ön değer belirtilmemiştir.

Select TERMIN As Termin, FISNO As [Fiş No], ISNULL((Select ADI From CKART
Where CKART.SIRKET = SIRKET And CKART.KOD = CKOD), '') As Müşteri,
MKOD As Stok, OZEL5 As Varyant, MIKTAR As Miktar, DOVIZ As Döviz, DFIYAT As [Döviz Fiyat]
From SIPFD
Where SIRKET = '01' And TIP = 2 And AK = 0 And FLOOR(Cast(TERMIN As Float)) <= FLOOR(Cast(GETDATE() As Float)) And MIKTAR >= :[Miktar#>=#3#100] And TARIH >= :['Sipariş Tarihi'#>=#TARIH#]
Order By TERMIN, CKOD


Not: Yukarıda verilen örneklerde özellikle işaretlenen : değeri kendisinden sonra gelen ifadenin filtre parametresi olduğunu ifade eder ve oluşturulan sorgular bu doğrultuda çalışır. Bu değerin (:) filtre parametresi önüne konmaması durumunda sorgunuz hata verecek ve çalışmayacaktır.

Veri Tabanı Analizlerinde Stored Procedure Kullanımı

11.04.2008 tarihi itibariyle programlarımızda bulunan Veri Tabanı Analizleri bölümünde SQL Stored Procedure olarak hazırlanan raporların çalışması sağlanmıştır.

Bu uygulama için veri tabanı analizleri ekranında sağ clickte “Stored Procedure Ekleme” ve “Stored Procedure Düzenleme” seçenekleri eklenmiştir.

Stored Procedure Ekleme seçeneği ile açılan pencerede bulunan Procedure Adı alanına SQL Stored Procedure ismi yazılacaktır.
Parametreleri (filtre değerleri) olan Procedure için bu ekranda sağ click yapıldığında Procedure Parametreleri seçeneği bulunmaktadır. Procedure parametreleri sırayla (procedure de tanımlanan sıra korunmalıdır) girilmelidir. Ekran üzerinde parametrenin filtrede görüntülenecek adı, veri tipi ve isteğe bağlı olarak filtre ön değeri belirlenecektir. 

Tarih alanları için filtre ön değeri olarak günün tarihinin gelmesi isteniyor ise bu alana getdate (sql günün tarihi fonksiyonu) değeri yazılması gerekmektedir.

Not  : Procedure parametreleri tanımlanırken parametre sırası ve veri tipi önemli olup bu değerler oluşturulan procedure uygun olarak tanımlanmalıdır.

Not : SQL Stored Procedure yazılması, düzenleme yapılması veya bunların databaselere yüklenmeleri için SQL Query Analyzer kullanılması gerekmektedir.

Veritabanı Analizinde Sütunların Formatlı Olarak Gösterilmesi

Veritabanı analizi üzerinde yapılan ek düzenleme ile, oluşturulan sorgu ve raporların sütunlarının formatlı olarak gösterilebilmesi sağlanmıştır. Formatlı gösterilmesi istenen sütunun üzerinde (sütun seçildikten sonra) sağ click ile açılan menüde “Sütun Formatı” seçeneğinden ilgili formatın seçilmesi gerekmektedir. Bu şekilde kayıt edilen raporlar açıldığında ilgili sütunlar kayıt edildiği format ile ekrana gelecektir.

Not : Sadece sayısal alanlar formatlanacağından diğer alanlarda bu seçenek (Sütun Formatı) ekrana gelmeyecektir.