|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Неопределенные значения в многомерной средеМы начнем обсуждение с более простого второго вопроса — о неопределенных элементах в кубе. В качестве примера рассмотрим многомерное пространство, которое собирается на базе отношения «Периоды», представленного плоской таблицей на рис. 1.
Рис. 1. Табличное представление Как видите, таблица содержит всего семь строк, соответственно отношение состоит из семи элементов. Причем у элемента № 6 «Июнь» значение атрибута «Сумма» не определено, а элемент № 7 определен не полностью. Вычислим сначала при помощи обычных операторов SQL возможные агрегатные значения для элементов из таблицы (рис. 2).
Рис. 2. Расчет агрегатных значений Число кортежей с непустыми значениями атрибута «Сумма» считается по формуле COUNT(Сумма) и равно 5. Число элементов в домене атрибута «Месяц» считается по формуле COUNT(Месяц) и равно 6. Сумма всех значений атрибута «Сумма», а также среднее значение атрибута считается по формулам AVG(Сумма) и SUM(Сумма) и равняется 100 и 500 единицам соответственно. Результаты вычислений, приведенные на рис. 2, показывают, что кортеж (Июнь, Null), содержащий пустое (неопределенное) значение в колонке «Сумма», не влияет на значение агрегата по атрибуту «Сумма», но участвует в подсчете числа элементов в колонке «Месяц» — число месяцев в формуле COUNT(Месяц) ожидаемо равно 6. А вот пустой кортеж (Null, Null) вообще никак не влияет на результаты всех вычислений. Посмотрим на отношение «Периоды» с позиций многомерного анализа. Строка 6 является наглядным примером пустой ячейки. Пустая ячейка — это такая ячейка куба, которая находится внутри его логического пространства, но имеет неопределенное значение меры. В нашем случае строка 6 определяет элемент с координатой «Июнь» и пустым значением в поле «Сумма». При расчете агрегатов куба пустая ячейка обычно ведет себя аналогично кортежу со значением «Null» в реляционной среде. В частности, среднее значение меры для набора 1, вычисляемое по формуле Avg([Набор 1]), равно 100, что соответствует значению показателя AVG(Сумма) для отношения «Периоды». Набор 1 { [Янв], [Фев], [Мар], [Апр], [Май], [Июн] } А вот ситуация с числом элементов в Наборе1 не столь однозначная, как может показаться на первый взгляд. С одной стороны, элемент [Июнь] явно присутствует во множестве (Наборе 1), поэтому разумно учесть его в общем количестве. С другой стороны, значение меры для данной ячейки равно Null, а неопределенные значения, как известно, не участвуют в расчете агрегатов (по крайней мере, когда речь заходит о реляционных базах данных). Оказывается, в OLAP-кубах возможна реализация обоих подходов. В зависимости от потребностей пользователя результат может быть равен как пяти, так и шести элементам. Ответ зависит от того, с каким ключом запущен оператор Count() — INCLUDEEMPTY или EXCLUDEEMPTY. По умолчанию он выполняется с параметром INCLUDEEMPTY, то есть с учетом элементов, имеющих неопределенные значения меры. При такой настройке его действие фактически аналогично работе оператора Count(Месяц) из приведенного ранее примера. Если же выбрать альтернативный режим — EXCLUDEEMPTY, то в подсчете будут участвовать только строки, у которых имеются непустые значения в обоих столбцах — «Месяц» и «Сумма». В этом случае число элементов в Наборе 1 будет равно 5. Вывод из всех этих рассуждений довольно простой: пустые ячейки могут влиять на величины отдельных показателей куба, поэтому использовать их нужно очень осмотрительно. Но, кроме пустых ячеек, у кубов имеется еще одна интересная категория пустых элементов — так называемые неопределенные элементы. Они расширяют логическое пространство куба — добавляются в виде новых членов на оси измерений. При этом неопределенным у них является не только значение меры, но и все координаты. В отношении «Периоды» есть строка № 7, содержащая кортеж (Null, Null). Условно его можно считать неопределенным элементом пространства. С учетом строки 7 Набор 1 дополнится новым элементом Null (Набор 2). Набор 2 { [Янв], [Фев], [Мар], [Апр], [Май], [Июн], Null } Действие неопределенного элемента на многомерное пространство похоже на действие пустого кортежа при расчете агрегатных значений в реляционном отношении. В отличие от пустых ячеек, неопределенный элемент не влияет на агрегатные значения, что делает его использование «безопасным» в прикладных расчетах. Допустим, нам требуется на базе Набора 1 составить новый Набор 3, в котором нет элемента [Мар]. Набор 3 { [Янв], [Фев], [Апр], [Май], [Июн] } Такую операцию можно выполнить двумя способами. Первый — явно определить Набор 3 путем перечисления входящих в него элементов. Второй — заменить в Наборе 1 элемент [Мар] на неопределенный «Null»: Набор 4 { [Янв], [Фев], Null, [Апр], [Май], [Июн] } Хотя в Наборе 4 формально присутствует шесть элементов, его участие в групповых расчетах по своему действию неотличимо от Набора 3. Как уже говорилось, неопределенный элемент не изменит итоговые значения любой агрегатной функции. Поэтому в узком смысле Набор 3 и Набор 4 можно считать эквивалентными. Понятно, что аналогичным способом создаются наборы, состоящие из любого подмножества исходного набора. Например, набор, содержащий только элементы [Янв] и [Май], может быть описан следующим образом: Набор 5 { [Янв], Null, Null, Null, [Май], Null } У читателя может возникнуть вопрос, а в чем состоит практическая ценность обсуждаемого подхода? Центральная идея, которую хочется воплотить на практике, заключается в создании такой рабочей среды, которая позволяет пользователю гибко настраивать аналитические отчеты под собственные нужды. Для этого, в частности, у него должна быть возможность на лету формировать наборы для их последующего размещения на осях отчета. Напомним, что основными инструментами по созданию наборов в среде Microsoft Excel являются функция КУБМНОЖ() и оператор конкатенации строк СЦЕПИТЬ(). Функция КУБМНОЖ() является обычной функцией листа Microsoft Excel со всеми вытекающими отсюда последствиями. В ней допускается указывать ссылку на диапазон ячеек, хранящих отдельные элементы набора. Но сам диапазон при этом должен иметь фиксированные границы. Если же пользователю потребуется набор, в котором число элементов меньше количества ячеек в исходном диапазоне, то функция КУБМНОЖ() будет отрабатывать его с ошибкой. Использование оператора СЦЕПИТЬ() приводит к схожей проблеме. Для его работы необходимо явно перечислить аргументы — указать все строки, требующие объединения в единый текст. Поэтому в случае, когда функция СЦЕПИТЬ() написана для слияния пяти текстовых фрагментов, а требуется составить набор только из трех элементов, ее придется прописывать заново. Понятно, что на практике такой подход совершенно неприемлем. К счастью, ситуация легко исправляется, когда в наборе совместно со стандартными используются неопределенные элементы. Рассмотрим очередной практический пример. Допустим, мы хотим предоставить пользователю возможность динамически составлять произвольные наборы на базе Набора 1. Для этого расположим на листе Microsoft Excel шесть элементов управления типа «флажок», каждому из которых дадим название одного из месяцев первого полугодия (рис. 3).
Рис. 3. Использование неопределенных элементов в форме Далее в форме Формат элемента управления на закладке Элемент управления в поле Связь с ячейкой свяжем ее с ячейками из столбца D текущего листа книги. А для ячеек из «Диапазона 1» (столбец F) напишем формулы следующего вида: ЕСЛИ(D6;E6;»Null»). Указанная формула, в зависимости от текущего значения флажка, прописывает в ячейках Диапазона 1 название месяца либо текст «Null». Далее, Диапазон 1 подадим на вход функции КУБМНОЖ(), а ее, в свою очередь, сделаем аргументом для функции КУБПОРЭЛЕМЕНТ(). Из рис. 3 видно, что из всего множества элементов, составляющего Диапазон 1 (см. Набор 6), функция КУБМНОЖ() cформировала новый набор, уже без неопределенных элементов. Поэтому функция КУБПОРЭЛЕМЕНТ() оставила в строках таблицы на листе книги Microsoft Excel только те месяцы, которые были предварительно выбраны при помощи «флажков» на форме. Теперь с каждым новым выделением месяцев на форме при помощи флажков будут одновременно меняться и строки с названиями месяцев в таблице отчета, что и было нашей целью. Набор 6 { Null [Фев], Null, Null, [Май], [Июн] } В качестве небольшого отступления заметим, что пустая ячейка на листе не является для функции КУБМНОЖ() корректным аргументом. Поэтому попытка сформировать множество элементов для функции КУБМНОЖ() посредством явного перечисления нужных месяцев, оставляя оставшиеся строки в диапазоне пустыми, приводит к неизбежной ошибке ее исполнения. На рис. 3 показана такая ситуация. В Диапазоне 2 первые три элемента являются названиями месяцев, а оставшиеся три — пустыми ячейками листа. Соответственно вторая функция КУБМНОЖ(), работающая с Диапазоном 2, вместо результата в виде набора из трех элементов возвращает ошибку «#Н/Д». Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.) |