download sample code
Di T-SQL kita mengenal Top Clause untuk menampilkan data tertinggi, sebagai contoh untuk menampilkan sepuluh data tertinggi kita menggunakan select top 10 [columns_name] from [table_name]. Tapi bagaimana yah cara melakukan hal ini di SSIS? Misalnya kita telah melakukan transformasi data-data penjualan, lalu yang ingin diambil hanya sepuluh data penjualan terbanyak saja.
Ada beberapa cara yang dapat dilakukan, salah satunya adalah dengan menggunakan dua component bawaan SSIS yaitu Script Component dan Conditional Split. Idenya sederhana, pertama dengan menggunakan script component kita tambahkan satu column yang diisi row number. Kemudian dengan Conditional Split kita pisahkan data yang row number-nya kurang dari atau sama dengan Top yang kita inginkan.
Bingung kan? hehe⦠supaya gak bingung lagi saya akan membuat contoh dengan menggunakan data penjualan yang ada di AdventureWorks untuk mengambil top 20 data penjualan terbesar.
Pertama buat satu variable di SSIS Package dengan nama Top dengan tipe data Int32 dengan value 20 dan variable RowCount dengan tipe data Int32.
Lalu tambahkan Data Flow Task ke dalam control flow, tambahkan sebuah OLE DB Source di Data Flow Task yang mengambil PurchaseOrderID dan TotalDue dari table [Purchasing].[PurchaseOrderHeader] yang diurutkan berdasarkan TotalDue terbesar.
Kemudian tambahkan Script Component dengan menambahkan column ID di output column-nya
Isi script component dengan script berikut
private Int32 nRowCount = 0;
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
nRowCount++;
Row.ID = nRowCount;
}
Setelah selesai tambahkan Conditional Split, tambahkan criteria dengan nama TopRows dan Condition [ID] <= @[User::Top] untuk mem-filter row yang masuk ke dalam TopRows.
Tambahkan RowCount, lalu hubungkan output TopRows dari Conditional Split ke dalam RowCount. Isi property VariableName RowCount dengan User::RowCount.
Pada saat dieksekusi, hanya 20 data teratas saja yang dihasilkan.
