For Loop Container

6. December 2010

SSIS içerisinde DTS2000'den farklı olarak gelen yeni bir öğemiz vardır. For Loop Container. Bu döngüsel işlemleri yapabilmek için kullanılır. Çok basit çalışma mantığına bakacak olursak aslında bir değişkenin ilk değeri üzerine döngüye sokularak değerinin belirleyeceğimiz koşul sağlanana kadar çalışmasını sağlayabiliriz.

Yine her zamanki gibi direkt konuya girişelim. Yeni veya mevcut bir ssis paketinin içerisindeki control flow'da bir adet For Loop Container ekleyelim ve özelliklerine girelim.

 

Buradaki özellikleri tanıyalım:

  1. InitExpression: Değişkenin ilk değeri
  2. Eval Expression: Döngünün sona erme koşulu
  3. AssignExpression: Her dönüşte değişkenin atanacağı değer.

 

Yani yukarıdaki resimde görüldüğü üzere @Degisken'n ilk değeri 0, döngü @Degisken'in değeri 20'den küçük oldukça devam edecek ve her dönüşte @Degisken'in degerini 1 artıracak ve böylece 20 kez dönerek For Loop Container'ın içerisine koyacağımız task'ı 20 kez çalıştıracak.

 

Bu işlem sırasında kullanacağımız değişkeni tanımlamamız gerekiyor tabii ki.

Bunun için SSIS Menüsünden => Variables içerisine girdikten sonra Package Level Scope'da "Degisken" isimli tamsayı bir variable yaratıyoruz ve ardından yukarıda bir örneğinin görüldüğü üzere istediğimiz gibi dolduruyoruz ve paketi çalıştırıyoruz.

 

Peki pratik olarak ne gibi alanlarda kullanabiliriz?

Şöyle bir senaryo düşünün: İki tarih arasındaki günleri bir tabloya yazmak istiyoruz. Bu durumda aşağıdaki gibi bir ayarlama yaparız:

 

Bunun en basit kullanımı SSAS Olap küplerinde kendi time dimension'ımızı üretmek istediğimizde tarihleri elle tek tek girmek gibi bir manyaklık yapma fikrini dahi ortadan kaldırmasıdır. (Hiç rastlamadım değil.)

Bu işlem için öncelikle aşağıdaki gibi bir sql'imiz olsun.

INSERT INTO DimDate

SELECT CAST(GETDATE() as int) as IntegerDate, GETDATE() as DateOfDay, MONTH(GETDATE()) as MonthOfDay, DATENAME("MONTH", GETDATE()) as MonthName,YEAR(GETDATE()) as YearOfDay, 'Q'+ DATENAME("QUARTER",GETDATE()) as Quarter

 

Bu sql'i Execute SQL Task yardımıyla her seferinde istediğimiz tarih için çalıştıracağız. Ama öncelikle biraz düzenleme yapmamız lazım.

Döngüyü yukarıdaki gibi kurduktan sonra içerisine bir adet Execute SQL Task bırakıyoruz.

 

Execute SQL Task için bağlantı bilgilerini ayarladıktan sonra aynı penceredeki sol taraftaki sekmeler arasından Expressions'a gelerek Execute SQL Task'ın SQLStatementSource özelliğini Runtime sırasında dinamik olarak çalıştırmak üzere expression'ı düzenliyoruz.

 

Expression:

"INSERT INTO DimDate

SELECT CAST(CAST('"+ (DT_WSTR,20) (DT_DBDATE) @[User::TarihDegiskeni] +"' AS Datetime) as int) as IntegerDate, '"+ (DT_WSTR,20) (DT_DBDATE) @[User::TarihDegiskeni] +"' as DateOfDay, MONTH('"+ (DT_WSTR,20) (DT_DBDATE) @[User::TarihDegiskeni] +"') as MonthOfDay, DATENAME(MONTH, '"+ (DT_WSTR,20) (DT_DBDATE) @[User::TarihDegiskeni] +"') as MonthName,YEAR('"+ (DT_WSTR,20) (DT_DBDATE) @[User::TarihDegiskeni] +"') as YearOfDay, 'Q'+ DATENAME(QUARTER,'"+ (DT_WSTR,20) (DT_DBDATE) @[User::TarihDegiskeni] +"') as Quarter"

Ardından OK'e basıp ana ekrana döndükten sonra paketimizi çalıştırıyoruz ve save edip saklıyoruz sonraki projelerimizde de kullanmak üzere ;)

 

İşte Sonuç: J

Control Flow Tasks ,

Add comment




biuquote
  • Comment
  • Preview
Loading