Вопрос или проблема
Мне нужно загрузить файл Excel с помощью SSIS, с форматом, похожим на этот:
EmpID | 08.2024 | 09.2024 |
---|---|---|
12 | 100 | 350 |
и преобразовать его, чтобы он выглядел так:
EmpID | Дата | Значение |
---|---|---|
12 | 08.2024 | 100 |
12 | 09.2024 | 350 |
Общее количество столбцов будет продолжать изменяться. Их количество может увеличиться, чтобы охватить период времени с 11.2024 по 12.2026, но затем диапазон может измениться с 09.2025 по 12.2026. Я не имею контроля над этими изменениями и хотел бы найти автоматизированное решение, вместо того чтобы вручную изменять решение с новым форматом файла.
Можно ли загрузить такой файл Excel, одновременно преобразуя его в SSIS?
Я не очень знаком с возможностями SSIS, и также не знаю C#, если это достижимо через компонент Script.
Я знаю, как делать само преобразование, мой вопрос связан с тем, как я могу это сделать с постоянно изменяющимся заголовком. Я читал о том, как импортировать файл без заголовка и позже сопоставить их в базе данных, но имена заголовков непредсказуемы, поэтому я не могу пойти по этому пути.
Ответ или решение
Вопрос загрузки Excel файла с изменяющимся числом столбцов в SSIS представляет собой интересную задачу, особенно когда вам нужно выполнить процесс «разворачивания» (unpivot) данных. В этой статье мы рассмотрим, как это можно реализовать, принимая во внимание необходимость автоматизации и адаптивности решения.
Шаг 1: Настройка SSIS пакета
-
Создание нового SSIS пакета: Откройте SQL Server Data Tools (SSDT) и создайте новый SSIS проект.
-
Добавление подключения к Excel:
- Используйте компонент
Excel Source
для подключения к вашему Excel файлу. - При настройке соединения выберите ваш Excel файл, а также настройте версию Excel.
- Используйте компонент
-
Динамическое получение метаданных:
- Чтобы работать с изменяющимся числом столбцов, можно настроить динамическое получение метаданных. Для этого вам потребуется выполнить SQL запрос для получения имен столбцов из вашей Excel таблицы.
- Добавьте
Script Task
для выполнения кода на C#. Этот скрипт подключится к файлу Excel и получит список имен столбцов, используя библиотеки, такие какMicrosoft.Office.Interop.Excel
илиEPPlus
.
Шаг 2: Использование скриптов для обработки данных
- Обработка данных в C#:
- В скрипте вам нужно будет открывать Excel файл, получать данные и формировать динамическую структуру данных с помощью
DataTable
. - Создайте
DataColumn
для каждого уникального значения из заголовков, за исключением первого (EmpID).
- В скрипте вам нужно будет открывать Excel файл, получать данные и формировать динамическую структуру данных с помощью
using System.Data;
using System.Data.OleDb;
using ExcelDataReader;
// Пример кода для получения данных
public void Main()
{
string filePath = Dts.Variables["User::ExcelFilePath"].Value.ToString();
using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
var result = reader.AsDataSet();
DataTable excelData = result.Tables[0];
// Обработка строк и подготовка данных для выходного формата
}
}
}
- Сам процесс Unpivot:
- Создайте новую таблицу или
DataTable
, чтобы сохранить результаты «разворачивания». Пройдитесь по каждой строке исходной таблицы и добавьте данные в новую таблицу. - Пример процесса разворачивания:
foreach (DataRow row in excelData.Rows) { string empID = row[0].ToString(); for (int i = 1; i < excelData.Columns.Count; i++) { string date = excelData.Columns[i].ColumnName; string value = row[i].ToString(); // Добавление в новую таблицу (или другие структуры данных) } }
- Создайте новую таблицу или
Шаг 3: Загрузка данных в базу данных
- Использование ADO.NET:
- После получения всех данных в нужном формате создайте
OleDbConnection
илиSqlConnection
для загрузки данных в вашу целевую базу данных. - Используйте
SqlBulkCopy
для быстрой загрузки данных в SQL Server или просто выполните поэлементную вставку черезINSERT
.
- После получения всех данных в нужном формате создайте
Заключение
Этот подход позволяет создать адаптивное и автоматизированное решение для загрузки Excel файлов с варьирующимся числом столбцов и последующим разворачиванием данных. Использование Script Task
и динамического извлечения метаданных делает вашу работу намного более гибкой, что позволяет легко адаптироваться к изменениям в формате файла.
С помощью вышеперечисленного решения вы сможете соответствовать потребностям вашего бизнеса, обеспечивая высокую скорость и точность обработки данных.