Power Map ile Custom Map Yapmak

SQL Server 2012′ nin çıkışıyla birlikte iş zekası tarafında Self-Service BI vurgusu ön plandaydı. Bunu takip eden süreçte Power BI eklentileri hayatımıza girdi ve son kullanıcıların iş zekası alt ve üst yapılarını kurgulayan geliştiricileri bekleme zorunluluğu ortadan tamamen kalkmış oldu. Araç setinin özellikleri gün geçtikçe artmaya devam ediyor. Son yapılan güncellemelerden biride Power Map üzerinde Custom Map oluşturabiliyor olmak. Bu yeni özellikle birlikte 3 boyutlu analizlerde dünya haritası yerine kendi seçtiğiniz bir resim dosyasını harita olarak kullanabiliyor olmanız.

Nasıl Çalışır?

Bildiğiniz gibi Power Map ve diğer bilinen geospatial haritalama araçları latitude, longitude ya da Country, Region gibi standart lokasyon koordinatlarını kullanır.

Power Map içerisindeki Custom Map ise iki boyutlu X ve Y koordinat sistemini kullanır. Harita üzerinde gösterilmek istenilen veri, resimdeki ilgili “noktalarla” ilişkilendirilerek harita üzerinde farklı görseller oluşturulabilir.

Mesela bir alış veriş merkezine gelen ziyaretçilerin ziyaretleri boyunca gezdikleri dükkanların verisine sahipsiniz. Alış veriş merkezinizin krokisini harita olarak kullanarak en çok ziyaret edilen vitrinleri/dükkanları görsel bir şekilde raporlayabilirsiniz. Bunun için resim üzerindeki her bir reyona karşılık gelen yaklaşık X ve Y koordinatlarını veri içerisine eklemeniz gerekecek. Resim üzerindeki koordinat noktalarını gösteren editörler kullanabilirsiniz. Ben aşağıdaki örneği Paint kullanarak oluşturdum 🙂

Nasıl Yapılır?

Özgün bir örnek oluşturmak adına internet üzerinden yaptığım kısa bir araştırma ile İstanbul’ daki raylı hatların yıllık olarak taşıdığı yolcu sayılarına ulaştım. Bu sayıları random olarak değiştirdim ve kabaca M2 hattındaki duraklara uyarladım.

Data Set

Bir sonraki adımda Custom Map olarak kullanacağım resimdeki X ve Y koordinatlarını alacağım. Power BI Custom Map‘ in bir diğer özelliğide pixelleri koordinat sisteminde kullanabiliyor olması. Bu özelliği kullanarak metro duraklarının pixel değerlerini koordinat sisteminde kullanabilir olmamız.

Coordinates

Yukarıdaki excelde gördüğünüz formata Power BI‘ daki Power Query eklentisini kullanarak Tarih (Value.FromText fonksiyonunu kullanarak) kolonu ekliyoruz. Sonrasında tabloyu pivot yaparak aşağıdaki görüntüyü elde ediyoruz.

Custom Map Format

Bir sonraki adımda Power Map eklentisini çalıştırıyoruz ve New Scene altından New Custom Map seçeneğini seçiyoruz. Karşımıza Custom Map Options penceresi çıkıyor. Custom Map’ i isimlendirdikten sonra, harita olarak kullanacağımız resmi ekliyoruz. Veri içerisine koyduğumuz X ve Y koordinat kolonlarının temelinde pixel bilgileri olduğu için Pixel Space seçeneğini seçiyoruz ve Done diyerek kapatıyoruz.

Custom Map Options

Karşımıza harita üzerindeki coğrafi alanları (bu örnek için X ve Y koordinatlarıdır) seçeceğimiz panel çıkıyor. Aşağıdaki gibi uygun olan seçenekleri seçerek Next diyoruz.

Layer

Sonraki adımda yolcu bilgilerini de ekleyerek istediğim raporları Power Map üzerinde dünya haritasında çalışır gibi oluşturuyorum. Benim oluşturduğum sahnelere ait videoyu aşağıda sizlerle paylaşıyorum.

Power BI içinde yayınlandı | , , , , ile etiketlendi | 1 Yorum

Integration Services Paketlerini 2012′ ye Güncelleme

Geçmiş yıllarda SSIS 2008 ile geliştirdiğiniz projelerinizi/aktarım paketlerinizi SSIS 2012′ ye güncellemek isteyebilirsiniz. Özellikle 2008 R2′ den 2012′ ye geçişle birlikte Integration Services adına gelen bir çok yenilikten faydalanmayı isteyebilirsiniz. Eğer paketlerinizi güncelleme sebebiniz server’ ların versiyonlarının güncellenmesi dışında bir gereklilikse büyük ihtimalle Project Deployment Model’ e geçiş yaparak bu yeniliklerden faydalanmak olacaktır. Project Deployment Model’ de SSIS Catalog (CLR Entegrasyonu gerektirir) ile projelerinizi SQL Server 2012 Instance’ ı üzerinden rahatlıkla yönetebilir, hiyerarşik klasör yapısı ile yetkilendirerek Catalog altındaki projelerinizi farklı seviyelerde ve güvenli bir şekilde saklayabilirsiniz. Bunun yanı sıra kendi içerisinde Built-in aktarım dashboard’ ları ile anlık ya da geçmiş aktarımlarınıza dair bilgilere ulaşarak performans ve hata analizleri yapabilir, Parametreleri ve Enviroment Variable’ ları kullanarak farklı ortamlar için paketlerinizi kolaylıkla çalıştırabilirsiniz. SQL Server 2012 ile gelen bu yenilikler içinde benim favorim, her ne kadar önemsiz görünsede, Undo (Ctrl + Z) ve Redo (Ctrl + Y) özelliklerinin nihayet desteklenir olması diyebilirim.

Image

Paketlerinizi güncellemek için hem SQL Server Data Tools kullanarak File–>Open–>Project/Solution diyebilir ya da Windows Explorer kullanarak Solution dosyasını (*.sln) açabilirsiniz.

Image

Bu işlemi yaptığınızda karşınıza Conversion Wizard gelecektir. Next diyerek devam edin.

Image

Ardından gelen ekranda SSIS sizi uyaracak ve yaptığınız işlemin tek yönlü bir güncelleme olduğunu belirtecektir (Sadece SSDT 2012′ de bunu belirtiyor). Burada ilk akla gelen soru şu; Upgrade yapabildiğimiz gibi Downgrade de yapabiliyor muyuz? Hayır. O yüzden yedek almış olmamız daha da önemli hale geliyor. Bir başka merak konusu; SSIS 2012′ ye aktarım yaptıktan sonra Package Deployment Model’ i kullanmaya devam edilebilir mi? Evet. SSIS 2012, SSIS 2008′ den upgrade ettiğiniz projelerinizi backwards compatibility adına Package Deployment Model’ le çalışabilmeleri için destekler. Fakat SSIS Catalog, proje seviyesinde Connection Manager ve Parametre tanımlamak gibi özelliklerden faydalanamazsınız. 

Image

Bu ekranın ardından Conversion/Migration’ ı tamamlıyoruz. İsteyenler Conversion Report’ a bakarak taşıma işlemi sırasındaki sorunları görüntüleyebilirler.

Image

Conversion/Migration report’ un hemen ardından SSIS Package Upgrade Wizard başlar. Aşağıdaki gibi paketlerinizi her hangi bir zamanda Upgrade etmek için Project altından Upgrade All Packages seçeneğini de seçebilirsiniz.

Image

Ardından gelen ekrandan hangi paketleri Upgrade edeceğimizi belirtiyoruz. Bu paketler için belirttiğiniz şifreler varsa bunları yazmayı unutmayın. Yoksa Upgrade işlemi sırasında paketler hata alacaktır.

Image

Bundan sonraki adımda upgrade işlemi yapılırken wizard’ ın uygulayacağı seçenekleri belirtiyoruz.

Upgrade connection strings to use new provider names: Bu bölümde Connection String’ leri upgrade ederken dikkatli olmak gerekiyor. Eğer projede bütün paketleri upgrade etmeyecekseniz connection stringleri de upgrade etmeyin. Upgrade ederseniz eski paketlerinizi çalıştırdığınızda hata alırsınız. Bir başka soru işareti; paketleriniz içinde 2012′ den eski veri tabanlarına (Microsoft) bağlanıyor, veri yazıyor olabilirsiniz. Bunların nasıl çalışacağı konusunda tedirgin olmanıza gerek yok. SSIS Backwards Compatible olduğundan Provider’ ları upgrade ettiğinizde bir problem olmayacaktır. (SQLNCLI10.1 –> SQLNCLI11 ya da MSOLAP.4 –> MSOLAP.5)

Validate upgraded packages: Paket upgrade edildikten sonra Validation yapılır. Eğer validation başarılı olmazsa paket kayıt edilmez.

Create new package ID: Eğer bu seçeneği seçerseniz upgrade işlemi sırasında paketin GUID’ ı yeniden oluşturulur. Paketler içerisinde bu GUID’ ları kullandığınız bir işlem, kendi kendini raporlayan bir mekanizmanız varsa bu seçeneği işaretlemeden geçin. Yeniden oluşturulan GUID’ lar eskilerinden farklı olacağından problem oluşturabilirler.

Continue upgrade process when a package upgrade fails: Upgrade işleminde paketler tek teker upgrade edilir. Bu sırada bir paket hata verirse upgrade işleminin tamamı durur. Tek seferde olabildiğince paket upgrade etmek istiyorsanız bu seçeneği işaretleyebilirsiniz. Daha sonra hata veren paketler için oluşturulan raporu inceleyerek hataları çözebilirsiniz.

Ignore Configurations: Paketleriniz içerisinde tanımladığınız configuration’ lar yerine Environment Variable’ lar kullanacaksanız bunları Ignore edin. Fakat yine de bu configuration’ ları kullanacaksanız buradaki check işaretini kaldırmayı unutmayın.

Image

Daha sonra Next diyerek upgrade işlemini başlatıyoruz. İşlem tamamlanınca duruma göre karşımıza Success ya da Fail ekranı çıkıyor.Burada oluşabilecek hatalar genellikle Password ve Script Task hataları oluyor. Script Task hatalarını düzeltmek için kodlarınızda küçük değişiklikler yapmanız gerekebilir. Zaman zaman Script Task’ ler içerisinde kullanılan “özel” kodlar problem teşkil edebiliyor.

Image

Paketlerinizi güncellediniz fakat Project Deployment Model’ e geçmek istiyorsunuz. Bunun için Proje adına sağ tıklayarak Convert to Project Deployment Model diyoruz (Aynı işlemi Project sekmesi altından da yapabilirsiniz). Karşımıza Integration Services Project Conversion Wizard çıkıyor.

Image

Next diyerek yedi adımda tamamlanacak dönüştürme işlemine başlıyoruz. Karşımıza çıkan ekranda dönüştüreceğimiz paketleri belirtiyoruz ve Next diyoruz.

Image

Sonraki adımda Proje adını ve Protection Level‘ ını belirttiğimiz Project Properties ekranı geliyor. İstenilen bilgileri sağladıktan sonra Next diyerek ilerliyoruz.

Image

SQL Server 2012 öncesinde bir paket içerisinden (Parent) bir başka paketi (Child) çağırıyorsanız ve paketlerin lokasyonunu değiştirmişseniz deployment öncesinde bunların File Connection’ larını güncellemeniz gerekiyordu. SQL Server 2012 ile birlikte Parent ve Child paketler birbirlerine isimleri üzerinden reference verdikleri için her deployment öncesinde File Connection’ ları güncellemeyi hatırlamak gibi bir külfetten kurtuluyorsunuz. Bunun için Execute Package Task’ lerinizin update edilmesi gerekiyor. Bu adımda, varsa bunları belirtiyoruz.

Image

Sonraki adımda migration yaparken taşıdığınız Configuration’ larınız varsa bunları belirtmeniz gerekiyor. SSIS 2012 bunların her biri için parametreler oluşturacak ve bundan sonra bu parametreleri Environment variable’ lar içerisinde kullanarak çalıştıracaksınız. Hem paketlerinizin yönetimi hemde development’ ı açısından kolaylık sağlayacak bir adım. Parametleri kullanarak istediğiniz paketleri (projelenin tamamı da olabilir) istediğiniz parametre ile çalıştırabilmeniz için bu adımı tamamlamanız önemli olacaktır.

Image

Create Parameters adımında, bir önceki adımda belirttiğiniz configurationlar için parametreler oluşturuyorsunuz. Configure Parameters kısmında ise oluşturduğunuz bu parametreleri basitçe konfigüre etmeniz isteniyor. Son adım olan Review’ da Wizard ile yaptığınız ayarların bir özetini göreceksiniz. Convert diyerek işlemi başlatıyoruz ve Conversion Progress’ in tamamlanmasını bekliyoruz.

Completed

İşlem tamamlandıktan sonra Projenizi kaydetmeyi unutmayın.

SQL Server, SSIS içinde yayınlandı | , , , ile etiketlendi | 1 Yorum

SSIS’ de Protection Level Nedir?

Integration Services kullanarak proje geliştirirken hepimizin başına zaman zaman sorun olmuştur Protection Level. Proje geliştirirken bir başka developer’ a projeyi gönderirsiniz kendi ortamında açamayabilir ya da açar fakat connection string’ lerde şifreleri yoktur! Geliştirme ortamından taşır production sisteme koymak istersiniz farklı bir user açar yine bu tip bir başka sorunla karşılaşırsınız.

SSIS içerisindeki Protection Level property’ si kullanılarak paketler/proje içerisindeki sensitive olarak nitelendirilen bilgiler korunmuş olur. Ne tür bilgiler sensitive olarak değerlendirilir?

Connection string’ lerdeki şifreler yada seçiminize göre connection string‘ lerin tamamı sensitive bilgilerdir.
Sensitive olarak belirtilmiş herhangi bir variable sensitive bilgidir.
Kullandığımız her hangi bir task’ in çıktısı olan XML dosyaları yine sensitive bilgilerdir.

SSIS’ de bir proje oluşturduğumuzda default olarak Protection Level EncryptSensitiveWithUserKey olarak gelir. İsterseniz proje property’ lerinden bunu değiştirebilirsiniz.

Default

Bunun dışında proje geliştirirken herhangi bir zaman control flow içerisinden paket property’ lerine giderek aşağıdaki seçeneklerden birini seçebilirsiniz.

DontSaveSensitive: Her hangi bir şekilde encryption yapmaz. Sensitive olarak nitelendirilen bilgiyi kaydetmeyerek bilgiye ulaşımı engeller. Connection string’ lerinizdeki şifre alanının boş geldiğini göreceksiniz. Save my password seçeneğini seçmiş bile olsanız bunu yapar. Connection’ larda kullandığınız şifreleri tekrar girmek çözümlerden birisidir. Fakat paketi kapatıp tekrar açtığınızda yine boş gelecektir. Bir diğer çözüm bunları configuration’ lara kaydetmek olabilir. Eğer Package Deployment Model kullanıyorsanız ikinci çözümü uygulamak, defalarca elinizle girmemeniz için bir yöntem olabilir. Son çözüm olarak environment variable’ lar içerisinde tutmak olabilir. Bunun için Project Deployment Model kullanıyor olmanız gerekli. Bunun dışında Windows Authentication yapmak gibi çözümlerde olabilir ama ileride başınızı ağrıtmaması istiyorsanız best practice’ lere yakın durun derim.

EncryptSensitiveWithUserKey: Paketler Default olarak bu seçenek ile oluşturulur. Paketteki sensitive bilgiyi oluşturduğunuz user account bilgilerini kullanarak bunları encrypt  eder. Projeyi bir başkasına gönderdiğinizde aynı account ile açmıyorsa yaşadığınız problemin kaynağı burası olabilir. Active Directory’ de SSISDev kullanıcı ile development yaptınız diyelim. SSISProd kullanıcısı ile paketleri çalıştırırken sorun yaşayacaksınız demektir. Sensitive bilgiler yine boş gelecektir.

EncryptSensitiveWithPassword: Paket içerisindeki sensitive bilgileri sizin belirlediğiniz bir şifre kombinasyonu ile encrypt eder. Birden fazla kullanıcı paketler üzerinde geliştirme yapıyorsa bu seçenek diğerlerine göre daha uygun olacaktır. SSIS, paketi her açmanızda size bu şifreyi soracaktır. Eğer şifreyi yanlış girerseniz sensitive bilgiler boş gelecektir. Onun dışında geliştirme ortamına ulaşımınız halen var olacaktır.

EncryptAllWithPassword: Yine sizin belirlediğiniz bir şifre ile paketin tamamını şifreleyerek sensitive ya da değil her hangi bir bilgiye ulaşmayı engeller. Paketi açarken şifreyi girmezseniz paketi açamazsınız. Eğer şifreyi unutursanız paketi yeniden dizayn etmek zorunda kalabilirsiniz!

 EncryptAllWithUserKey: Paketin tamamını onu oluşturan user account ile şifreler. Yukarıdaki ile aynı şekilde eğer account giderse paketi açmak için yapabileceğiniz bir şey yok demektir.

ServerStorage: Paketin tamamını SQL Server role’ leri kullanarak korunur. msdb‘ ye ya da SSISDB Catalog‘ a deployment yaptıysanız SQL Server bunu destekler. Fakat file sisteme deployment yaptıysanız bunu desteklemez. Sensitive bilgileri tutarken server’ a güvenmiş oluyorsunuz. O rollere yetkisi olan account’ lar sensitive veriyi görebilir. Bu yukarıdaki seçeneklerden olan şifreyi bilenin paketi açmasından farklı değildir. Bu aynı zamanda rolleri daha dikkatli yönetmemiz gerektiği anlamına geliyor.

Development safhasında duruma göre EncryptSensitiveWithUserKey, DontSaveSensitive yada EncryptAllWithUserKey seçilebilir. Production için deployment yapacağınızda artık developer’ ların account’ ları yerine EncryptSensitiveWithPassword yada EncryptAllWithPassword seçeneği daha makul olacaktır.

SSIS içinde yayınlandı | , ile etiketlendi | 2 Yorum

SharePoint 2013′ de Business Intelligence Features Kurulumu

Günümüzde SharePoint kullanımı çok yaygınlaştı. Artık kurumsal şirketler, kendi iç işlerinin tamamını ve hatta internet sitelerini SharePoint portaller üzerinden yönetir durumdalar. Bütün süreçlerini, bunların takibi gibi konuları bu portaller ya da alt siteler üzerinden kolayca yapabiliyorlar. Üst yönetimler hali hazırda var olan veri ambarlarındaki ya da sahip oldukları sistemlerdeki, iş zekası için kullandıkları, kıymetli verilerin analizlerini bu platform üzerinden yapmak isteyebiliyorlar. Bunun yanı sıra PerformancePoint servisi kullanılarak görselleri çeşitli, derin analizlere imkan veren, son kullanıcıların bile rahatlıkla oluşturabileceği araçları (Dashboard, Score Card, Decomposition Tree vb.) kullanabilmek için yine bu kurulumları yapmak isteyebilirsiniz. Visio grafik servisleri kullanılarak Visio’ da yaptıklarınızı rapor olarak göstermek isteyebilirsiniz. SQL Server Reporting Services servislerini kullanarak portal üzerinde PowerView ve PowerPivot rapoları yapabilirsiniz.

SharePoint 2013 üzerinde PerformancePoint Service, Visio Graphics Service ve son olarak Reporting Services Service özelliklerini konfigüre etmek için aşağıda belirttiğim adımları izleyebilirsiniz. Bunun için öncelikle bir SharePoint 2013 kurulumu çalıştırmış olmalısınız. Sırasıyla aşağıdakileri çalıştırmanız yeterli olacaktır.

1. SharePoint 2013 installer kullanılarak öncelikle Prerequisite‘ leri kurmalısınız.
2. SharePoint 2013 Server kurulumunu tamamlayın. (Server Farm olmalı)
3. Microsoft SQL Server 2012 SP 1 kurulumunu yapın. (Default (ya da Named) instance’ ı full olarak kurabilirsiniz).

Bu işlemleri tamamladıktan sonra Microsoft SQL Server 2012 PowerPivot for Microsoft SharePoint 2013 bileşenlerini kurmanız gerekiyor. Buradan ilgili link’ e ulaşabilirsiniz.

Kurulumu başlattıktan sonra ilgili bileşenler için gerekli kurulumu tamamlayın.
Image
Bu adımı da tamamladıktan sonra tekrar SQL Server 2012 SP 1 kurulumunu çalıştırın. Bu sefer POWERPIVOT instance’ ı kuracaksınız. Bunun için Setup Role bölümünden PowerPivot for SharePoint seçeneğini seçerek kurulumu yapabilirsiniz. Bu bölümde Add SQL Server Database Relational Engine Services to this installation seçeneğini seçmenize gerek yok. Daha önce Default instance (Named instance kurulumu da yapmış olabilirsiniz) kurulumu yaptığınız için tekrar Database Engine kurulu yapmanıza gerek yok.
Image
Yukarıda bu adımı başarılı şekilde tamamladığınızı gösteren ekran görüntüsünü görüyorsunuz. Buradan sonra PowerPivot for SharePoint 2013 Configuration Tool‘ u çalıştırıyoruz. Bu sayede PowerPivot için gerekli ayarların tümünü bir dizi PowerShell komutu kullanarak araç bizim yerimize yapıyor. Aşağıdaki gibi Microsoft SQL Server 2012 içerisinden aracı çalıştırabilirsiniz.
Image
Çalıştırdıktan sonra karşımıza çıkan ekranda OK tuşuna basıyoruz.
Tool
Ardından karşımıza gelen ekranda adım adım yapılacak işlemleri görüyoruz. Gerekli bilgileri girdikten sonra Validate diyoruz. Validation başarıyla tamamlandıktan sonra Run diyerek konfigürasyonu başlatıyoruz.
Commands
Bu işlemden sonra PowerPivot özelliklerini kullanabilirsiniz. Fakat yeni bir farm kurulumu oluşturduğumuz için yeni bir site collection oluşturmanız gerekiyor. Bu işlemden sonra Services Application‘ ları oluşturmak gerekecek.

Bu işlemler için Central Administration‘ da Application Management altından Manage Service Applications bölümüne giriyoruz. New tuşuna basıp ardından PerformancePoint Service Application seçeneğini seçerek konfigüre ediyoruz. Service application’ a bir isim veriyoruz ve ilgili database server’ ı seçiyoruz. Sonrasında application pool bölümünde var olan bir pool verebileceğimiz gibi yeni bir application pool’ da yaratabiliriz. Best practice olarak yeni bir application pool vermenizi tavsiye ederim. Bütün service application’ ları tek bir pool’ a bağlarsanız o pool’ da oluşabilecek bir sıkıntı sonucu bütün service application’ lar çalışamaz hale gelebilir. Hatta bütün application pool’ lar için farklı user’ lara yetki vermeniz Microsoft’ un bir diğer best practice olarak tavsiye ettiği konulardandır. Service application’ ı oluşturduktan sonra üzerine tıklayarak security ayarlarını yapmamı gerekiyor. Burada Secure Store Service Application altına SSSA için proxy account’ u ve proxy’ nin kendisini yazıyorsunuz. Son adım olarak System Settings altından Manage Services on Server’ a girip PerformancePoint Service’ i start etmeniz yeterli olacaktır. Aynı adımları izleyerek Visio Graphics Service ve SQL Server Reporting Services Service application’ ları oluşturuyorsunuz.

Bu adımı da tamamladıktan sonra artık site collection feature’ lara giderek aşağıdaki feature’ ları active’ e etmemiz gerekiyor.

PerformancePoint Services Site Collection Features
BI Center Data Connections Feature
PerformancePoint Services Site Features
SharePoint Server Enterprise Site Features

Buradan sonra Dashboard Library, PerformancePoint Content List gibi application’ ları oluşturup Dashboard Designer‘ ı ya da PowerPivot ve Tabular gibi BISM connection’ ları oluşturduktan sonra PowerView yapabilirsiniz  kullanmaya başlayabilirsiniz.

SharePoint içinde yayınlandı | , , , , , , ile etiketlendi | 1 Yorum

SSIS’ de Checkpoint Kullanımı

SQL Server Integration Services kullanarak oluşturduğumuz ETL operasyonlarının temel işi, ihtiyaç duyduğumuz formatta verileri hazırlamaktır ve bu işi mümkün olduğunca otomatize etmek isteriz. Otomatize edilmiş sistemlerin genellikle yumuşak karınları vardır. Oluşabilecek her hangi bir değişiklikle (veri kaynağındaki formatın değişmesi, hatalı bir verinin yol açtığı başka sorunlar, Server problemleri gibi) birlikte hata alabilirsiniz. Bu da başlangıçtan hata alıncaya ve bu hatayı düzeltinceye kadar ki zamanı kaybetmenize yol açar! Aslında daha fazlasına…

Bir ETL süreci düşünün ki performans sorunları yüzünden ya da sahip olunan kaynaklar sonucu çok uzun sürüyor olsun. Mesela 8 saat civarında çalışan ve ancak tamamlanan bir süreciniz var. Bu sürecin yedinci saatinin sonlarında hata aldığınızı hayal edebiliyor musunuz? Basit matematikle açıklayacak olursak; yedi saat süre geçmiş olmasına rağmen elinizde hiç bir şey yok. Bunun üzerine hata için herhangi bir öngörüde bulunarak önlem almadıysanız bunu düzeltmek için kaybedeceğiniz bir süre daha var ve bunu düzelttikten sonra şu ana kadar yapılan işlemleri geri almanız gerekebilir. Bunun için daha önce ki yazılarımdan SSIS’ de Transaction kullanımına bakmanızı tavsiye ederim. Bunu da yapmanıza rağmen önünüzde aynı noktaya gelebilmek adına harcayacağınız bir yedi saatiniz daha var! İyi ihtimalle bir 15 saat kaybetmiş durumdasınız.

Böylesi bir durumda neler yapılabilir? Her şeyden önce olası hatalara karşı her zaman hazırlıklı olacak şekilde SSIS paketleri oluşturmakta fayda var. Fakat buna rağmen hata alma ihtimalimiz olası bir durumdur. Böylesi zamanları ön görerek SSIS içerisinde Checkpoint noktaları oluşturabiliriz. Checkpoint oluşturmak bir hata aldığınızda ve bunu düzelttikten sonra paketi tekrar çalıştırdığınızda eğer tanımlanmış bir checkpoint varsa hata alınan yerden başlayarak devam etmemize yardımcı olur.

Nasıl çalıştığından biraz bahsedecek olursak; ilgili paket için bir Checkpoint tanımladığınızda, SSIS bir XML dosyası oluşturur. Başarılı bir şekilde çalışan executable’ ları (Data Flow, Container’ lar, Diğer Control Flow Task’ leri gibi) ve o anda sizin tarafınızdan tanımlanmış (User Defined) variable’ ları bu dosyada tutar. Eğer paket başarılı bir şekilde tamamlanırsa oluşturulan dosya silinir. Eğer herhangi bir executable’ da hata olduğu için paket durmuşsa bu bilgiyi içinde saklar. Bir sonraki çalışma anında XML dosyasına bakar ve kaldığı yerden devam eder. Aşağıda nasıl çalıştığını daha iyi anlayabiliriz.

Aşağıda bir Data Flow içerisinde bir dosyadan okuduğumuz verileri ilgili tabloya aktarmadan önce veri üzerinde bir güncelleme işlemi yapıyoruz. Sonra dosyayı aktarılan veriler klasörüne koyuyoruz.
No Checkpoint
Bu paket üzerinde bir Checkpoint tanımlamak için öncelikle Control Flow üzerinde herhangi bir yere basarak paket property’ lerine gidiyoruz. Aşağıdaki property’ leri düzenlememiz gerekiyor.

CheckpointFileName: Checkpoint dosyası için path ve dosya adı veriyoruz.
CheckpointUsage: Paket içerisinde checkpoint kullanılacaksa buradan belirtiyoruz. Aşağıdaki değerlerden uygun olanını seçmemiz gerekiyor.
Never: Checkpoint kullanılmayacak anlamına geliyor. Aynı zamanda paketlerde Default değerdir.
IfExists: Eğer var olan bir Checkpoint dosyası varsa kullanılarak bir önceki çalışma anında kaldığı yerden devam eder. En sık kullanılan seçenektir diyebilirim.
Always: Paketin her çalışmasında Checkpoint dosyasının kullanılacağı anlamına geliyor. Eğer Checkpoint dosyası yoksa paket hata alacaktır!
SaveCheckpoints: Default olarak False gelir. Eğer Checkpoint kullanılacaksa True olarak seçilmelidir.
Checkpoint
Bundan sonrası kritik! Dikkat ettiyseniz Checkpoint oluştururken paket property’ lerini konfigüre ettik. Peki bunu task’ ler bazında nasıl yaparız? Yani hangi task’ de hata alırsak kaldığı yerden devam edecek? Hangi task’ ler ya da Container’ lar için bunu sağlamak istiyorsak, onun property’ lerini konfigüre etmeliyiz. Bunun için FailPackageOnFailure property’ sini True yapmamız yeterli olacaktır. Bu property’ sini True yapmadığımız bir task için hata alırsak, XML dosyasında bununla ilgili bir kayıt olmayacağından paket yeniden başlatıldığında checkpoint kullanılmayacaktır!

Execute SQL Task için FailPackageOnFailure property’ sini True olarak seçiyoruz.
FailPackageOnFailure
Bir sonraki adım olarak Execute SQL Task’ in hata almasını sağlayacağız. Bunun ForceExecutionResult property’ sini Failure olarak seçiyoruz. (Bu property’ yi test yaparken kullanırsanız işini çokça kolaylaştıracaktır. ) Hata alıp XML dosyasına gerekli bilgilerin yazılması için paketi çalıştırıyoruz.

Aşağıda gördüğünüz gibi paket çalışma sırasında hata aldı. SSIS yukarıda tanımladığımız Checkpoint property’ leri doğrultusunda XML dosyasını oluşturdu.
Error
Eğer merak ederseniz, belirtiğiniz dosya yolunu takip ederek Checkpoint dosyasının içeriğine bakabilirsiniz. Artık hatayı düzelttikten sonra paketin nasıl davranacağını izleyebiliriz. Şu anda başarılı bir şekilde çalışan ve hata veren task’ lerin hangileri olduğu bilgisi elimizde var. ForceExecutionResult property’ sini tekrar None yaptıktan sonra paketi tekrar çalıştırıyoruz.
Result
Beklediğimiz gibi paket kaldığı yerden devam ederek tamamlandı. bu işlemden sonra Checkpoint dosyasını koyduğumuz dosya yolunu kontrol edecek olursanız artık herhangi bir dosya olmadığını göreceksiniz. Paket başarılı bir şekilde tamamlandığı için herhangi bir şey kayıt altına alınmadığı için SSIS dosya oluşturmaya gerek duymadı.

Checkpoint ve Transaction’ lar doğru şekilde kullanıldıklarında SSIS ile yapacağımız projelerde işimizi kolaylaştıracaklardır. Fakat dikkat edilmesi gereken önemli noktalar olduğunu söyleyebiliriz. Bunlardan bir kaçından bahsetmek istiyorum. Control Flow içerisinde For Each Loop ya da For Loop Container kullanacaksanız bunlar için checkpoint kullanmanız anlamlı olmayacaktır! Çünkü loop container’ lar içerisinde kullanacağınız checkpoint’ ler kayıt altına alınmazlar. Dolayısıyla hangi task’ lerin başarılı ya da başarısız sonuçlandığını bilemezsiniz. Eğer bu hataya düşerseniz container içerisinde hata almamış bir task’ in tekrar çalıştığını göreceksiniz.

Eğer Sequence Container kullanacaksanız burada da dikkat etmeniz gereken noktalar var. sonuç beklediğiniz gibi olmayabilir! Sequence Container’ larla birlikte Transaction‘ ları kullanmanızı şiddetle tavsiye ederim. Yaşayacağınız sorunları kontrol altına almanız için kolaylık sağlayacaklardır.

Yukarıda oluşturduğumuz paketi kullanarak, executable’ ları bir Sequence Container içerisine alıyoruz. Sequence Container için FailPackageOnFailure property’ sini True olarak seçiyoruz. Hata ile sonuçlandıracağımız Execute SQL Task için bu sefer FailParentOnFailure seçeneğini True yapıyoruz ve paketi çalıştırıyoruz.
Sequence Container
Şu andan sonra paketi tekrar çalıştırdığımızda Execute SQL Task ile işleme başlayarak paketin başarılı şekilde tamamlanmasını gözlemleyeceğiz. Fakat aşağıdaki gibi bir sonuç doğuyor!
Sequence Container Result
Paket içerisinde Transaction tanımlamış olsaydık, yaptığımız işlemleri roll-back ederek paketin Sequence Container’ dan başlamasını sağlayabilirdik. Transaction kullanırken dikkat etmeniz gereken bir durum var. Eğer bir paket hata alır ve durursa, yeniden başlattığınızda bir önceki çalışmasında başarılı bir şekilde commit ettiği transaction’ ları tekrar yapabilir.

Bu konuda değerlendirebilecek çok fazla senaryo var. Bunlarla yüzleşmemek adına henüz paketler dizayn edilirken Checkpoint noktaları planlanarak ilerlenmelidir. Her işi bir Data Flow içerisinde yapıyor olmak yerine bunu alt parçalara bölerek checkpoint kullanımı ile desteklerseniz zaman ve efor kaybınızı minimize edebilirsiniz.

SSIS içinde yayınlandı | , , , ile etiketlendi | 1 Yorum

Slowly Changing Dimension Nedir?

Dimension (boyut) kavramı veri ambarlarında kullanılan bir terimdir. Özetle; analiz edeceğimiz verilerin nasıl, bir başka deyişle neye göre görüneceğini belirttiğimiz niceliklerdir. Mesela şirketinizin gelir – gider durumunu incelemek istiyorsunuz diyelim. Bu rakamları yıllara, iş yaptığınız bölgelere, ürünlerinize yada bunların hepsine göre analiz etmek istiyorsunuz. Buradaki -e göreler, sizin verilerinizi nasıl analiz edecek olduğunuzdur ve bunların her birine dimension denir.

Ralph Kimball ilk olarak Slowly Changing Dimension (yavaş büyüyen boyutlar) kavramını ortaya attığında yıl 1996′ ydı. SCD kısaca sahip olduğunuz dimensionların bir bölümünün yada belki tamamının tam olarak yavaşça değişmesidir ve bu değişimin ne zaman olacağını bilememeniz durumudur. Herhangi bir zamanda gerçekleşebilir. Şirketinizdeki satış temsilcilerini ele alalım. Bir satış temsilciniz 2012 yılında İstanbul bölge müdürlüğünüzde işe başlamış olsun. 2013 yılı sonunda Ankara şubenizde çalışmak üzere lokasyon değiştiriyor. Şirket satışlarınızı bölgelere ve yıllara göre analiz ediyorsunuz diyelim ki; böyle bir durumda bu satış temsilcisinin bölgesi neresi olmalı? Aslında cevap çok basit; her ikiside! Sadece Ankara olarak bakarsanız 2013 yılında İstanbul’ da yapılan satışları Ankara’ da yapılmış gibi görürsünüz ki tam burası yanlış yaptığınız yer olur. Aynı şekilde sadece İstanbul’ da diyemezsiniz. İlk akla gelen çözüm bu satış temsilcisi için veri ambarına 2 farklı satış temsilcisiymiş gibi kayıt girmek olur. Bu noktada da eğer kaynak sistemden bağımsız integer surrogate key’ ler kullanılmamışsa baya büyük bir krize bile yol açabilir.

Veri ambarı tasarımı yaparken işleri kolaylaştırması, hatalara düşülmemesi için farklı tiplerde SCD metodolojileri geliştirilmiş durumda. Bunlar Type 0‘ dan başlayarak Type 7‘ a kadar çeşitlendirilmiş. Geriye sizin için uygun olan çözümü bulup uygulamanız kalıyor.

Type 0: Orijinal değeri hiç bir şekilde değiştirmiyoruz. Bu kolona gelecek değişikleri kabul etmediğimiz durumlarda Type 0 diyoruz.

Type 1: Var olanın üzerine yazıyoruz. Mesela müşterilerinizin telefon numaralarını tutuyorsunuz. Bir müşterinin telefon numarası değişti diyelim ki, böyle bir kaydı tarihsel olarak tutmaya gerek olmadığına karar verildi (bu kararlar daha çok business tarafından verilir.) sizde var olan telefon numarasının üstüne yeni geleni update edersiniz.

Image

Type 2: Bu tipte olan dimensionlarda tarihsel verileri tutabilirsiniz. 2 şekilde bunu yapabilirsiniz. Satış temsilcisi örneğini düşünelim. Satış temsilcisinin bölgesi değişirse farklı bir surrogate key kullanarak tabloya ikinci bir kayıt girmelisiniz. Ayrıca CurrentRecord gibi bir kolon oluşturarak şu andaki geçerli olan kayıtları saklarken aynı zamanda bunların geçmişini de saklamış oluyorsunuz.

Image

Bir başka yaklaşımda tabloda EffectiveDate ve ExpirationDate gibi kolonlar bulundurmak. Son gelen kayıt için EndDate set edilmeyebilir yada ileri bir tarih set edilebilinir (9999-12-31). Böylelikle şu andaki geçerli kayıt ve onun geçmişini de tutmuş oluyoruz. NULL olan değerler indexlere dahil edilmezler. Bu nedenle EndDate alanını NULL bırakmamak indexlemede performansımızı artıracaktır.

Type2_2

Type 3: Type 2 için tabloya satır eklemiştik. Burada da kolon ekliyoruz. CurrentRecord gibi bir kolon ekleyerek hem Orijinal değeri hemde şu andaki değeri saklamış oluyoruz. Type 3‘ de sınırlı sayıda tarihsel veri saklayabiliyoruz.Image

Type 4: Bir dimension içerisinde sıkça değişen attribute’ lardan Mini-Dimension tablosu oluşturularak elde edilir. History tabloları olarak da bilinirler. Detay seviyedeki tabloda genel seviyedeki tablonun değişen alanları tutulur.

Image

Type 5: Type (4 + 1) olarak da bilinir. Type 4 ile Type 1‘ ın birleştirilmiş halidir diyebiliriz. Type 4‘ a ek olarak detay seviyedeki en son gelen kaydı bir başka tabloda saklar. Detay seviyedeki tabloya gelen her kayıt için şu andaki kaydı tuttuğumuz bu tabloyu güncelleriz.

Image

Type 6: Bir diğer hibrit metodolojidir. Type (1 + 2 + 3) olarak bilinir. Type 1, 2 ve 3‘ deki yaklaşımları birleştirir. Type 2‘ da olduğu gibi CurrentRecord (Current Row Indicator) ve EffectiveDate gibi kolonlarımız var. Type 3‘ de kullandığımız gibi şu andaki değeri tuttuğumuz kolonu (Historic Department Name) oluşturuyoruz. Son olarak Type 1‘ de yaptığımız gibi yeni gelen her değerle birlikte ilgili kolonu (Current Department Name) güncelliyoruz.

Image

Type 7: Type 2 olarak sakladığınız bir dimension tablonuz var. Bu tablo direkt olarak ilgili Fact tablosuna foreign key üzerinden bağlı olmalı. Type 6‘ de olduğu gibi şu andaki (Current) değerleri bir başka tabloda tutuyoruz. Bu tablo ile ilgili dimension tablosuda yine birbirleriyle ilişkilendirilmiş durumda olmalı. Şu andaki kayıtları tuttuğumuz tabloyu bu sefer ilgili Fact tablosuna bağlıyoruz. Current değerleri tuttuğumuz tablo hem dimension hemde Fact tablosuna bağlı olduğu için bu metodoloji Dual Type olarak da bilinir.

Image

Uygulanabilecek çok fazla metodoloji var gibi görünse de temelde tip 1, 2 ve 3′ ü bilmek yeterli olacaktır. Diğer hibrit tipler karışıklığı önlemek ve kolaylığı artırmak için birbirinden türetilmiş tiplerdir.

Data Warehouse içinde yayınlandı | , , , ile etiketlendi | 1 Yorum

SSIS’ de Tarih Formatı Kullanarak SSAS Küpleri Nasıl Yedeklenir?

SQL Server Management Studio kullanarak hali hazırda sahip olduğunuz OLAP küplerinin yedeğini almak, OLTP sistemlerin yedeklerini almaya kıyasla çok daha kolay. SSMS kullanarak bunu basitçe yapabiliyoruz. Aynı şekilde Integration Services içerisinden her hangi bir OLAP küpünü yada For Each Loop gibi bir task kullanarak sahip olduğumuz küpleri de kolayca yedekleyebiliyoruz. Peki Integration Services ile yedekleyeceğimiz küp adını tarih formatıyla nasıl adlandırabiliriz? Bu işlemi Script Task ya da PowerShell komutları kullanarak yapabiliyorsunuz fakat daha kolay bir çözümü var.

Bu işlem için yalnızca bir tane Analysis Services Execute DDL Task kullanacağız. SSIS Toolbox’ dan task’ i sürükleyip bırakıyoruz. Çift tıklayarak Task Editor’ ı açıyoruz. Buradan DDL başlığına geliyoruz. Connection sekmesine gelerek yedeğini alacağımız OLAP küpünün bulunduğu sunucuya gerekli credential’ ları sağlıyoruz. Ardından Source Type sekmesine tıklayarak drop down list’ den Variable seçiyoruz. Daha sonra Source sekmesinden Time adında yeni bir variable tanımlıyoruz. Value Type’ ını String yapıyoruz.
Image
Tanımladığımız variable’ ı View->Other Windows->Variables diyerek görebilirsiniz. Variables penceresinde Value kısmına OLAP küpünün yedeğini alacak XMLA komuntu yazacağız ve küp adına tarih ekleyeceğiz. Bunun için öncelikle SSMS içerisinden yedeğini alacağımız küpe ya da herhangi başka bir küpe giderek istediğim konfigürasyonları sağladıktan sonra Script tuşuna basarak hazır XMLA komutunu alacağım.

Bunun için SSMS’ da ilgili küpe gidip sağ tuşa basarak Backup… diyoruz. Açılan menu’ den Backup file kısmında Browse diyerek yedek alacağımız directory’ yi belirtiyoruz. Burada Selected Path kısmına ilgili folder’ in path’ ini kopyalayıp yapıştırabilirsiniz. Aynı yerde kolaylık olması için küp adını da belirtiyoruz. Geri kalan konfigürasyonları da tamamladıktan sonra Script tuşuna basarak yaptığımız işlemlerin script’ ini alıyoruz.
Image
Script Action to New Query Windows diyerek XMLA komutunu alıyorum. Bu komutu variable içerisinde kullanacağız. Fakat öncesinde tarih formatı eklememiz gerekli. Variable’ ı String tipinde oluşturmuştuk dolayısıyla çift tırnaklar arasına bu XMLA komutunu yazacağız. Sonrasında oluşturduğumuz variable’ a bir expression olarak yazacağız.

Bundan önce istediğimiz tarih formatını oluşturacak expression’ ı yazıyoruz. Bu işlemi yapabilmek için oluşturduğumuz variable’ ı seçerek F4 tuşuna basıyoruz ve Property’ lere ulaşıyoruz. Expression property’ sinin olduğu yere tıklayarak Expression Builder‘ ı açıyoruz.
Image
Ayrıca komut için;

(DT_STR,4,1252)DATEPART( “yyyy” , getdate() ) +
RIGHT(“0” + (DT_STR,4,1252)DATEPART( “mm” , getdate() ), 2) +
RIGHT(“0” + (DT_STR,4,1252)DATEPART( “dd” , getdate() ), 2) + “-” +
RIGHT(“0” + (DT_STR,4,1252)DATEPART( “hh” , getdate() ), 2) +
RIGHT(“0” + (DT_STR,4,1252)DATEPART( “mi” , getdate() ), 2)

Oluşturduğumuz XMLA komutunda küp adına bu expression’ ı ekleyeceğiz. Bunu ve string concatenation için + kullanarak yapmayı unutmayın!
Image
Bundan sonra oluşturduğumuz expression’ ı variable’ ın içerisine kopyalamak kalıyor demek isterdim fakat öyle olmuyor, hata alıyorsunuz. Büyük ihtimalle öncelikle yanlış yazmış olacağınızdan şüpheleneceksiniz fakat gerçekten yanlış yazmamış olabilirsiniz. Peki sorun nedir? İki farklı problem, tek sorun var diyebilirim. Problemlerden biri XMLA komutundaki çift tırnaklar bir diğeri ise XMLA komutu içerisindeki \ kaynaklanıyor. Analysis Services’ ı ya da Integration Services Expression Builder‘ ı bunların gerçekten ve \ olduğuna ikna etmemiz gerekiyor. Çünkü string concatenation mı yapıyorsunuz yoksa gerçekten için mi kullanıyorsunuz bu ayrımı yapamıyor, bunun için bizim ayrıca bir şey belirtmemiz gerekli. Bunlar yerine kullanacağım sequence’ ların genel adına Escape karakterler deniyor. Aşağıda çokça işinize yarayacak bir liste bulabilirsiniz. Yazdığınız expression’ daki ve \ ları aşağıdaki listede karşılık gelen Escape karakterlerle değiştirirseniz sorun çözülecektir.
Image
Gerekli değişimleri yaptıktan sonra expression’ ı Evaluate ettiğinizde XMLA komutunun düzgün bir şekilde, String olarak geldiğini göreceksiniz. OK‘ ye basıp devam ediyoruz fakat henüz bitirmiş değiliz.
Image
Son fakat bir o kadar da unutulan bir hamle de variable için yazdığımız expression’ ı etkin hale getirmek. Bu variable’ ı işleme sokarken yazdığımız expression’ ı kullanmasını sağlayacağız. Aksi taktirde paketi çalıştırdığınızda işlem başarısız olacaktır. Bunun için variable’ a tıklayıp yine F4‘ e basarak Variable Property‘ lerine gidiyoruz. Buradan EvaluateAsExpression property’ sini True yapmamız gerekiyor.
Image
Şu anda yedek almak için her şey hazır. Paketi çalıştırabiliriz.
Image
Hata almış olabilirsiniz, bunun sebebi XMLA komutu içerisinde “gereksiz space’ ler” kullanmanız. <File> </File> tag’ lerinin başında ve en sonunda space karakteri kullanmayın.

Örnek doğru kullanım;

<File>Bu şekilde yazarsanız bir sorun çıkmayacaktır.</File>

Örnek yanlış kullanım;

<File>    Bu
Şekilde yazarsanız
hata alırsınız    .
</File>

SSIS içinde yayınlandı | , , , , ile etiketlendi | 3 Yorum