|
Автор: Александр ДЕНИСЕНКО aden@online.ru, aledin@academy.ru В распространённых системах анализа многомерных кубов в хранилищах данных (типа[1]) группировка элементов по каждой координате (иерархия) задается при создании куба. Если одной из координат является время, то иерархии по другим координатам оказываются динамическими - при этом стандарные функции аггрегирования (сумма значений на нижележащих в иерархии элементах) становятся некорректными. Предлагается один из вариантов решения этой проблемы. Постановка задачи Имеется иерархическая структура и набор элементов. Элементы
отображены на узлы структуры. Пример 1 (Торговля) Имеется разветвленная сеть магазинов, в которой размещены кассовоые аппараты. Аппараты могут перемещаться по отделам, магазинам и территориям. С каждого аппарата поступает кассовая лента, отражающая платежи за товары или услуги. Наблюдателю - управляющему или аналитику (бухгалтеру, аудитору, налоговому инспектору) - необходимы суммарные показатели по различным узлам и уровням сети (магазинам, отделам, территориям) и в заданные интервалы времени.
Пример 2 (Производство) Машиностроительный завод состоит из производственных участков, цехов, отделов и бригад (иерархическая структура). Персонал предприятия - набор элементов (струдников), которые время от времени меняют место в структуре. Для каждого сотрудника ведется ежедневный учет затрат рабочего времени по совокупности позиций (функция). Наблюдатель - сотрудник службы управления персоналом нуждается в оперативном и ретроспектином представлении суммарных показателей табельного учета по узлам иерархии (бригада, цех, отдел, служба) в заданный интервал времени. При этом на протяжении интервала наблюдения происходили перемещения сотрудников по подразделениям. Особенности навигационного подхода Набор программ для каждого из приведенных примеров на любом распространенном языке программирования не очень сложен. Но почти всегда при перемещении элементов он должен меняться в некоторых местах кода, то есть программный код неустойчив. В таких системах как [1] суммарные (и другие аггрегирующие) значения получаются автоматически при навигации наблюдателя по соотвествующим координатам и узлам иерархии. Можно сказать, что типовые фрагменты программного кода автоматически запускаются в ответ на то или иное движение наблюдателя по экрану. Во многих случаях вообще не требуется программного кода либо он незначителен. Это достигается за счет проектирования координат куба в виде иерархической структуры элементов по каждой из координатных осей и встроенных способов получения суммирующих данных при восхождении по иерархии элементов. Однако при смене иерархии (перемещении элементов по узлам) вообще говоря требуется заново формировать куб, что приводит к потере информации об элементах в прошлые моменты времени (в соответствии с отображением элементов на узлы структуры в предшествующие моменты времени). В примере из торговли при перемещении кассового аппарата в другую торговую точку вся итоговая отчетность искажается так, как если бы аппарат все время находился в новом месте. В производственном примере при перестройке куба, необходимой после перемещения сотрудника в другой цех (так называемое обновление куба - термин "refresh" в [1]) рабочее время сотрудника будет зачтено в новом подразделении и утрачено в старом - как если бы он весь период работал на новом рабочем месте. Нам потребуется один вспомогательный термин из смежных проблемных областей - понятие "морф" элемента, то есть его разновидность, зависимая от временного (ударение на предпоследнем слоге) контекста. При перемещении элемента по узлам иерархии создается его новый морф (или редакция). В морфе есть две части - бесконтекстная (постоянная, глобальная, универсальная - примером может служить GUID в [1]) и контекстная (переменная, локальная, динамическая). Отображение элементов на узлы иерархии подменим отображением их морфов на узлы в соответствии с интервалом существования морфа. Остается заменить в функции на каждом элементе (то есть в ленте кассового аппарата или табеле рабочего времени сотрудника) элемент на его текущий морф. Это несложное (однопроходное преобразование) так называемой фактовой таблицы. Теперь наблюдатель увидит действительные значения суммарных показателей, так как аггрегируются данные по морфам, а морфы существуют в каждом узле в пределах интервала времени. Чтобы увидеть данные по каждому элементу за интервал времени, охватыввающий несколько разных его морфов, необходимо все морфы элемента собрать в иерархию, где вышестоящим узлом будет общий для морфов элемент. Все описанные операцию могут быть выполнены стандартными средствами. Несколько сложнее дело обстоит с динамикой не только элементов по узлам иерархии, но самих узлов (переход всей бригады на другой участок, слияние или разделение организаций). В этом случае неободимы также морфы вышестоящих узлов иерархии. И необходимо при порождении нового морфа узла порождать новые морфы для всех его нижележащих элементов. Для удобства навигации между элементом и его морфами можно поместить еще один уровень, отражающий интервал жизни морфа. Так, если наблюдатель пеерместиться в узел, соответствующий магазину и захочет увидеть сводку по кассовым аппаратам, то сводк будет содержать также дополнительную информация о том, в какой интервал времени было то или иное значение итогов. Приведем небольшой пример Штатное расписание завода (иерархическая структура) включает отдел 2, в составе которого две Лаборатории, в которых предусмотрены должности инженеров, экономистов и операторов. В отделе кадров хранится список сотрудников (элементы), среди которых мы выделим Абрамова, Баранова и Васильева. Для удобства перенумеруем рабочие места и сотрудников (фамилии и названия подразделений могут изменяться). Штатное расписание:
Персоналии:
Динамика иерархии: 03 января Борисов переходит из Лаборатории 21 в Лабораторию 22 Фрагмент табеля учета рабочего времени (таблица фактов):
Для Борисова необходимы два морфа с периодами до 3 января и после:
Используем соответствие морфов и штатных единиц:
Теперь преобразуем фактовую таблицу с учетом морфов:
Теперь стандартные функции аггрегирования будут отражать корректные значения функции. Рабочее время Абрамова до 3 января будет учитываться в составе Лаборатории 21, а с 3 января - в составе Лаборатории 22. Если ввести дополнительную координату 'Морф', то наблюдатель сможет увидеть обобщенные значения по каждому сотруднику за весь период. Таблица для этой координаты имеет два столбца - соответственно двум уровням иерархии:
Наконец, для удобства просмотра координаты сотрудников можно ввести дополнительный уровень иерархии - период жизни морфа. Тогда просмотр списка сотрудников по подразделениям предприятия будет содержать дополнительные сведения о времени. В нашем случае при просмотре состава Отдела 2 за год от наблюдателя будет требоваться указать более точно дату, либо он получит несколько вариантов с указанием дат, что вполне согласуется с практическими потребностями. Источники: [1]. Микрософт. SQL2000-OLAP. Электронная документация. |
Автор: Александр Денисенко 2003г. |