Хранилище данных - время работы

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


person madcolor    schedule 19.01.2009    source источник


Ответы (7)


Используйте бит (или даже другой столбец), чтобы указать, является ли час рабочим часом во время его сохранения. В противном случае, когда вы измените часы работы, вы не сможете воспроизвести исторические отчеты.

person Sparr    schedule 19.01.2009

Все ваши данные о продажах относятся к одному часовому поясу? Например, отслеживаете ли вы продажи торговых точек в разных часовых поясах или конечных пользователей в разных часовых поясах? Если это так, вы можете создать это битовое поле для «рабочего часа» в таблице фактов о продажах, потому что будет довольно сложно вычислить это на лету для пользователей и торговых точек в разных часовых поясах.

Кроме того, вы хотите рассчитать это только один раз — когда продажа импортируется в хранилище данных — потому что эти данные вряд ли будут меняться очень часто. Это не значит, что вы собираетесь сказать: «Раньше эта распродажа проводилась в рабочее время, но теперь это не так».

person Brent Ozar    schedule 19.01.2009

часы работы являются бизнес-правилами, поэтому они могут измениться в будущем

представлять рабочие часы как базовое время и продолжительность, например. Время начала 09:00, продолжительность 9,5 часов, таким образом вы можете легко изменить интервал, выполнить сценарии «что, если» на основе разных рабочих часов, а рабочие часы могут пересекать линии дат без усложнения запросов.

конечно, все даты и время должны быть указаны по Гринвичу (UTC), никогда по местному времени, чтобы избежать сложностей с переходом на летнее время.

РЕДАКТИРОВАТЬ: я думаю, что неправильно понял вопрос, ваши данные уже детализированы до часа ... Нет, я думаю, что мой ответ остается в силе, но с добавлением дат эффективного начала и окончания для интервалов рабочего времени. Это позволило бы изменить степень детализации в будущем, сохраняя при этом историю.

person Steven A. Lowe    schedule 19.01.2009

Я не уверен, поможет ли это, но я бы использовал UCT для хранения всех времен, а затем имел время начала и окончания, чтобы указать рабочие часы. Как только это будет настроено, это будет простая операция If (SpecificHour >= BusinessStartingHour) And (SpecificHour <= BusinessEndingHour) Then ....

person hmcclungiii    schedule 19.01.2009
comment
Спасибо за отрицательный голос, и я ненавижу быть smarta$$, но вы должны были проверить определение для UTC, прежде чем предпринимать такие действия. Сравнение UTC фактически учитывает такие вещи, как даты, високосные годы, часовые пояса и т. д. - person hmcclungiii; 20.01.2009
comment
В вашем псевдокоде, если BusinessStartingHour равен примерно 8 (для 8 утра), то у вас есть проблема полуночи. Если BusinessStartingHour — это что-то вроде 1232402400 (4:00 EST сегодня), что, по-видимому, подразумевает ваш комментарий, то вам нужно вычислять другую временную метку [дважды в день] каждый день. - person Sparr; 20.01.2009
comment
Именно это я и имел в виду. Однако я думаю, что вычисление будет немного более эффективным, чем добавление бита (или совершенно нового столбца) для каждой метки времени, хранящейся в базе данных. Впрочем, я могу ошибаться. Наверное, я просто наркоман UTC;) - person hmcclungiii; 20.01.2009
comment
+1 за полезный ответ, даже если он не совсем правильный @[Sparr]: обратите внимание, что голосование против бесполезных ответов, а не за неполные ;-) @[hmcclungiii]: если вы используете StartHour и Duration, проблема полуночи исчезает - person Steven A. Lowe; 20.01.2009
comment
@[Sparr]: но спасибо за комментарий о том, почему вы проголосовали против, это звездный поступок! - person Steven A. Lowe; 20.01.2009

Вы можете поиграть и протестировать различные параметры, если используете Microsoft PerformancePoint 2007. Вы можете изменять свои измерения и выводить результаты в виде диаграмм, сводных таблиц, других инструментов отчетности и т. д.

http://office.microsoft.com/en-us/performancepoint/FX101680481033.aspx

person Sheehan Alam    schedule 19.01.2009

Могут ли «рабочие часы» меняться со временем? Я думаю, я спрашиваю, нужно ли привязывать каждую строку к флагу рабочего времени, или достаточно иметь только сами отчеты (или какую-то справочную) таблицу, чтобы решить, произошла ли эта транзакция в течение рабочего часа или нет.

При прочих равных, я бы, вероятно, попросил отчет сделать это за вас, а не помечать строки, но если рабочие часы изменчивы с течением времени, вам придется пометить строки, чтобы убедиться, что ваши исторические данные остаются правильными.

person SqlRyan    schedule 19.01.2009

Я думаю, что это суждение ... тот, который зависит от тестирования производительности, использования системы и т. Д. Лично я, вероятно, создал бы индексированное поле для хранения флага в интересах работы с логикой, чтобы определить, что есть, а что нет. t за час работы (т. е. когда данные загружены). Если все сделано правильно (и опять же, в зависимости от конкретного использования), я думаю, вы также сможете получить прирост производительности.

person codemonkey    schedule 19.01.2009