Преобразование по умолчанию из datetimeoffset в datetime просто усекает смещение и возвращает часть смещения даты и времени по местному времени, что приводит к дублированию значений во время изменений летнего времени.
Как говорит ошибка, вам понадобитсяодна строка в DimTime для каждого 15-минутного интервала.
Вам нужно будет преобразовать все даты в один часовой пояс, чтобы загрузить таблицу дат.Обычное магическое заклинание для этого в SQL Server - convert(datetime2(0), [dto_column],1)
, которое заканчивается временем UTC.
например:
declare @t table(dso datetimeoffset)
insert into @t values ('2018-10-28 01:45:00.0000000 +01:00'),('2018-10-28 01:00:00.0000000 +00:00')
select dso,
convert(datetime2(0), dso,1) dt_utc
from @t
вывод
dso dt_utc
---------------------------------- ---------------------------
2018-10-28 01:45:00.0000000 +01:00 2018-10-28 00:45:00
2018-10-28 01:00:00.0000000 +00:00 2018-10-28 01:00:00
Тогда, если вам действительно нужно знать, в какое время суток произошло конкретное событие, оно будет сохраненона самом деле, а не измерение даты.Но для большинства сценариев это не важно для отчетности.