2014-12-30 3 views
3

Я создаю измерение времени только для своего хранилища данных. У меня уже есть измерение даты.Как указать недопустимое время во временном измерении?

Как обозначить неизвестное время? В моем измерении DimDate я отмечен 01/01/1753 как зарезервированный для неизвестных дат, но я думаю, что время будет немного сложнее. Мы не разрешаем NULL в наших таблицах фактов. Как мне это сделать, и какова может быть эта строка?

ответ

0

Это может выглядеть как угодно. Большинство размеров имеют «отображаемое имя» какое-то, так что ваши размеры могут выглядеть примерно так:

create table dbo.DimDate (DateID int, DateValue date, DisplayDate nvarchar(20)) 
go 
-- this is an unknown date; 1753-01-01 is only there because we need some valid date value 
insert into dbo.DimDate values (1, '1753-01-01', 'Unknown') 
go 
-- this is the real date 1 Jan 1753 
insert into dbo.DimDate values (2, '1753-01-01', '01 Jan 1753') 
go 


create table dbo.DimTime (TimeID int, TimeValue time, DisplayTime nvarchar(20)) 
go 
-- this is an unknown time; 00:00 is only there because we need some valid time value 
insert into dbo.DimTime values (1, '00:00', 'Unknown') 
go 
-- this is the real time value for midnight 
insert into dbo.DimTime values (2, '00:00', 'Midnight') 
go 

Конечно, это предполагает, что ваш инструмент и пользователи отчетов использовать столбцы DisplayDate и DisplayTime для фильтрации вместо DateValue и TimeValue, но это просто вопрос обучения и стандартов, и любое решение, которое вы принимаете, должно быть понято в любом случае.

Существуют и другие альтернативы, такие как столбец флагов для неизвестных значений или соглашение о том, что отрицательный TimeID указывает неизвестное значение. Но, на мой взгляд, они менее очевидны и сложнее поддерживать, чем явное значение строки.

0

Просто создайте записи DimTime с помощью технического ключа суррогата -1 и введите в поле времени значение '00:59:59.9999999'. Таким образом, это будет вряд ли время когда-либо захвачена (с точностью до последней цифры) вашей DWH, он всегда будет приравнять к неизвестному в отчетах или запросах, когда вы хотите поставить фильтр, как,

EventTime < @ReportTime AND EventTime <> '00:59:59.9999999' 

Надежда это является жизнеспособным решением вашей проблемы.

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