Я использую SSIS, чтобы каждый месяц приносить кучу больших файлов в одну таблицу, которую я вставляю в таблицы SQL Server. Моя таблица фактов - это реальные финансовые транзакции, которые происходят в течение месяца. Это выглядит примерно так:
FactTransactions
'Acct Number' 'Product Number' 'Total Value'
000001 1A 1000
000002 1A 2000
000001 3B 3000
Я хотел бы отследить эту информацию в сравнении с некоторой информацией, созданной вручную, в таблице учетных записей, где «Acct Number» является первичным ключом в Dim Table.
DimAcct
'Acct Number' 'Acct Name' 'Acct Type'
000001 Sales Revenue
000002 Returns Revenue (Contra)
Мой процесс: 1) Очистить таблицу транзакций 2) Перезагрузить все транзакции, включая что-либо новое или исправленное 3) Выполнить анализ с помощью объединений и т. Д.
Когда я перешел на запуск таблиц в новом месяце, я получил следующую ошибку в SSIS:
"The INSERT statement conflicted with the FOREIGN KEY constraint
"FK_GLTransaction_List_Master_DimAccount". The conflict occurred in
database "GLTransactions", table "dbo.DimAccount", column 'Acct_Number'.".
Я предполагаю, что это потому, что новые действия были сделаны и использованы в транзакциях, но я не обновлял вручную свой Dim-файл и не предупреждал о них. Это будет происходить каждый месяц, потому что новые учетные записи Транзакций добавляются, когда они находят новые элементы учета для отдельного отслеживания в своих учетных записях. Я также вручную обновляю таблицу, чтобы добавить несколько учетных записей. Есть ли способ избежать этого или, что лучше, что я должен сделать до / во время запуска служб SSIS, чтобы обработать эти новые учетные записи и избежать ошибки?
2 ответа
Полученное сообщение говорит о том, что в данных, которые вы пытаетесь загрузить в таблицу фактов, есть хотя бы одна запись, ссылающаяся на запись, которой нет в таблице измерений. Как вы загружаете таблицу размеров? Вы загружаете его только перед запуском фактической загрузки? В этом случае вам следует рассмотреть возможность управления так называемым «предполагаемым измерением», то есть измерением, которое вы не знаете до загрузки таблицы фактов. Эта ситуация также упоминается как «ранние факты».
Поэтому вам следует сканировать факты, которые вы пытаетесь загрузить, и искать записи измерений, которых нет в вашей таблице измерений. Затем вы вставите эти записи в таблицу измерений и отметите их как предполагаемые. На этом этапе вы загрузите факт.
Обратите внимание, что пометка этой записи как «Inferred» позволит вам уточнить запись измерения позднее. Допустим, вы вставите предполагаемую учетную запись, для которой вам известен только номер учетной записи (бизнес-ключ), но нет другой информации, такой как описание учетной записи и т. Д. Вы можете обновить эту информацию позже.
Обратите внимание, что в SCD-компоненте SSIS вы можете определить правильное управление Inferred Dimension.
Надеюсь это поможет.
Вы упоминаете, что вы только вручную вставляете таблицы измерений, которые необходимо изменить.
В качестве первого шага процесса служб SSIS необходимо добавить все новые учетные записи как «Новые / Неизвестные» в измерение учетных записей.
Затем у вас будет отчет, который распечатывает эти новые учетные записи, и вы вручную или каким-либо другим образом обновите эти учетные записи, чтобы они содержали правильные данные.
Вы можете прочитать больше о возможных решениях по адресу: https://www.matillion.com/ блог / опоздавший - измерение /
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.