2013-08-03 2 views
1

Я изучаю, как на этой неделе разрабатывать пакеты SSIS для систем ETL. Одна из моих первых целей - открыть различные способы импорта плоских файлов в базу данных. Поскольку это довольно прямолинейно по большей части, я играл с разными плоскими файлами, которые содержат множество данных.SSIS Package, который удаляет или игнорирует несколько строк в плоском файле

Одна проблема, с которой я столкнулся сегодня, - это документ Excel, содержащий данные в первой строке, информацию заголовка во второй строке и информацию о ноге в последних парах строк. То, что я хочу импортировать в базу данных, - это заголовок и все строки, ведущие к нижнему колонтитулу. Мне не нужна первая строка, и я не хочу нижний колонтитул.

Мое настоящее решение заключается в создании задачи потока данных в предварительных настройках и OpenRowSet с помощью «Sheet1 $ A2: I20000». Это позволяет мне открыть лист, который я хочу, выбрать вторую строку (где находится мой заголовок), а затем выбрать все остальные строки, находящиеся между A2 и I20000.

enter image description here

Это решение также позволяет мне читать информацию заголовка (который я хочу) и все строки, которые следуют за импорт. К сожалению, это также выбирает строки нижнего колонтитула и не оптимизируется для хорошей производительности, так как пакет должен сканировать массивный ряд строк, независимо от того, есть ли данные в этих строках или нет.

Снимок экрана ниже содержит лист Excel, который я пытаюсь импортировать на основе базы данных MS SQL. Строки, которые я хочу удалить или игнорировать, - это круги с красным полем. Все, что не кругом, - это то, что я хочу импортировать.

Любые мысли о том, как я могу игнорировать первую строку, прочитайте вторую строку для моей информации заголовка, прочитать строки, которые следуют заголовок для моего набора данных, а затем игнорировать последние пару строк, которые я Я считаю, что нижний колонтитул?

Добавление Информация об этом файле

  • Первая строка никогда не изменится.
  • Строка заголовка никогда не изменится.
  • Набор данных после заголовка изменит значения, а не типы данных.
  • Первый столбец нижнего колонтитула никогда не изменится.
  • Второй столбец нижнего колонтитула изменит значения, а не типы данных.
  • Остальные столбцы нижнего колонтитула никогда не будут меняться.
+0

Будут ли строки, которые вы хотите отправить в пункт назначения OLE DB, всегда начинаются с строки 2?Почему вы хотите захватить строку заголовка? Сохраняете ли вы данные строки заголовка в пункте назначения OLE DB? Строки, которые вы хотите игнорировать, всегда будут иметь SUM Total в первом столбце? – jymbo

+0

Я хочу захватить строку заголовка, чтобы она никогда не менялась. Я могу просто поместить этот заголовок в новую таблицу сам по себе для проверки. Наверное, для этого примера мне это действительно не нужно. И да к последнему вопросу. SUM TOTALS всегда будут в конце и в первом столбце файла. – Fastidious

ответ

1

Я выяснил решение своего вопроса.

Я использовал условное разделение, как показано на моей диаграмме, для фильтрации строк, которые мне не нужны. Например, я поставил условие, которое проверяет, был ли первый столбец данных (member_no) равен < (меньше) числа. Если TRUE, он переходит к моей OLE DB. Если False, это никуда не годится. Это предотвратило передачу «SUM TOTAL» в базу данных.

Я также редактировал свой начальный диапазон с помощью «Sheet1 $ A2: I» в отличие от «Sheet1 $ A2: I20000». Таким образом, пакет сканирует, пока нет записей для сканирования и остановок (я полагаю).