SQL Server Indonesia User Groups Community Melakukan Top-N di SSIS - 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

Melakukan Top-N di SSIS

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.

image

Kemudian tambahkan Script Component dengan menambahkan column ID di output column-nya

 image

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.

image

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.

image

Comments

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