2014-08-27 2 views
2

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

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

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

+0

Это всего лишь заказ операций? Можете ли вы создать столбец, затем заполнить его, затем сделать его внешним ключом и изменить его, чтобы не разрешать NULL? –

ответ

2

я собираюсь сделать предположение, как к проблема у вас есть, но это всего лишь предположение: ваш вопрос немного сложно понять.

Я собираюсь сделать предположение, что вы создали таблицу фактов с столбцами x, включая ссылки на размеры Date, Location и Product. Затем вы загрузили эту таблицу фактов с данными.

Теперь вы пытаетесь добавить в эту таблицу новый столбец SalesPerson_SK (или ID). Вы не хотите разрешать значения NULL в базе данных, поэтому вы снимаете флажок «allow NULL». Тем не менее, когда вы пытаетесь сохранить свою работу, таблица ошибочно утверждает, что она не может вставить NULL в столбец SalesPerson_SK.

Существует несколько способов ограничения этого ограничения. Один из них, который, вероятно, лучше всего, если вы все еще находятся в стадии разработки, чтобы выполнить следующую команду:

TRUNCATE TABLE dbo.FactMyFact 

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

Если по какой-то причине, вы не можете сделать это, вы можете alter the table to add the column but include a default constraint, что поставит default value into your fact table, по существу фиктивный запись, которая говорит: «Я не знаю, что это такое»

ALTER TABLE FactMyFact 
ADD Salesperson_SK INT NOT NULL 
CONSTRAINT DF_FactMyFact_SalesPersonSK DEFAULT 0 

Если вы не хотите, чтобы положить значение по умолчанию в таблицу, просто создать столбец и позволить NULL значения, либо установив флажок на странице проекта или выполнив следующую команду:

ALTER TABLE FactMyFact 
ADD Salesperson_SK INT NULL 

Этот ответ был дан на основе на что я думаю ваша проблема: дайте мне знать, если это поможет.

+0

Вау, это точно моя проблема. Извините, я не мог объяснить это очень хорошо. Ваше первое предложение - это то, что было моей первой идеей, но я работаю с ~ 20 миллионами строк, поэтому перезагрузка всех данных каждый раз, когда добавляется новое измерение, вероятно, не сработает, как только это произойдет вживую.Ваши другие предложения имеют смысл, но будут ли возникать проблемы при загрузке данных в SSIS? Если для каждой строки есть значение 0, будет ли она переписываться с фактическим значением поиска? –

+0

Также, обрезает таблицу фактов и перезагружает ее новыми столбцами довольно стандартной практикой? Я пытался решить эту проблему и не видел ничего, объясняющего лучшую практику добавления дополнительных измерений после создания таблицы фактов. –

+1

@BixShmix вам нужно будет настроить SSIS для проверки обновлений в столбце или выполнить одноразовое ручное обновление для выполнения и назначить значение для каждой из уже существующих строк ([точка чтения № 3] (http://www.kimballgroup.com/2001/10/design-tip-29-graceful-modifications-to-existing-fact-and-dimension-tables/)). Я надеялся, что это все еще в dev, так что усечение/перезагрузка будет легким. Если у вас есть неотправляемые данные (например, столбец SCD2 с историей), то обрезание отключается от таблицы. – AHiggins

-2

Dimension внутреннее соединение с таблицей фактов, получить значения от размеров и вставьте в самом деле ...

или же создать тот факт, меньше фактов, как

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