Ağu
14
2011

SQL Server Analiz-Entegrasyon Servis Kardeşliği (MDX-SQL)

Merhaba Arkadaşlar.

Konumuz SQL Server da Analiz Servis üzerinde bulunan küplerimizden SQL aracılığı ile veri alarak bu veriyi tablo üzerine almak olacak.

Bu işlemleri yapabilmemiz için SQL Server Analiz Servisi ve üzerinde çalışır halde bulunan bir küp ile bir entegrasyon paketine ihtiyaç duyacağız. Küpdeki verilerimizin sql üzerine alınması için ise OPENQUERY komutunu kullanacağız.

Bu komutu kullanmak amacı ile öncelikli olarak sunucu üzerinde Bağlı server (Linked Server) tanımlaması yapacağız. Bu şekilde OPENQUERY komutu içerisinde bağlı sunucumuzu göstererek MDX sorgu işletimi yapabileceğiz. Bağlı sunucuyu göstermek için SQL Server Yönetim Studyomuzu açıp bağlanıyoruz.

Burada sağ tuş ile “New Linked Server..” diyoruz ve aşağıdaki gibi pencere karşımıza çıkıyor.

Şimdi ise bilgilerimizi dolduralım ;

  • Provider : Microsoft OLEDB Provider for Analysis Services 10.0
  • Product Name : LINKED
  • Data Source : localhost
  • Catalog : MyCompanySA

Catalog kısmını doldururken Analysis servisiniz üzerinde bağlanmak istediğiniz veritabanının ismini yazıyorsunuz. Ben MyCompanySA dedim.(Siz kendi veritabanı ismini yazarsınız). Onayladıktan sonra Sunucu Objeleri içinde Bağlı sunucular (Server Objects->Linked Server) kısmında “LINKED” ismi ile bağlı sunucumuzun gelmesini bekliyoruz.

Şimdi ise Entegrasyon servisimiz ile Analysis Servisimize bağlanmak amacıyla Visual Studio Kabuk(Shell) imizi açalım ve bir entegrasyon projesi oluşturalım. Bu projeyi oluşturmak için MSSQL Döngüler yazısından faydalanabilirsiniz.

Projemizi açtıktan sonra Araç Kutumuz(Toolbox) dan Veri Akış Görevi(Data Flow Task) sürükleyip bırakıyoruz.

Resimde görüldüğü gibi Veri Akış sekmesine girip Araç Kutumuzdan OLEDB Source objesini sürükleyip bırakıyoruz. Sağ tuş ile düzenleme yapalım.


SELECT TABLO.*  FROM OPENQUERY (LINKED,'Select
 [Measures].[Forecast Gsv]  ON COLUMNS,
 ([t Fny Forecast].[Yil].Children as
 yil,[t Fny Forecast].[Donem].Children as donem)
 ON ROWS FROM [Forecast]') AS TABLO

Şimdi ise “OPENQUERY” komutumuzu kullanarak LINKED bağlı sunucusu ile verilerimizi OLAP Küpünden getirebiliriz. Yukarda tırnak işareti içinde MDX sorgu komutumuzu yazıyoruz bu şekilde MDX sorgusundan geri döndürülen veriyi yakalayabiliyoruz. Önizleme tuşu ile gelen veriyi görebilirsiniz.

Küpümüzdeki veriye erişmek için Script Component bileşenini kullanıyor olacağız. Bu bileşeni sürükleyip bırakdığımızda Dönüştürme yani “Transformation” seçiyoruz. Bileşeninimizi sağ tuş ile düzenliyoruz.

Bu kısımda “[t fny forecast]” kırılımlamızdan gelen Yıl ve Donem bilgilerini girdi(input) kısmından okuyup çıktı(output) kısmından hedef veri görevimize vereceğiz. Bu amaçla standart input0 ve output0 elemanlarımızı kullanacağız.


Şimdi ise aynı ekranda Girdiler ve Çıktılar(Inputs and Outputs) kısmına geliyoruz burada Output0 kısmına Kolon Ekle(Add Column) tuşu ile iki kolon ekleyelim.

İsimlendirmelerini olarak “Yıl” ve “Donem” yapalım ve “String” veritipini “CodePage” olarak “1252″ seçelim (veritabanınızın SQL_Latin1_General_CP1_CI_AS olduğunu kabul ediyorum duruma göre codepage’i değiştirebilirsiniz). Uzunluk (Length) kısmını 50 olarak bıraktık isterseniz kısabilirsiniz.

Şimdi ise ağımızdan bize blob tipinde gelen veriyi ASCII tipine çevireceğiz. By amaçla Script sekmesine gelip “Edit Script” tuşuna basalım. Burada karşımıza mini bir Visual Studio ekranı çıkacak.

        Byte[] row = Row.tFnyForecastDonemDonemMEMBERCAPTION.GetBlobData(0, Convert.ToInt32(Row.tFnyForecastDonemDonemMEMBERCAPTION.Length));

        Row.Donem = System.Text.Encoding.ASCII.GetString(row);

        Byte[] row2 = Row.tFnyForecastYilYilMEMBERCAPTION.GetBlobData(0, Convert.ToInt32(Row.tFnyForecastYilYilMEMBERCAPTION.Length));

        Row.Yil= System.Text.Encoding.ASCII.GetString(row2);

Şimdi ise bağlantı kurduğumuz veritabanında veriyi koyacağımız tabloyu oluşturuyoruz.


SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[t_fny_forecast_GSV](
	[Yil] [varchar](50) NULL,
	[Donem] [varchar](50) NULL,
	[GSV] [decimal](18, 2) NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

Son olarak hedef veri görevimize gelip yukarda oluşturduğumuz tabloyu seçerek kolon eşleme işlemlerimizi yapıyoruz.

Bağlantı Yöneticisi (Connection Manager) dan oluşturduğumuz tabloyu seçtikten sonra Output0 dan Yil,Donem bilgilerini eşleştiriyoruz. GSV verimiz decimal olduğu için direk aktardık.

Veri akış görevimizi çalıştırdığımızda verinin tabloya aktığını göreceğiz.

Herkese iyi çalışmalar.

Yorum yapabilirsiniz..

Yazar : Burak Tunali

ODTÜ Bilgisayar ve Öğretim Teknolojileri mezunu olan yazar Bilgisayar Mühendisliğinde Yüksek Lisans yapmakta olup Veritabanı yönetim ve geliştirme alanında çalışmaktadır. Ayrıca Java SE,EE,ME ve C# ve Asp.Net teknolojilerine vakıfıyeti bulunmaktadır.

En son haber ve ücretsiz eğitimlere ulaşmak için üye olabilirsiniz