SQL Server administration and T-SQL development, Web Programming with ASP.NET, HTML5 and Javascript, Windows Phone 8 app development, SAP Smartforms and ABAP Programming, Windows 7, Visual Studio and MS Office software
ASP.NET, VB.NET, Microsoft .NET Framework, Microsoft Visual Studio, Windows Forms, Controls and more Tutorials and Articles for Programmers

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.

 Decision Support Object DSO

Ş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.

Analysis Services

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 Select

Dim 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.

Analysis Services DataBase List

Ş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.

OLAP Cubes List

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.



Visual Studio


Copyright © 2004 - 2021 Eralper YILMAZ. All rights reserved.