Я работаю над хранилищем данных, которое, в конце концов, потребует от меня создания отчетов на основе рабочих часов. В настоящее время мое измерение времени гранулировано до часа. Мне интересно, следует ли мне изменить измерение времени, чтобы включить битовое поле для «рабочего часа», или мне следует создать для него какую-то вычисляемую меру в конце анализа? Любые примеры были бы супер великолепными?
Хранилище данных - время работы
Ответы (7)
Используйте бит (или даже другой столбец), чтобы указать, является ли час рабочим часом во время его сохранения. В противном случае, когда вы измените часы работы, вы не сможете воспроизвести исторические отчеты.
Все ваши данные о продажах относятся к одному часовому поясу? Например, отслеживаете ли вы продажи торговых точек в разных часовых поясах или конечных пользователей в разных часовых поясах? Если это так, вы можете создать это битовое поле для «рабочего часа» в таблице фактов о продажах, потому что будет довольно сложно вычислить это на лету для пользователей и торговых точек в разных часовых поясах.
Кроме того, вы хотите рассчитать это только один раз — когда продажа импортируется в хранилище данных — потому что эти данные вряд ли будут меняться очень часто. Это не значит, что вы собираетесь сказать: «Раньше эта распродажа проводилась в рабочее время, но теперь это не так».
часы работы являются бизнес-правилами, поэтому они могут измениться в будущем
представлять рабочие часы как базовое время и продолжительность, например. Время начала 09:00, продолжительность 9,5 часов, таким образом вы можете легко изменить интервал, выполнить сценарии «что, если» на основе разных рабочих часов, а рабочие часы могут пересекать линии дат без усложнения запросов.
конечно, все даты и время должны быть указаны по Гринвичу (UTC), никогда по местному времени, чтобы избежать сложностей с переходом на летнее время.
РЕДАКТИРОВАТЬ: я думаю, что неправильно понял вопрос, ваши данные уже детализированы до часа ... Нет, я думаю, что мой ответ остается в силе, но с добавлением дат эффективного начала и окончания для интервалов рабочего времени. Это позволило бы изменить степень детализации в будущем, сохраняя при этом историю.
Я не уверен, поможет ли это, но я бы использовал UCT для хранения всех времен, а затем имел время начала и окончания, чтобы указать рабочие часы. Как только это будет настроено, это будет простая операция If (SpecificHour >= BusinessStartingHour) And (SpecificHour <= BusinessEndingHour) Then ...
.
Вы можете поиграть и протестировать различные параметры, если используете Microsoft PerformancePoint 2007. Вы можете изменять свои измерения и выводить результаты в виде диаграмм, сводных таблиц, других инструментов отчетности и т. д.
http://office.microsoft.com/en-us/performancepoint/FX101680481033.aspx
Могут ли «рабочие часы» меняться со временем? Я думаю, я спрашиваю, нужно ли привязывать каждую строку к флагу рабочего времени, или достаточно иметь только сами отчеты (или какую-то справочную) таблицу, чтобы решить, произошла ли эта транзакция в течение рабочего часа или нет.
При прочих равных, я бы, вероятно, попросил отчет сделать это за вас, а не помечать строки, но если рабочие часы изменчивы с течением времени, вам придется пометить строки, чтобы убедиться, что ваши исторические данные остаются правильными.
Я думаю, что это суждение ... тот, который зависит от тестирования производительности, использования системы и т. Д. Лично я, вероятно, создал бы индексированное поле для хранения флага в интересах работы с логикой, чтобы определить, что есть, а что нет. t за час работы (т. е. когда данные загружены). Если все сделано правильно (и опять же, в зависимости от конкретного использования), я думаю, вы также сможете получить прирост производительности.