Навигация по времени в OLAP: недели и месяцы

ПУБЛИКАЦИИ  

Автор: Александр ДЕНИСЕНКО aden@online.ru, aledin@academy.ru

Одна из проблем навигации по координате времени во многомерных кубах заключается в несовместимости недельного и месячного календарей. С одной стороны, вышележащим в иерархии объектом для суток бывает месяц (выше - квартал и/или год), а бывает - что неделя. Неделя не сворачивается в месяц - её начало может оказаться в одном месяце, а окончание - в другом. Системы типа [1] допускают работу с такими объектами, но довольно сложными приёмами. Традиционное представление об иерархии не допускает такого: представьте файл, разорванный между двумя папками. Или матрешку, голова которой находится в одной материнской игрушке, а низ - в другой. К сожалению, использование нескольких иерархий по одной координате имеет некоторые проблемы в реализации - так, например, в [1] не удается использовать одну координатную таблицу для двух разных иерархий времени - понедельной и помесячной.
На практике есть и ещё одна техническая неприятность: разная нумерация дней недели в разных культурах. В Западной неделя начинается с воскресенья, в нашей - с понедельника. Это приводит к некорректной работе многих стандартных функций работы с датами (одна и та же неделя имееет разные порядковые номера с разных точек зрения). В [1] имеется специальная операция установки первого дня недели, но она имеет ограниченное действие (в пределах сеанса соединенния клиента с сервером). В части [1], касающейся многомерного анализа, такую операцию вообще не удалось обнаружить. Это еще один аргумент в пользу наличия собственных встроенных календарей.
Анализ продаж как правило требует обоих иерархий, причем в двух вариантах: включая или исключая осколки "разорванных" недель месяца.
Например, в июле 2003 года пять недель - первая неделя июля начинается со вторника, пятая заканчивается четвергом. Проблема в том, что понедельник первой недели и посление три дня пятой недели требуется включать в обобщенные показатели или не включать - по желанию наблюдателя.
Был предложен следующий вариант решения. Создаем две координаты времени как стандартные иерархии, одну - с уровнями "день", "месяц", "год"; другую - с уровнями "День" и "неделя". Недели занумерованы "От Адама", то есть как и годы (от Сотворения Мира, Рождества или начальной даты Микрософта, Хиждры и т.д. - как правило хватает периода существования фирмы). Для удобства наблюдателя недели поименованы граничными датами.
Далее - дублируем поле даты в фактовой таблице. Первое поле - Дата1 - ссылается на помесячный календарь, а второе поле - Дата2 - на недельный. В навигаторе появляются две разные координаты. С математической точки зрения мы погружаем наш куб в пространство размерности на единицу больше начального. Дополнительная координата совпадает с начальной координатой даты. Можно представить себе, что наш кубик "расплющен" по диагонали, образованной двумя координатами (Дата1=Дата2 по построению).
В итоге наблюдатель волен захватывать или исключать из обобщенных показателей осколки пограничных недель - то есть в нашем примере - 30 июня (понедельник, первый день первой "июльской" недели и 1,2,3 августа - хвост пятой "июльской" недели). Для исключения обрывков достаточно по недельной координате выбрать требуемые недели, а по месячной указать "июль".
Для захвата голов и хвостов достаточно в помесячной координате снять все ограничения (указать имя всей координаты вроде 'ALL').

[В начало]


Автор: Александр Денисенко  2003г.

ПУБЛИКАЦИИ

Скачать электронную карту Ангарска бесплатно
Сайт управляется системой uCoz