SQL Server Indonesia User Groups Community Unleash The Power of Script Component - drowned in code

SQL Server Indonesia User Groups Community

SQL Server Indonesia User Groups Community
Welcome to SQL Server Indonesia User Groups Community Sign in | Join | Help
in Search

drowned in code

eat, sleep, breath, SQL

Unleash The Power of Script Component

download sample code

Beberapa hari yang lalu ada teman saya yang bertanya mengenai SSIS pada saya. Berhubung sedang banyak pekerjaan, akhirnya baru sekarang saya bisa menjawab pertanyaannya.

Teman saya itu bercerita bahwa dia mendapat tugas dari dosennya untuk membuat sebuah ETL menggunakan SSIS yang fungsinya mengisi ID pelajar dengan format 4 digit ID kota + 2 digit ID pelajar. Contohnya adalah sebagai berikut:

Nama ID Kota ID Pelajar
A 0001 000101
B 0001 000102
C 0002 000201
D 0003 000301

Dari table diatas ID Pelajar adalah kombinasi ID Kota ditambah maks ID pelajar yang terdapat di kota tersebut. Sehingga jika ada pelajar baru dengan nama E dengan ID Kota 0004, maka ETL nya harus menghasilkan ID Pelajar 000401 karena belum terdapat data pelajar di kota 0004.

Apabila kita melihat component-component standar yang terdapat pada SSIS, tentunya kita tidak akan mendapati component yang dapat menghasilkan data yang diinginkan oleh teman saya tadi. Satu-satunya pilihan adalah dengan menggunakan Script Component, yang isinya mendapatkan kombinasi ID Pelajar berdasarkan kotanya.

Logik nya sendiri cukup mudah. Pada saat preeksekusi package, kita ambil ID kota dan Max ID Pelajar yang terdapat di setiap kota lalu ditampung pada sebuah tempat. Pada saat package dieksekusi, cari ID Kota untuk setiap baris data yang ditransformasi. Apabila ID Kotanya ketemu, maka isi kolom ID Pelajar dengan ID Kota + Max ID Pelajar ditambah 1. Apabila nggak ketemu, tambahkan ID Kota dan ID Pelajar kedalam penampungan sementara.

Supaya blog nya gak terlalu panjang, saya gak akan menulis semuanya, hanya bagian Script Component nya saja. Untuk melihat keseluruhan package-nya, silakan download sample code-nya.

Menambahkan Koneksi

Untuk menambahkan koneksi ke database CampusDB, buka tab Connection Manager, klik tombol Add, lalu pilih CampusDB di column Connection Manager, dan isi Name dengan CampusDBConnection. Koneksi ini kita perlukan untuk mengambil data ID Kota dan Max ID Pelajar di tiap kota.

image

 

Menambahkan Input Column

Pilih tab Input Columns, lalu centang CityCode. Input column ini berfungsi untuk memilih column mana yang akan digunakan pada script dan mendeklarasikan penggunaannya, apakah hanya ReadOnly atau ReadWrite

image

 

Menambahkan Output Column

Untuk menambahkan column output hasil script component, pilih tab Input and Outputs, expand Output 0 > Output Columns lalu klik Add Column. Isi nama column dengan ID, tipe data string[DT_STR] dan length 6.

image

 

Script

Oke, semua yang kita butuhkan sudah siap, sekarang kita mulai the fun part-nya. Untuk mulai menggunakan script component, pilih tab Script, lalu klik tombol Edit Script

image 

Tambahkan reference ke Microsoft.SQLServer.ManagedDTS

image

Tambahkan import statement (untuk VB) atau using statement (untuk C#) ke System.Data.OleDb. BTW, saya kasih contohnya dalam VB supaya yang *** C# bisa ngelatih C# nya.

Tambahkan juga dua global variable berikut

image

Variable _connection digunakan untuk melakukan koneksi ke database. Yang harus diperhatikan dalam mendeklarasikan tipe datanya adalah bahwa tipenya harus mengikuti tipe connection yang kita buat pada saat meng-create data source. 

_dtStudent digunakan untuk menyimpan data kota beserta max id pelajarnya. Tentu ini hanya contoh, kita bisa menggunakan tipe data lain sesuai dengan kebiasaan kita.

 

Melakukan koneksi

Untuk melakukan koneksi ke database, isi _connection dengan koneksi CampusDBConnection.

image

 

Mengambil ID Kota dan Max ID Pelajarnya

Pengambilan datanya harus dilakukan sebelum package dieksekusi, agar hanya sekali dilakukan dan tidak berulang-ulang untuk setiap row yang ditransformasi. Hal ini tentu dimaksudkan agar tidak terjadi roundtrip dengan server yang akan mengurangi performance dan meningkatkan traffic jaringan.

image

 

Mengisi ID Pelajar

Disinilah proses pengisian max id dimulai. Dan code saya seharusnya sudah menjelaskan semuanya, jadi saya nggak perlu cerita lagi.

image

Comments

No Comments
Powered by Community Server (Commercial Edition), by Telligent Systems