2014-01-17 4 views
1

У меня есть поток данных, где я группирую записи с помощью элемента управления агрегата. Каждая группа имеет категорию и количество записей.SSIS получить верхние N записей из агрегации в потоке данных

Теперь id точно так же, как выбрать категории с 10 наивысшими значениями и сохранить их в базе данных.

за исключением того, что они зацикливаются на них в компоненте scrip и вставляют их в таблицу, есть другой способ сделать это .. через компонент, который захватывает верхнюю часть 10. что-то вроде процентной выборки.

ответ

1

Вы можете использовать Sort transformation после aggregate transformation. После этого используйте Row Sampling transformation, чтобы получить верхние N строк.

Update:

Если он не работает с преобразованием строк выборки». просто замените это преобразование на «Преобразование сценария». В котором мы могли бы генерировать 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

Да, я использовал скрипт transformtion, но в итоге создал код, который считывает первые 10 строк и передает их через буфер. Как только 10 прошли больше записей, перейдите в выходной буфер, так что только 10 записей вышли на другой конец. Но спасибо за вашу помощь. – user1413844

0

Я бы сбросить совокупные данные из таблицы в & использования T-SQL RANK(), чтобы получить верхнюю 10.

Смежные вопросы