我有一個數據流,在這裏我使用集合控件對記錄進行分組。 每個組都有一個類別和一個記錄計數。SSIS從數據流中的彙總中獲得排名前N的記錄
現在,id就像取前10個最高計數的類別並將它們存儲在數據庫中。
除了在scrip組件中循環它們並將它們插入到表中之外,還有另一種方法可以通過抓取前10個元素的組件來完成此操作。
我有一個數據流,在這裏我使用集合控件對記錄進行分組。 每個組都有一個類別和一個記錄計數。SSIS從數據流中的彙總中獲得排名前N的記錄
現在,id就像取前10個最高計數的類別並將它們存儲在數據庫中。
除了在scrip組件中循環它們並將它們插入到表中之外,還有另一種方法可以通過抓取前10個元素的組件來完成此操作。
您可以在aggregate transformation
之後使用Sort transformation
。之後,使用Row Sampling transformation
來獲得您的前N行。
更新:
如果不與行抽樣轉型」的工作。只需用'腳本轉換'替換這個轉換即可。我們可以在其中生成RowNumber。之後,我們可以使用條件分割轉換條件RowNumber < = 10。以便我們可以過濾行。
步驟:
Script component
並選擇它作爲 「transformation
」RowNumber
按照下面的截圖。Conditional Split transformation
和有狀態像ROWNUMBER < = 10所以,現在只有排名前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;
}
希望它可以幫助!
我轉儲聚合數據出到表&使用T-SQL RANK(),以獲得前10
Sampliing似乎隨機選擇的前10行。即使沒有選擇隨機種子選項。數據查看器顯示的數據是正確的,並按正確的順序,當它擊中採樣控制,但隨後它選擇了10個隨機記錄 – user1413844
我已經更新了現在的帖子。希望它有幫助! – Gowdhaman008
是的,我確實使用了轉換腳本,但最終創建了讀取前10行的代碼並將它們傳遞給緩衝區。一旦經過10次,沒有更多的記錄進入輸出緩衝區,所以只有10條記錄出現在另一端。但是,謝謝你的幫助。 – user1413844