24 Aralık 2012 Pazartesi

Interface Ve Filtre(Filter Interface)


 Merhaba,

Önceki makalemizde Join de içeren bir Interface yapmıştık. Şimdi Uygulamamıza devam edelim ve Filter bir interface yapalım. Ama öncelikle sıralama ve ilk defa deneyenlerin de kolayca anlayabilmeleri açısından link paylaşımı yapıyorum.

           1)
            2)
        3)
          4)

Devam edersek:  Öncelikle ODI ı açıyoruz ve kendi user ımızla bağlanıyoruz. Sonrasında yeni bir proje oluşturalım. Diğer taraftan da TOAD dan HR a bağlanabiliriz.



Açılan ekrandan Yeni projemiz için isim oluşturuyoruz.


Proje adını girdikten sonra kaydet diyoruz. Ve sol taraf projects sekmesinin altına yeni Projemizin geldiğini görüyoruz.
Oradan Interface bölümüne gelerek New Interface diyoruz ve Interface için isim giriyoruz.


Mapping kısmına geçiyoruz ve aşağıdaki ekrana ulaşmış olmamız gerekiyor.


Şimdi nasıl bir aktarım(Integrator) yapacağımızı planlayabiliriz. Bu interface de Filter ile birlikte Join ve işin içerisine biraz da hesap katmak için
Sum kullanalım.Şöyle bir senaryo düşünelim:

Roma,Tokyo ve Toronto da yaşayan kişilere yıllık maaşlarının %5 i kadar yıl sonunda prim verilecek olsun. Ve ben hedef  tablomda
bu şartları sağlayan kişilerin, First_name, Last_name,Street_adress,city,job_title ve Salary ile verilmesi gereken prim olarak görelim.
Öncelikle bu sonucu verebilecek bir tablo create ediyoruz.

CREATE TABLE Table_prim
(
   First_name      VARCHAR2 (20 BYTE),
   Last_name       VARCHAR2 (25 BYTE),
   Street_adress   VARCHAR2 (40 BYTE),
   city            VARCHAR2 (30 BYTE),
   job_title       VARCHAR2 (35 BYTE),
   Salary          NUMBER (8, 2),
   bonus           NUMBER (8, 2)
)

Tablomuzu oluşturduktan sonra, reverse etmeyi unutmadan  ODI da Target tarafına atabiliriz
. Source kısmına da benim bu verileri çekeceğim tablolar hangileri sorusunu sorarak ilerliyorum
ve Employees, Locations ve Jobs tablolarını Source kısmına atıyorum. Sonuç olarak şu anda
olduğumuz yer aşağıdaki gibi.                                             


Target daki Table_Prim tablomuzda bazı değerlerin otomatik eşleşdiklerini görebiliyoruz. Bunu zaten atarken bize soruyor,
ok dediğimizde alınacak ne varsa zaten alıyor.
Şimdi, Joinleri kuralım ve filtrelerimizi oluşturalım.Filtreleri Source tarafındaki tablolardan ilgili olanına  gelerek, sürükle bırak
yöntemi ile kolonu çektiğimizde alt tarafta yazabiliyoruz. City kısmına filtre koyacağımız için bahsettiğim işlemi City için yapıyorum.


Filtre tıklı iken altta(Implementation) Locations.city yazan alanı görüyoruz. Buraya istediğimiz gibi şartımızı yazabiliriz.
Şehir kriterimiz 3 tane olacağı için bu alana,
 LOCATIONS.CITY IN ('Seattle', 'Toronto')
Olarak yazıyoruz. Joinleri kurarak devam edelim. Ortak kolonlara ve özellikle ID li kolonlara dikkat edelim.Joinler de aşağıdaki
gibi oluyor.


Sıradaki adımımızda Bonus kolonunu doldurmak var. Buraya EMPLOYEES.SALARY*12/20 olarak yazıyoruz.


Flow kontrolu de set ederk , IKM SQLControl Append i seçiyoruz ve ‘Flow Control’ u False seçerek Artık Çalıştırabiliriz.
Yaptığımız işlemin SQL i:

INSERT INTO HR.TABLE_PRIM (FIRST_NAME,
                           LAST_NAME,
                           CITY,
                           JOB_TITLE,
                           SALARY,
                           BONUS)
   SELECT FIRST_NAME,
          LAST_NAME,
          CITY,
          JOB_TITLE,
          SALARY,
          BONUS
     FROM (SELECT EMPLOYEES.FIRST_NAME FIRST_NAME,
                  EMPLOYEES.LAST_NAME LAST_NAME,
                  LOCATIONS.CITY CITY,
                  JOBS.JOB_TITLE JOB_TITLE,
                  EMPLOYEES.SALARY SALARY,
                  EMPLOYEES.SALARY * 12 / 20 BONUS
             FROM HR.EMPLOYEES EMPLOYEES,
                  HR.JOBS JOBS,
                  HR.LOCATIONS LOCATIONS,
                  HR.DEPARTMENTS DEPARTMENTS
            WHERE     (1 = 1)
                  AND (EMPLOYEES.JOB_ID = JOBS.JOB_ID)
                  AND (DEPARTMENTS.MANAGER_ID = EMPLOYEES.EMPLOYEE_ID)
                  AND (EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID)
                  AND (DEPARTMENTS.LOCATION_ID = LOCATIONS.LOCATION_ID)
                  AND (LOCATIONS.CITY IN ('Seattle', 'Toronto'))) ODI_GET_FROM

Tabloda datalar da:


Teşekkürler.



Hiç yorum yok:

Yorum Gönder