download sample code
Apabila sebelumnya untuk melakukan Top-N saya membutuhkan Script Component dan Conditional Split, maka kali ini saya ingin menunjukkan cara yang lebih simple, dengan Script Component saja. Idenya sederhana, yaitu membuang row-row yang berada diluar top rows. Untuk melakukannya, dua keyword yang harus kita paham adalah ExclusionGroup dan DirectRow. Silakan baca SQL Server Books Online untuk keterangan lebih detil mengenai kedua keyword ini.
Untuk mempersingkat step-by-step melakukannya, saya akan langsung ke bagian script component.
Pada tab Script, tambahkan variable User::Top kedalam ReadOnlyVariables
Buka tab Inputs and Outputs, pilih Output 0, dan set property ExclusionGroup-nya dengan nilai 1.
Isi script component dengan script berikut
1: private Int32 nCounter=0;
2:
3: public override void ProcessInput(int InputID, Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer Buffer)
4: {
5: while (Buffer.NextRow())
6: {
7: if (nCounter < this.Variables.Top)
8: {
9: nCounter++;
10: Buffer.DirectRow(this.ComponentMetaData.OutputCollection[0].ID);
11: }
12: }
13: }
Script diatas akan mengecek apakah input row yang sedang ditransformasi masih berada dalam top rows. Apabila row-nya masih berada dalam top rows, row tersebut akan dikirim ke output.
Pada saat dieksekusi, hasil yang kita dapatkan akan sama dengan hasil pada blog sebelumnya, 20 data teratas.
