Что вам нужно сделать (если я правильно понимаю), это создать два поля в вашей таблице фактов: kTime, kDate.
Мы бы всегда предлагали использовать первичные ключи для DimTime и DimDate как имеющие значение (это особый случай, обычно у предварительных ключей таблиц Dim нет никакого значения). Так, например в DimDate у нас будет kDate в качестве первичного ключа со значениями, отформатированными как YYYYMMDD, так что вы можете упорядочить по kDate и расположить их в порядке дат. Затем создайте таблицу DimTime с первичным ключом kTime в форме ЧЧММ или ЧЧММСС (в зависимости от необходимого разрешения.
Лучше всего сохранять поле фактической даты и времени в таблице фактов, так как это позволяет SQL использовать свои встроенные функции даты / времени для выполнения поднабора, но если вы расширяете свои таблицы Dim полезными дополнительными столбцами: DimDate ( добавьте DayOfWeek, IsHoliday, DayNumber, MonthNumber, YearNumber и т. д.) и DimTime (HourNumber, MinuteNumber, IsWorkingTime), тогда вы сможете выполнять очень интересные запросы очень просто.
Итак, чтобы ответить на ваш вопрос, "как создать ключи даты и времени в таблице фактов с использованием существующего поля даты и времени?" ... при загрузке данных в таблицу фактов используйте встроенные функции даты / времени для создания отдельных полей даты и времени.
В значительной степени это зависит от того, сколько строк вы ожидаете в своей таблице фактов, будет ли этот подход производить много данных, но с ним проще всего работать с точки зрения хранилища данных.
удачи!