Sql Server Analysis Services MDX

by Erdem Zengin Sat, August 21 2010 06:08

MDX Analysis Services projelerinde kullanılan programlama dilidir. Küplerimizi oluşturduğumuzda bir çok nesne yaratarak daha gelişmiş bir analiz yapabilmemizi sağlar. Bu nesneler member, scope ve set'lerdir. Member modeldeki hedef değerleri ve boyutlar kullanılarak hesaplamalar yapar ve geriye yeni bir hedef değer biçimi döndermekte kullanılır. Bir örnek ile açıklayalım;

create member currentcube.[measures].[Sales Target Variance] as
[measures].[sales amount]-[measures].[sales target],
visible = 1,
non_empty_behavior = {[measures].[sales amount],[measures].[sales target]},
associated_measure_group='sales',
fotmat_string='currency';

Burada create, currentcube, as, non_empty_behavior, format_string, visible, associated_measure_group gibi kod parçaları mdx'e özel betimlerdir. Burada kod etkin olan küpte measures kısmında Sales Target Variance adında yeni bir üye yaratmakta ve bu üyeye sales amount'tan sales target'in çıkarıldığında elde edilen değeri atamaktadır. non_empty_behavior ise hesaplamada kullanılan hedef değerlerinden boş olanların hangilerinin yoksayılacağını belirtir. Örneğin satış hedef değerleri belirlenmemiş bir zaman diliminde satış gerçekleşmişse sales target kısmını 0 olarak varsayacaktır.

Aşağıdaki örnekte ise scope nesnesi için bir örnek verilmekte. Analysis Server'da küpleri oluştururken hedef değerleriyle boyutlar arasında kurulacak ilişkileri düzgün kurmalıyız. Örneğin hedef verilerinin detayı sadece çeyrek yıllara kadar tutulduğunu düşünürsek, örneğin her satıcıya 3 aylık satış hedefi veriliyor olsun. Bu durumda küpümüzde her bir günü satış hedeflerinin bulunduğu tabloyla eşleştiremeyiz. Bu sorun küp içerisindeki dimension sekmesinden çözülebilir fakat raporlamaya geldiğinde 3 aylık dilimlerin içindeki değerlere bakmak istersek sürekli aynı rakamı tekrarlayacaktır bunu engellemek için aşağıdaki gibi bir scope tanımlayabiliriz. Bu sales target hedef değerlerinin herhangi bir time hiyerarşisinde month seviyesinde değerlendirilmek istenirse bu son quarter değerini 3 e bölerek gösterecektir.

scope ([measures].[sales target],[time].[time hierarchy].[month].Members);
this = [time].[time hierarchy].CurrentMember /3;
end scope; 

Tags: , , ,

Sql Server

Analysis Services - Boyutlarda Dil Desteği (Dimension Translation)

by Erdem Zengin Thu, August 12 2010 14:39

 
 Yukarıda görüldüğü üzere boyutlarımız için dil seçenekleri ve çevirilerini tanımlayabiliriz. Sol tarafta Default Language kısmında tasarımı yaparken kullandığımız dil bulunmakta sağ tarafta ise yeni ekleyeceğimiz çevirileri bulundurabiliyoruz. Yeni bir çeviri eklemek için New Translation düğmesine tıklayarak Microsoft'un desteklediği dillerin bir listesini içeren dialog kutusu karşımıza çıkacaktır. Biz bu dialogdan gelen listede Fransızcayı seçeceğiz çünki veritabanımızda DimTime kolonunda Fransızca ay isimlerini tutan bir kolonumuz bulunmakta.More...

Tags: ,

Sql Server

Analysis Services - Küp Boyutları Oluşturma (Cube Dimensions)

by Erdem Zengin Thu, August 12 2010 07:41

Aşağıdaki resimde görebileceğimiz gibi Business Intelligence Development Studio'da bir Analysis Services projesi açar isek Solution Explorer'da yaratabileceğimiz nesneler belirmekte. Bunlardan dirincisi olan Data Sources sekmesinde kullanmak istediğimiz veri kaynaklarını belirleyebiliriz. Veri kaynağı olarak kullanacağımız veri tabanları genellikle OLTP sisteminden elde edilerek düzenlenen veri ambarları olacaktır. OLTP kaynaklarına göre veri ambarları daha az sıklıkla güncellenen fakat verinin daha kolay işlenmesi ve analizi açısından düşünülerek tasarlanmış veri tabanlarıdır. Bu örnekte Microsoft'un örnek veri ambarı olan AdventureWorksDW kullanılacak.

Data Source View olarak tanımladığımız alanda ise, bayi satışlarının bulunduğu ,DimProductCategory ve DimProductSubCategory tabloları tanımdan hariç tutulmak üzere, FactResellerSales tablosu ve buna ilişkili olan diğer tabloları bir yıldız şeması (Star Schema) oluşturacak şekilde View nesnemize ekledik. Birbirlerine zincirleme bir şekilde bağlı olan DimProduct, DimProductSubCategory ve DimProductCategory tabloları arasındaki ilişki ise literatürde snowflake olan isimlendirilmektedir.

Analysis Services Star Schema

More...

Tags: , ,

Sql Server

Macar Algoritması ( Hungarian Algorithm )

by Erdem Zengin Tue, August 03 2010 11:11

Hungarian Algorithm Operation Research Modelİşçi - Makina atama problemi olarak bilinen model solda bir yöneylem modeli olarak ifade edilmektedir. Modeli kısa bir şekilde açıklayalım;

i: işleri indexlemek için kullanılır
j: işçileri indexlemek için kullanılır
cij: j. işçinin i. iş ile alakalı katsayısı
xij: j. işçinin i. işe atanıp atanmadığını belirten tamsayı değişkenidir

Birinci kısıtta bir işe sadece bir işçi atanabileceğini belirtir. İkinci kısıt ise bir işçinin sadece bir işe atanabileceğini belirtir. Amaç fonksiyonu ise katsayı ile seçim değişkenlerinin çarpım toplamlarının en küçüklenmesidir. Bu denklemler kümesini Lingo, Lindo vb. programlarda yazdığımızda en küçük değeri dönderen kombinasyonu bize dönderecektir. Bu türde problemleri çözmekte kullanılan en bilindik algoritma Macar Algoritması'dır (Hungarian Algorithm). Bu algoritmayı C# ortamına aktardığımızda aşağıdaki gibi bir yapı elde ediyoruz.

Programda verileri tutabilmek için tutabileceğimiz veriler için sınıflar görülüyor. Programda HungarianAlgorithm sınıfında ProgramData özelliğinde program verileri tutulmakta. Yapı itibariyle Processor sınıfı bir işin ismini atanıp atanmadığını yada tabloda üzeri çizilip çizilmediği verilerini tutar. Aynı yapı Process sınıfı içinde geçerli olup, bu sınıflarda aynı anda iki adet aynı isme sahip Process yada Processor değeri girilememektedir. Cell sınıfı ise problemde belirli bir satır ver sütuna denk gelen hücrenin özelliklerini tutmaktadır. Hangi Process yada Processor'a karşılık geldiğini değer olarak ne aldığını (cij) ve işin, işçiye atanıp atanmadığı verilerini tutar. More...

Tags: , ,

Algoritma

Operator Overloading

by Erdem Zengin Wed, July 28 2010 01:12

Bazı durumlarda C#'ın bize sağladığı operatörleri direkt olarak kullanmak işimize yaramayabilir. Örneğin int, decimal, double türündeki değerlerde + operatörü düzgün çalışsa bile karmaşık sayıları kullandığımız bir class'ta bunlar işimize yaramayacaktır. Karmaşık sayılarda toplama işlemi reel ve sanal kısımların ayrı ayrı toplanmasıyla elde edilmektedir. MSDN'den uyarladığım kod örneği aşağıdaki gibidir. Bu şekilde operatör aşırı yüklendiği zaman herhangi bir yerde KarmasikSayi sınıfından türetilmiş değişkenler toplandığında yapılacak işlem belirlediğimiz gibi olacaktır.

public class KarmasikSayi
{
    public int Reel;
    public int Sanal;
	public KarmasikSayi(int _reel,int _sanal)
	{
        this.Reel = _reel;
        this.Sanal = _sanal;
	}
    //BU BÖLÜMDE OPERATÖRÜ OVERLOAD EDEREK İŞLEVİNİ DEĞİŞTİRİYORUZ
    public static KarmasikSayi operator +(KarmasikSayi k1, KarmasikSayi k2)
    {
        return new KarmasikSayi(k1.Reel + k2.Reel, k1.Sanal + k2.Sanal);
    }
    public override string ToString()
    {
        return string.Format("{0} + {1}i", this.Reel, this.Sanal);
    }
}

Tags: ,

C#.Net

Albert Camus - Düşüş

by Erdem Zengin Tue, July 27 2010 01:37

Albert CamusAlbert Camus Düşüş'ünde çapkın bir avukatın hayat hikayesini, kendi ağzından itiraflar şeklinde anlatmakta. Bütün başarıları elde etmiş, hayatının bütün yönüyle mükemmel olduğuna inanmış bir avukat. Yıllar geçtikçe başarılarını, ahlak ve erdem anlayışını, insanlarla ilişkilerini sorgular. Başarılarının aslında hiç var olmadığını, kendince yarattığı ahlak kalıplarının aslında bencilliğini doyurmanın bir yolu olduğunu keşfeder. More...

Tags: ,

Edebiyat

Ado.Net Transaction

by Erdem Zengin Tue, July 27 2010 01:22

Database Transaction

Transaction nesnesi veritabanında yaptığımız sorguların başarılı bir şekilde sonuçlanıp sonuçlanmadığını test etmek için kullanılır. Özellikle bir biriyle ilişkili veri tabanlarında yaptığımız değişikliklerde sorgunun başarıyla sonuçlanması büyük önem taşımaktadır. Mesela yaptıracağımız bir havale işleminde önce havale yapacak olan hesaptan miktarı düşürmemiz sonra yapılan hesapta ise arttırmamız gerekecektir. Miktar düşürüldükten sonra, diğer hesaba aktarım gerçekleşirken bir sorunla karşılaşabiliriz. Eğer bu noktada Transaction nesnesini kullanmaz isek, işlemin geri döndürülmesi çok zor olacaktır.

Yaptığımız Sql sorgularda transaction kullanır iken hataları yakalamak ve Transaction nesnesini doğru şekilde kullanabilmek amacıyla try - catct - finally bloklarılarını kullanmalıyız. Aksi taktirde sorguda meydana gelen hataları yakalama şansımız olmayacaktır. try bloğunda ExecuteNonQuery işlemini gerçekleştirdikten sonra transaction nesnesinin Commit() fonksiyonuyla yaptığımız değişiklikleri onaylayabilir, catch bloğunda ise hata mesajını vererek Rollback() fonksiyonuyla hata anına kadar gerçekleştirdiğimiz değişiklikleri iptal edebiliriz. More...

Tags: ,

Ado.Net

Hachi : A Dog's Tale

by Erdem Zengin Fri, July 23 2010 05:35

Richard Gere ve Joan Allen'in başrolleri paylaştığı Hachi : A Dog's Tale (2009), bir kolej profesörü ve istasyonda bulduğu köpeğin gerçek hikayesini anlatmakta. Film Japonya'dan gönderilen Akita cinsi yavru köpeğin taşıma sırasında tren istasyonunda kaybedilmesi ve Parker'ın (Richard Gere) köpeği bulmasıyla başlar. İlk bir kaç gün "sadece sahibini bulana kadar bizim evde kalacak" desede sahibi hiçbir zaman bulunamaz, Parker ve ailesi de köpeğe iyice alışmıştır. Hachi, Parker hergün işe giderken yanında gider uğurlar ve dönüşte karşılar. Fakat bir gün gitmez ve Parker'ın da gitmesini istemez. O gün Parker kalp krizi geçirir ve geri dönmez.

Hachiko 1924'te Hidesaburō Ueno tarafından alınmış. Hachiko profesörü her gün işe giderken Shibuya istasyonuna kadar uğurlamış ve geldiğinde de karşılamış. 1925'e kadar bir yıl süren bu rutinleri taki profesör ölene kadar devam etmiş. Profesör öldükten sonra ona bakmak isteyenler olsa bile sürekli kaçarak yaşamının geri kalan dokuz senesini Shibuyona istasyunda Hidesaburō Ueno'yu bekleyerek geçirmiş. Bu süre zarfında tren istasyonun devamlı müşterileri ve çevre halkı tarafından bakılmış. Öldükten sonra adına yaptırılan heykel gerçek sevgi ve sadakat'i temsilen Shibuya istasyonu önünde hala sahibini beklemekte.

Tags:

Sinema

The Fountain ( Kaynak )

by Erdem Zengin Thu, July 22 2010 08:50

The fountain (Kaynak)Üç farklı zamandan üç farklı hikeye Hugh Jackman ve Rachel Weisz'in başrollerini paylaştığı, en çok sevdiğim filmlerden birisi. Ortaçağ İspanya'sında kral ve kraliçe, günümüzde bir doktor ve eşi, gelecek zamanda ise bir uzay gezgini; üç farklı hikaye kahramanların ölümsüzlüğü bulma çabasında paralelleşiyor. Filmde ölüm, hayat, aşk, tinsellik ve hayatımızın narinliği çok güzel bir biçimde işlenmiş.

Film uzayda başlamakta. Hugh Jackman bir ağaçla birlikte balon içerisinde, patladıklarında yeni yıldızların meydana gelmesi ile aynı olayın insanlar içinde gerçekleştiği Maya inancıyla, nebulaya doğru ilerlemektedir.

Orta çağ İspanya'sı ise Engizisyon tarafından tamamen istila edilmiştir. Kraliçenin pek fazla şansı kalmamış, köşeye sıkıştırılmıştır. Hem ülkesini hem de canını kaybedecekken,  İspanya uğruna hayatını dahi feda edebilecek şövalyesini (Hugh Jackman) Yeni İspanya'ya (Orta Amerika) Tanrı'nın insanları cezalandırarak sakladığı ölümsüzlüğün sırrı veren hayat ağacını bulmaya gönderir. Artık İspanya'nın ve kraliçenin kaderi bu ağacın özüne bağlıdır. Filmin bu zamandaki bölümleri Tommy Lizi'nin kitabını okurken alıntılar şeklinde görüntüleniyor.

Şimdiki zamanda ise Tommy beyninde timör olan karısı lizi için hayatının büyük bir bölümünü laboratuvarda maymunlar üzerinde çare bulmaya çalışarak geçirmekte vakit sürekli daralmaktadır. Bu çalışmaları sırasında ise Orta Amerika'da bulunan bir ağaçtan formül geliştirir. Ama deneyler sonuç verdiğinde herşey için çok geçtir. Karısından geriye kalan sadece tamamlaması gereken bir kitaptır (The Fountain). Ölmeden önce kitabı tamamlaması için Tommy'ye verir.

The Fountain ( Kaynak )Filmi sevmemi sağlayan noktalar, birinci olarak kurgusu çok güzel işlenmiş. Kabul etmek gerekir ki üç farklı zamanda gerçekleşen paralel olayları izleyiciye aktarmak kolay birşey değil. Zamanlar okadar birbirlerine bağlıki aslında dur şurasından anlatmaya başlayım şöyle de devam etsin diyemiyorum bile. İkinci bir konu ise filmdeki oyuncuların acılarını, tutkularını, teslim oluşlarını çok güzel bir şekilde aktarmaları. Ve bir filmde en çok önem verdiğim noktalardan birisi film müzikleri. Clint Mansell bu film için muhteşem biri iş çıkarmış diyebilirim. İzlemenizi şiddetle tavsiye ediyorum :)

Tags:

Sinema

Ado.Net DbParameter Nesnesi

by Erdem Zengin Wed, July 21 2010 15:06

Ado.Net parametre nesnelerinin kullanılması yazılımın güvenliği ve programlama kolaylığı nedeniyle önemlidir. DbParameter nesnesiyle DbCommand nesnesi içersinde belirlediğimiz parametrelere değerleri parametrik olarak atadığımızda daha sistemli ve güvenilir bir sorgu çalıştırmış oluruz. Sql Injection gibi zararlı programlamaya açık olabilecek eski sisteme kısa bir göz gezdirirsek durum sorgulamalar şu şekildeydi:

SqlCommand cmd = new SqlCommand("Select Username,Password from Users where Username=" + txtUser.Text + "&" + "Password=" + txtPassword.Text);

 Burada sql cümlesine verilecek olan değerler direkt string formatında sorguya dahil ediliyordu. Sorgulanacak alan sayısı arttıkça bunun ne kadar zor olduğunu tahmin edebilirsiniz. Aynı zamanda TextBox içine yazılmış herhangi bir satırı sorgu içerisine dahil etmektedir. Bu yüzden DbParameter olarak adlandırılan yararlı bir nesnemiz var.More...

Tags: ,

Ado.Net