SQL.RU
 client/server technologies
 Главная | Документация | Статьи | Книги | Форум | Блоги | Опросы | Гостевая | Рассылка | Работа | Поиск | FAQ |

Матричная классификация элементов многомерного куба

ПУБЛИКАЦИИ  

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

Постановка задачи. При построении координаты многомерного куба OLAP задаётся иерархия элементов, то есть распределение заданного множества по классам и восходящее (иерархическое) объединение классов в объемлющие классы. При загрузке куба используется так называемая фактовая таблица, строки которой содержат ссылки на атомарные элементы каждой из координат. Например, это могут быть сведения о продаже товара 3 в магазине 17 в день Х. Здесь важно подчеркнуть, что ссылка возможна на единственный элемент координаты!

Аггрегирующая функция куба автоматически суммирует данные о продажах в вышележащие объекты по каждой координате: ото дня в месяц и далее в год, от магазина - в регион и страну, от товара - в класс товаров (товарную группу). Особенность построения иерархии такова, что на каждом уровне у элемента (или класса) может быть указан единственный вышележащий (родительский) элемент (или класс).

Однако во многих приложениях (в частности, в практике финансового анализа, технологических цепях, задачах управления персоналом и т.п.) нормой оказывается отнесение элемента к нескольким классам одновременно. Например, шоколадный ликер входит как в класс напитков, так и в класс кондитерских изделий. Господин N является как сотрудником предприятия M, так и владельцем огорода на территории Т.

Итак, необходимо преодолеть ограничение на единственную ссылку из фактовой таблицы на элементы координатной иерархии.

Требование информационной технологии: минимум нестандартных компонент и возможность оперативной смены содержимого класса.

Предлагаемое решение

Интерфейсная часть. Предлагается использовать обычный проводник Микрософта, причем элементу соответствует файл, а классу - папка. Средствами SQL2000 иерархическая структура папок и файлов преобразуется в координатную таблицу куба OLAP. Ничто не мешает одному и тому же файлу находиться в нескольких папках. Наблюдатель при этом пользуется обычными для него приёмами копирования и перемещения файлов из списка множества по классам. Примечание: в файловой системе NTFS следует использовать разные тома для исходного перечня элементов и динамических классов, так как в этом случае перемещение файла мышкой реализовано как копирование, то есть размножение элемента, что позволяет относить элемент к нескольким разным классам, перемещая его поочерёдно в несколько папок для соответствующих классов).

Имя файла - название элемента, имя папки - класс. Так, возникнут папки для напитков и кондитерских изделий, в каждой из которых окажется файл с названием шоколадного ликёра. Предполагается, что сотрудник с элементарными навыками в состоянии копировать и перемещать файлы по папкам.

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

Технологический приём: в координатной таблице заводим поле для класса, в котором перечисляем классы, к которым принадлежит элемент.

Модификация куба. Создаем динамические (calculeted member в терминах [1]) элементы куба, описание которых на языке MDX содержит признак принадлежности элемента к классу (вхождение подстроки с название класса в строку координатной таблицы - функция INSTR поддерживается MDX Микрософт, но можно использовать и что-нибудь аналогичное).

Итоги. Наблюдатель мышкой раскидывает товары (сотрудников и т.п.) между классами. Нажимает кнопку обновления данных. По кнопке автоматически (невидимо для наблюдателя) вызывается командный файл, который запускает DTSпакет, преобразующий файловую структуру каталога элементов в таблицу SQL. Далее динамические элементы кубы при его обновлении автоматически покажут суммарные сведения по любым классам, указанным для наблюдателя в кубе (возможно, с обновлением виртуального куба или координаты - это зависит от технолога).

P.S. В практике редко осознаётся одна возможность пакетов DTS в [1]: это вариант WRITE FILE. Он очень удобен при формировании координатной таблицы из каталога. Суть его в том, что содержимое, указанное во втором столбце таблицы, автоматически заносится в файл, создаваемый с путём, обозначенным в первом столбце таблицы - по непонятным для автора причинам этот чрезвычайно сильный вариант не рассматривается в известной литературе и материалах, включая 5-дневный фирменный курс Микрософт 2092, посвящённый исключительно DTS. Впрочем, ещё одна трудность возникает с формированием таблицы каталога по его файловой структуре - самый простой способ видится в использовании процедуры xp_cmdshell, в которую не просто подставить параметры - имя текущей папки, но четыре кавычки решают проблему. Использование же VB требует дополнительных затрат, хотя и даёт более корректный результат в условиях оперативной динамики классов.

Проблемы. Предложенное решение не позволяет раскрывать содержимое класса при просмотре наблюдателем содержимого куба. В [1] существует ограничение на число динамических элементов куба в 64 тысячи.

Ссылки:

[1]. Microsoft SQL2000. Электронная документация.

[В начало]

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

Rambler's Top100 Рейтинг@Mail.ru  Administrator: Обратная связь 
Copyright: SQL.Ru 2000-2013