Я работаю над хранилищем данных, которое, в конце концов, потребует от меня создания отчетов на основе рабочего времени. В настоящее время мое измерение времени детализировано с точностью до часа. Мне интересно, следует ли мне изменить свое измерение «Время», чтобы включить битовое поле для «рабочего часа», или мне следует создать для него какой-то расчетный показатель в конце анализа? Какие-нибудь примеры были бы супер великолепными?


Я не уверен, что это поможет, но я бы использовал UCT для постоянного хранения, а затем имел бы время начала и окончания, чтобы указать рабочие часы. Как только это будет настроено, это будет простая операция If (SpecificHour >= BusinessStartingHour) And (SpecificHour <= BusinessEndingHour) Then ....
Если в вашем псевдокоде BusinessStartingHour находится что-то вроде «8» (для 8 утра), то у вас проблема с полуночью. Если BusinessStartingHour - это что-то вроде «1232402400» (4 утра по восточному стандартному времени сегодня), что, по-видимому, подразумевает ваш комментарий, то вам необходимо вычислять другую метку времени [два раза в день] каждый день.
Это то, что я имел в виду. Однако я думаю, что расчет будет немного более эффективным, чем добавление бита (или совершенно нового столбца) для каждой отдельной отметки времени, хранящейся в базе данных. Однако я мог ошибаться. Думаю, я просто фанат UTC;)
+1 за полезный ответ, даже если не совсем правильный @ [Sparr]: обратите внимание, что отрицательное голосование предназначено для бесполезных ответов, а не неполных ;-) @ [hmcclungiii]: если вы используете StartHour и Duration, тогда проблема с полуночью исчезнет
@ [Sparr]: но спасибо за комментарий, почему вы проголосовали против, это отличная вещь!
Вы можете поиграть и протестировать различные параметры, если используете Microsoft PerformancePoint 2007. Вы можете изменять свои измерения и выводить результаты в виде диаграмм, сводных таблиц, других инструментов отчетности и т. д.
http://office.microsoft.com/en-us/performancepoint/FX101680481033.aspx
Могут ли «часы работы» меняться со временем? Я предполагаю, что я спрашиваю, должна ли каждая строка быть привязана к флагу рабочего времени, или достаточно ли самих отчетов (или какой-либо справочной) таблицы решить, произошла ли эта транзакция в течение рабочего часа или недостаточно.
При прочих равных, я бы, вероятно, попросил отчет сделать это за вас, вместо того, чтобы отмечать строки, но если рабочие часы меняются с течением времени, вам придется пометить строки, чтобы убедиться, что ваши исторические данные остаются правильными.
Все ли ваши данные о продажах находятся в одном часовом поясе? Например, отслеживаете ли вы продажи торговых точек в разных часовых поясах или конечных пользователей в разных часовых поясах? Если это так, вы можете создать это битовое поле для «рабочего часа» в таблице фактов продаж, потому что будет довольно сложно рассчитать это на лету для пользователей и торговых точек в разных часовых поясах.
Кроме того, вам нужно рассчитать это только один раз - когда продажа импортируется в хранилище данных - потому что эти данные вряд ли будут меняться очень часто. Это не значит, что вы скажете: «Раньше эта распродажа проводилась в рабочее время, но теперь это не так».
часы работы - это бизнес-правила, поэтому они могут измениться в будущем
представляют рабочие часы как базовое время и продолжительность, например StartTime 0900, Duration 9,5 часов, таким образом вы можете легко изменить интервал, выполнить сценарии «что, если» на основе разных часов работы, а часы работы могут пересекать линию дат без усложнения запросов.
конечно, все даты должны быть в формате GMT (UTC), никогда по местному времени, чтобы избежать сложностей с переходом на летнее время.
Обновлено: Я думаю, что неправильно понял вопрос, ваши данные уже детализированы по часам ... Нет, я думаю, что мой ответ остается в силе, но с добавлением эффективных дат начала и окончания для интервалов рабочего часа. Это позволит изменить степень детализации в будущем, сохраняя при этом историю.
Я думаю, это суждение ... тот, который зависит от тестирования производительности, использования системы и т. д. Лично я, вероятно, создал бы индексированное поле для хранения флага в интересах работы с логикой, чтобы определить, что есть, а что нет. t авансовый рабочий час (т. е. когда данные загружены). Если все сделано правильно (и снова, в зависимости от конкретного использования), я думаю, вы также сможете получить прирост производительности.
Используйте бит (или даже другой столбец), чтобы указать, является ли час рабочим часом на момент его сохранения. В противном случае, когда вы измените часы работы, вы не сможете воспроизводить исторические отчеты.
Спасибо за голосование против, и я ненавижу быть умником $$, но вы должны были проверить определение UTC, прежде чем предпринимать такие действия. При сравнении UTC на самом деле учитываются такие вещи, как даты, високосные годы, часовые пояса и т. д.