Microsoft DSO (Decision Support Objects) Kullanarak Microsoft Analysis Services (OLAP) Server'larına Bağlanmak
Microsoft SQL Server 2000 elinizdeki veriyi kullanarak veri ambarları oluşturabilmeniz için gerekli araçları Analysis Services bileşeni ile sağlamaktadır. Analysis Services Manager yönetim konsolunu kullanarak OnLine Analytical Processing (OLAP) küpleri oluşturabilirsiniz. Bu sayede elinizdeki verinin birbirleri ile ilişkilerini daha derinlemesine inceleyebilmek için elinizde zengin bir araç edinmiş olursunuz.Küp verilerinizi özellikle Microsoft Office Web Components gibi iş yerinizde Excel programınız içinde elinizin altındaki basit bir bileşeni kullanarak bu verilerden yararlanmak isteyen kullanıcılarınıza kolaylıkla sunabilirsiniz. Office Web Components benzeri bileşenler OLAP küpleri şeklinde oluşturduğunuz verilerinizi dinamik bir formatta kullanıcılara sunmanızı ve kullanıcıların raporları alabilecekleri formatı diledikleri gibi dinamik olarak hazırlayabilemelerine olanak sağlarlar. Bir bakıma kullanıcılar kendi raporlarını kendileri oluşturabilirler.
Microsoft Decision Support Objects (DSO) kütüphanesini kullanarak Microsoft SQL Server 2000 Analysis Services Manager kullanıcı arayüzü ile gerçekleştirebileceğiniz pek çok işlemi programatik olarak da gerçekleştirebilirsiniz. Bu yazıda Decision Support Objects (DSO) kullanarak bir Analysis Services sunucusuna (server) bağlanmaya ve bu sunucuda bulunan veritabanı (database) ve küpleri bir Windows Forms uygulaması içinde listelemeye çalışacağız.
İlk adım olarak Microsoft Visual Studio.NET 2003 ile OLAPWinForms adında bir Windows uygulaması oluşturdum.
2. adım DSO library'sini Windows Forms projesine referans olarak eklemek olacaktır. Bunun için Visual Studio.Net içinde proje üzerindeyken menüden "Project" ardından da "Add Reference..." seçimleri ile Decision Support Objects (DSO) library'sini ekleyeceğimiz diyalog ekranını açmanız gerekir. Ardından "Browse" düğmesi ile "\Program Files\Common Files\Microsoft Shared\DSO\" dizini altındaki msmdddo80.dll ismindeki .dll dosyasını seçerek bunu referans olarak projeye ekleyebilirsiniz. Veya "COM" tab'ı altından Microsoft Decision Support Objects component'ını bularak TypeLib Version değeri 5.1 olan bileşeni seçerek projeye referans olarak ekleyebilirsiniz.
Şimdi form üzerine bir textbox yerleştirerek bağlanacağımız sunucu adını form üzerinden alalım ve yine yerleştireceğimiz bir buton'un tetiklemesi ile bu Analysis Services sunucusuna aşağıdaki kod yardımı ile bağlanalım.
Public dsoServer As DSO.Server
Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
Dim strServerName As String
strServerName = txtServerName.Text
dsoServer = New DSO.Server
dsoServer.Connect(strServerName)
End Sub
Eğer girdiğiniz isimde bir Analysis Services sunucusu yoksa veya bu sunucuya bir connection açabilmek için gerekli olan yetkiye sahip değilseniz aşağıdaki hata iletisini alabilirsiniz.
An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in OLAPWinForms.exe
Additional information: Cannot open connection to Analysis server 'AnalysisServerName'.
Unable to connect to the Analysis server. The server name 'AnalysisServerName' was not found. Please verify that the name you entered is correct, and then try again
Eğer Analysis Services sunucusuna başarı ile bağlanabildiyseniz, şimdi DSO yani Decision Support Objects yardımı ile OLAP server hakkındaki bilgileri veya property'leri nasıl okuyabileceğimizi görelim.
Aşağıdaki kod ile bağlantıyı sağlayabilir ve DSO.Server objemizin Name ve Version property'lerini belirtildiği gibi okuyabiliriz.
Dim strServerName As String
strServerName = txtServerName.Text
dsoServer = New DSO.Server
dsoServer.Connect(strServerName)
txtAnalysisServicesInfo.Text &= "Name : " & dsoServer.Name & vbCrLf
txtAnalysisServicesInfo.Text &= "Version : " & dsoServer.Version & vbCrLf
Select Case dsoServer.ClassType
Case DSO.ClassTypes.clsServer ' 1
txtAnalysisServicesInfo.Text &= "Class : Server" & vbCrLf
Case DSO.ClassTypes.clsDatabase ' 2
txtAnalysisServicesInfo.Text &= "Class : Database" & vbCrLf
Case DSO.ClassTypes.clsCube ' 9
txtAnalysisServicesInfo.Text &= "Class : Cube" & vbCrLf
End Select
Yukarıdaki kodun çıktısı aşağıdaki gibi olacaktır.
DSO library 'si içinde pek çok enum tanımlı. ClassTypes da bunlardan bir tanesi. Yukarıdaki kodu incelerseniz dsoServer.ClassType ile aldığımız dsoServer objesinin ClassType değerini ClassTypes enum'ı içindeki değerler ile karşılaştırarak bu objenin sınıfını nasıl belirlediğimizi görebilirsiniz. Yukarıdaki kodda sadece bir kaç sınıf tipi yeralmıştır. Siz bunu genişletebilir ve tüm sınıf tiplerini kapsayabilirsiniz.
Tüm liste için projenizdeki Solution Explorer içinde yeralan References dizini altındaki DSO reference kaydını bularak bunun üzerinde sağ tıklama ile gelen menüde "View in Object Browser" seçimini yapabilirsiniz.
Object Browser tabı içinde örneğin OlapStorageModes enum değerine bakarsanız olapmodeAggsMolapIndex, olapmodeAggsRolap, olapmodeHybridIndex, olapmodeMolapIndex ve olapmodeRolap değerlerini barındırdığını görebilirsiniz.
Yukarıda yeralan koddaki ClassTypes örneğini bu şekilde diğer özellikler (property) için de geliştirebilirsiniz.
Şimdi formumuza bir comboBox kontrolü ekleyerek, Analysis Services sunucumuzdaki database isimlerini listeleyelim.
Dim strServerName As String
strServerName = txtServerName.Text
dsoServer = New DSO.Server
dsoServer.Connect(strServerName)
txtAnalysisServicesInfo.Text &= "Name : " & dsoServer.Name & vbCrLf
txtAnalysisServicesInfo.Text &= "Version : " & dsoServer.Version & vbCrLf
Select Case dsoServer.ClassType
Case DSO.ClassTypes.clsServer ' 1
txtAnalysisServicesInfo.Text &= "Class : Server" & vbCrLf
Case DSO.ClassTypes.clsDatabase ' 2
txtAnalysisServicesInfo.Text &= "Class : Database" & vbCrLf
Case DSO.ClassTypes.clsCube ' 9
txtAnalysisServicesInfo.Text &= "Class : Cube" & vbCrLf
End SelectDim dsoDb As DSO.MDStore
For Each dsoDb In dsoServer.MDStores
cbDataBaseList.Items.Add(dsoDb.Name)
Next
dsoServer objesinin MDStores kolleksiyonu database'lerden oluşmaktadır. MDStores aslında genel bir kolleksiyonu ifade etmekte. Analysis Services Server için Database 'leri barındırmakta, herhangi bir Database için küpleri içermektedir.
Koddan anlayacağınız gibi MDStores kolleksiyonu için For Each döngüsü içinde herbir DSo.MDStore objesi için dönerek (bu aşamada database oluyor), database adına ulaşabiliyoruz.
Yukarıdaki kod ile aşağıdaki gibi combobox'ınızı doldurabilirsiniz.
Şimdi formumuza bir de listbox kontrolü ekleyerek combobox'tan seçeceğimiz database'de yeralan küp (olap cubes) isimlerini bu listbox içinde görüntüleyelim.
Yine Database isimlerini listelemek için yazdığımız kod gibi database içindeki küp isimlerini listelemek için de benzer kodu kullanıyoruz.
Dim dsoCube As DSO.MDStore
For Each dsoCube In dsoDb.MDStores
listCubes.Items.Add(dsoCube.Name)
Next
Ancak buradaki dsoDB objesi bu kez bir Analysis Services database 'ini işaret etmektedir. ComboBox 'ımızın SelectedIndexChanged event'imizi aşağıdaki şekilde oluşturalım.
Private Sub cbDataBaseList_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbDataBaseList.SelectedIndexChanged
listCubes.Items.Clear()
Dim strDataBaseName As String
strDataBaseName = cbDataBaseList.SelectedItem
Dim dsoDb As DSO.MDStore
If dsoServer.MDStores.Find(strDataBaseName) Then
dsoDb = dsoServer.MDStores.Item(strDataBaseName)
Dim dsoCube As DSO.MDStore
For Each dsoCube In dsoDb.MDStores
listCubes.Items.Add(dsoCube.Name)
Next
End If
End Sub
Bu kodda dsoServer.MDStores.Find() metodu ile bir database'in varlığı kontrol edilmekte ve ardından dsoServer.MDStores.Item() ile de o database bir DSO.MDStore objesine atanmaktadır.
Yine For Each döngüsü ile database MDStores kolleksiyonu içinde yeralan tüm küpler listbox içine kolaylıkla listelenebilir.
Bu yazıda DSO (Decision Support Objects) library'sini kullanarak bir Microsoft Analysis Services (OLAP) Server'ına bağlanmayı ve database'ler ile bu database'ler içinde yeralan cube'leri listelemeyi gördük. Küp oluşturmak, silmek, process etmek gibi işlemleri de başka bir yazıda inceleyeceğiz.
Bu yazının Visual Studio.Net 2003 ile VB.NET kullanılarak geliştirilmiş örnek uygulamasını /downloads/OLAPWinForms.zip adresinden download edebilirsiniz.