SQL Server Data Quality Services
Data Quality Service kurulumuna geçmeden önce aslında en temelde ne gibi sıkıntılar yaşadığımıza dair birkan tanımlama yapalım. Hemen hemen her şirket için (bu facebook olsun, hizmet şirketi olsun, e ticaret olsun farketmiyor) müşteriler ile ilgili iletişim bilgilerinin tutulduğu kayıtlar her zaman sıkıntı oluşturur. Bunlardan ilki standart olan sıkıntılarımızdır. Örneğin cinsiyet alanının veritabanında tanımlanması. Kimi uygulamalarımız M,F,U gibi cinsiyetlerin ilk harflerinden oluşabilir veya 0,1,2 gibi numaralandırılabilir. Peki NULL gelirse ne olacak. Veritabanında o alan bit olarak tanımlanmışsa (ki birçok şirkette malesef bu şekilde tutuluyor) ne olacak. İkinci sorun tamamlama sorunlarımız. Müşteri bilgisi tutan firmaların veritabanını incelediğinizde büyük bir oranının 1903, 1905, 1907 doğumlu olduğunu göreceksiniz. Öte yandan boş geçilen doğum günü tarihleri ve dropdownlistten rastgele seçilen doğum tarihleri ise durumu daha da vahim hale getiriyor. Doğru bilgi sıkıntısı ise bir başka konu. Müşterimizi yapmış olduğu bir eylemden dolayı işaretlemiş olabiliriz (sıkıntılı müşteri) ama bu işaretleme 6 yıl önce gerçekleşmişse acaba halen doğru mudur? Veya büyük bir market olduğumuzu düşünelim onlarca tedarikçimiz var ve 8 yıldır hiç ürün tedarik etmediğimiz bir firma acaba halen aktif olarak mı tanımlanmalı? Devam edecek olursak veritabanımızda tuttuğumuz kimi alanların geçerli alanlar olması gerekir. Email için artık bunu neredeyse yapmayan kalmadı. Belirli formatta veri girişi gerçekleştirebiliyorum fakat telefon için bu hala bir sorun olarak karşımıza çıkmaktadır. Son olarak tekilleştirme problemlerimiz var. Aynı kullanıcı için yapılan veri girişinde yanlışlıkla isim değiştirilebilir. En basitinden Koray Kocabaş ile Koray Kocabas aynı kişidir fakat veritabanına göre farklı kişilerdir.

Data Quality Service için bilgisayarımızın programlar menüsünden SQL Server sekmesinin altında yer alan Data Quality Client’ı açalım. Servisi ilk defa çalıştırıyorsanız aşağıdaki gibi bir hata alacaksınız.
--------------------------------------------------------------------------------
Message Id: LogOnServerDataQualityNotInstalled
The SQL Server instance that you are trying to connect to does not include an installation of
Data Quality Services. To finalize the installation of Data Quality Services please run the DQS installer script.
Kurulum sonrasında Data Quality Client ı açalım. İlk önce referans olarak alacağımız ve gerekli kurallarımızı tanımlayacağımız bir Knowledge Base’e ihtiyacımız var.
Senaryomuza göre tedarikçilerimizin adresleri ile ilgili bir kalite çalışması yapacağız. Kullanacağımız excel dosyasını
https://app.box.com/s/4kw8yw5cs9p9l63zqap8 adresinden indirebilirsiniz. Kullanacağımız alanların tanımlamasını yaptıktan sonra referans olarak kabul edeceğimiz verilerimizi Excel dosyamız üzerinden yükleyerek gerçekleştirebiliriz.
Örneğin email adreslerini doğru formatta alıyoruz. Fakat bu yine de yazım yanlışı yapmayacağımız anlamına gelmez. Örneğin çalışmış olduğum şirketlerimden olan Fujitsu Siemens Computers firmasında müşteriye email adresimizi söylemek son derece sıkıntılı bir süreçti ve hataya çok açıktı. Bu tip kuralları Domain rules sekmesinden gerçekleştirebiliriz. Contact email’lerin tamamı bizim belirlediğimiz (şirketimizin adı) kurallara bağlı sonlanmalıdır.

Bazı veriler vardır ki aslında hepsi doğrudur ve tek bir anlama gelir fakat her platformda farklı tutuluyor olabilir. Bunların arasında sanırım en çok karşılaştığım ülke isimleri. Amerika Birleşik Devletlerinin kaç farklı şekilde tutulduğuna bakalım : Amerika Birleşik Devletleri, A.B.D., USA, United States, United States Of America. Yukarıdaki örneklerin hiçbirisinde yazım hatası yok. Buna rağmen ciddi sayıda veri birbirinin eşleniği. Hatta gerçek hayatta ISO kodları da işin içine girince durum iyice karışabiliyor. Benzer senaryo spor dallarının kısaltılmasında da karşımıza çıkmaktadır. NBA, NHL, NFL, MLB.
Domain values alanında bu varyasyonları girerek Set As Synonyms seçeneğini seçerek aslında tekilleştirme işlemini gerçekleştirebiliriz. Bu değerlerden herhangi birisi geldiğinde tek bir değer bize dönecektir.
Bir başka sorun ise kısaltmalar. Örneğin istanbul yerine IST yazılması birçok adres alanında karşımıza çıkmaktadır. Bununla ilgili kurallarımızı ise aşağıdaki gibi yapabiliriz.
Adres doğrulama gibi bir konu aslında sadece bizim değil birçok veri sahibinin sıkıntısı. Bu gibi durumlarda aslında mevcut çözümler üzerinden de işlem gerçekleştirebiliriz.
https://datamarket.azure.com üzerinde veri tedariği, veri doğrulama gibi birçok konuda kullanabileceğimiz bileşenler mevcut. Bunlardan kimisi ücretsiz kimisi ücretli fakat onlarda yapılan işlem sayısına göre genellikle ücretlendiriliyor. Burada hesabımıza eklemiş olduğumuz bileşenleri DQS üzerinde kullanabiliriz. Örneğin Mellisa Data nın yayınlamış olduğu address doğrulama (
http://datamarket.azure.com/dataset/melissadata/addresscheck) için datamarkette ürünü seçtikten sonra benim data market için varolan ID değerimi DQS te ilgili ekrana tanımlamam gerekmektedir.



Knowledge Base tanımlamalarımızı yapmış olduk bundan sonra aslında Finish diyerek yayına alabiliriz. Sonrasında ise elimizde bulunan kirli verilerin olduğu bir tablo ile knowledge base’imizi referans alarak test işlemi gerçekleştirebiliriz. Kullanacağımız veriler Excel dosyasında veya SQL Server’da bulunan bir tabloda bulunabilir. Burada ilgili alanların eşleştirmesini yaparak hangi verilerimiz doğru veya yanlış gelmiş görebiliriz. Ve sonuçlarını farklı bir alana (SQL Server, csv, excel) aktarabiliriz.


Öte yandan oluşturduğumuz knowledge base baz alınarak ssis te veri temizliği işlemi gerçekleştirebiliriz. Örnek olarak bir tane kirli verilerden oluşan bir excel dosyası hazırlayalım. Bunu SSIS projemizde dataflow kontrolunde tanımladıktan sonra DQS Cleansing kontrolu sürükleyelim. Data Quality Client üzerinde tanımladığımız knowledge base’lerden hangisini kullanacağını ve hangi alanların test edileceğini eşleştirdikten sonra bir conditional split ekleyelim projemize. Conditional Split kontrolumuzun expression alanı Record Status veritipinin alacağı verilere göre ayrılsın. (Correct yazanlar bir tarafa diğerleri bir tarafa gibi)
Böylelikle DQS üzerinden veri temizleme işlemlerimizi gerçekleştirebiliriz. Kirli verilerin olduğu satırlar farklı bir sürece sokularak veri tabanına temiz bir şekilde aktarılabilir.
Öte yandan DQS üzerinden
Matching Policy tanımlayabiliriz. Biraz önce bahsettiğimiz ülke örneğinde tüm isimler doğru ama farklı yazıma sahiptiler. Şehirleri düşündüğümüzde İstanbul doğru yazım tipi olabilir. Fakat uygulamalarımızda şehir seçimi dropdownlist kontrolu ile değil ucu açık textbox ile yapılıyorsa Istanbul, Istanbol, Istambul, Is tanbul gibi çok farklı şekilde yazılabilir. Bunların hepsi aslında belirli benzerlik algoritmaları eşliğinde aynı şehir. SSIS’te Fuzzy Lookup kontrolu ile bu benzerlikleri tespit edebilirsiniz. DQS üzerinde ise Matching Policy tanımlayarak benzerlik kıstaslarını oluşturabilir ve buna göre veri doğrulama işlemlerini yapabilirsiniz. Fakat SSIS ekranımıza baktığımızda sadece DQS Cleansing kontrolunun olduğunu Matching ile ilgili herhangi bir kontrol olmadığını göreceksiniz.
http://ssisdqsmatching.codeplex.com adresinde yer alan üçüncü parti kontrolu indirerek SSIS projelerinizde matching sürecini de kullanabilirsiniz