2014-01-17 67 views
1

我有一個數據流,在這裏我使用集合控件對記錄進行分組。 每個組都有一個類別和一個記錄計數。SSIS從數據流中的彙總中獲得排名前N的記錄

現在,id就像取前10個最高計數的類別並將它們存儲在數據庫中。

除了在scrip組件中循環它們並將它們插入到表中之外,還有另一種方法可以通過抓取前10個元素的組件來完成此操作。

回答

1

您可以在aggregate transformation之後使用Sort transformation。之後,使用Row Sampling transformation來獲得您的前N行。

更新:

如果不與行抽樣轉型」的工作。只需用'腳本轉換'替換這個轉換即可。我們可以在其中生成RowNumber。之後,我們可以使用條件分割轉換條件RowNumber < = 10。以便我們可以過濾行。

步驟:

  1. 添加Script component並選擇它作爲 「transformation
  2. 創建列如下存儲RowNumber按照下面的截圖。
  3. 將這些添加到代碼庫
  4. 添加Conditional Split transformation和有狀態像ROWNUMBER < = 10

enter image description here

所以,現在只有排名前10位的行會被選中

代碼:

//variable to store row number 
private int counter 


//Add this method, which is automatically called once. 
public void New() 
{ 
    counter = 0; 
} 

//Edit the following to increment the counter 
public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 
    counter += 1; 

    Row.RowNumber = counter; 

} 

希望它可以幫助!

+0

Sampliing似乎隨機選擇的前10行。即使沒有選擇隨機種子選項。數據查看器顯示的數據是正確的,並按正確的順序,當它擊中採樣控制,但隨後它選擇了10個隨機記錄 – user1413844

+0

我已經更新了現在的帖子。希望它有幫助! – Gowdhaman008

+0

是的,我確實使用了轉換腳本,但最終創建了讀取前10行的代碼並將它們傳遞給緩衝區。一旦經過10次,沒有更多的記錄進入輸出緩衝區,所以只有10條記錄出現在另一端。但是,謝謝你的幫助。 – user1413844

0

我轉儲聚合數據出到表&使用T-SQL RANK(),以獲得前10