Сайт о телевидении

Сайт о телевидении

» » Кубы данных olap. Введение в OLAP и многомерные базы данных. Работа с данными

Кубы данных olap. Введение в OLAP и многомерные базы данных. Работа с данными

Ровно четыре года назад в КомпьютерПресс 3’96 была опубликована наша первая статья под названием “Советы для тех, кто программирует на Visual Basic”. В ней было всего три совета, но, честно говоря, в тот момент мы не думали, что их число будет расти и к сегодняшнему дню достигнет предела значения байтовой переменной - 255.

Но мы надеемся, что проблем с переполнением счетчика не будет: двухбайтная Integer обеспечит еще несколько лет для счета советов, а там можно будет перейти и к Long.

Кстати, появление этого цикла статей именно в КомпьютерПресс было совсем не случайным: еще за четыре года до этого, в 1991 году, также в мартовском номере журнала появилась статья “QuickBASIC - это то, что вам нужно”, которая стала нашей первой публикацией в только зарождавшейся тогда отечественной компьютерной прессе.

Наш читатель прислал письмо, в котором рассказывает о следующей проблеме. Необходимо программным образом скопировать содержимое ячеек из таблицы одной рабочей книги в таблицы другой. Для этого он написал такую макрокоманду в рабочей книге Macros.xls:

Sub Макро1() Workbooks.Open Filename:="Source.xls" " открываем книгу Source.xls Cells.Select " выделяем все ячейки в активной таблице Selection.Copy " копируем в буфер обмена ActiveWindow.Close " закрываем активную таблицу " теперь активной стала текущая таблица книги Macros.xls Range("A1").Select " начальная позиция для вставки ActiveSheet.Paste " вставка из буфера обмена End Sub

Однако результат выполнения копирования из таблицы книги Source.xls с помощью этой макрокоманды отличался от ожидаемого как в среде Excel 97, так и в Excel 2000 (с помощью команд в среде пакета эта операция выполняется верно):

Из этих данных видно, что ошибка копирования каким-то образом связана с неверным использованием региональных установок (хотя работа велась в среде русскоязычных Windows и Office) - очевидна путаница русских и английских установок в Excel 97.

Так 12,12 с точки зрения RegionalSetting = 1033 (США) является просто символьной строкой. И в данном случае она копируется как символьная строка (обратите внимание, что после выполнения Макро1 в Excel 97 ячейка стала выровнена по левому краю). А 5,559 представляет (для установок США) целое число с точкой в качестве разделителя триад. При вставке же этого числа используется русский разделитель триад - пробел. Нечто аналогичное, но плохо поддающееся логическому объяснению, происходит с числом 5,7777.

Содержимое же четвертой ячейки - 5.559 - в Source.xls является символьной строкой, выровненной по левому краю. Но для установок США это число с десятичной точкой, которая в русской языке меняется на запятую (и, соответственно, выравнивается по правому краю). Эта же ошибка имеет место в Excel 2000.

Механизм ошибки понятен, но что же делать? Как копировать ячейки?

По нашей просьбе служба технической поддержки в России занялась этой проблемой и после запроса в европейский центр получила такой ответ:

«Переменная копируется как текстовая строка в буфер обмена, после чего исходная книга закрывается и выполняется вставка во вторую книгу. Excel старается преобразовать ее в вид по своему усмотрению и делает это неверно.

Но все будет работать нормально, если держать исходную рабочую книгу открытой до окончания вставки данных».

И действительно, все работает без ошибок, если использовать для копирования такой вариант макроса:

Sub Макро2() Workbooks.Open FileName:="c:\Source.xls" Cells.Select Selection.Copy " делаем активной книгу Macros.xls Workbooks("Macros.xls").Activate Range("A1").Select ActiveSheet.Paste " вставка " только теперь закрываем исходную книгу Workbooks("Source.xls").Close End Sub

Еще один совет из службы поддержки Microsoft: без особой нужды не следует копировать таблицу целиком - используйте только тот диапазон, который вам действительно нужен. То есть вместо

Cells.Select

в данном случае лучше написать:

Range("A1:E2").Select

При тестировании прилагаемых программных примеров необходимо файл Source.xls скопировать в каталог C:\ или указать другой путь к файлу в коде макросов.

Если вы создаете программы с достаточно длительными вычислительными процедурами, то бывает очень полезным обеспечить возможность аварийного прерывания этих процессов. Например, щелкнуть мышью на кнопке в форме. Рассмотрим один из вариантов решения этой задачи.

Предположим, у вас в модуле Process.bas есть некая вычислительная процедура. Идея реализации механизма ее прерывания заключается в использовании некоторого флага (глобальная переменная), состояние которого отслеживается внутри процедуры и который может изменяться другой внешней процедурой.

В этом случае модуль Process.bas может выглядеть приблизительно так:

Global ProcessFlag% " флаг управления процессом, глобальная переменная Public Sub Process(Result%) " имитация некоего процесса " Result возвращает флаг окончания процесса " 1 - закончился сам, 0 - внешнее аварийное завершение " ProcessFlag = 1 " флаг начала процесса For i& = 1 To 1000000 " увеличить длину цикла, если слишком малое время задержки If ProcessFlag = 0 Then Exit For "проверка флага Value# = 100 / 0.3 * 1.5 / 2.3 Next Result = ProcessFlag End Sub

Теперь создадим форму frmInterrupt, на которой поместим кнопку с названием "Щелкни здесь, чтобы прервать процесс Process". Для кнопки напишем такую процедуру:

Private Sub Command1_Click() ProcessFlag = 0 " очистка глобального флага End Sub

Public Sub Main() " процедура для демонстрации механизма прерывания " некоего вычислительного процесса frmInterrupt.Show 0 " открываем форму в немодальном режиме Call Process(Result%) " запускаем форму Unload frmInterrupt " выгружаем форму " анализ кода завершения процедуры MsgBox "Результат завершения процедуры = " & Result% End Sub

Внешне все выглядит правильно, но, запустив проект на выполнение, мы обнаружим, что произвести прерывание процесса не удается. Более того, даже форма не прорисовывается до конца. Подобный вопрос мы обсуждали месяц назад в советах 246-247: дело в том, что вычислительный цикл съедает все ресурсы компьютера, не давая выполняться другим процессам приложения. Для решения этой проблемы необходимо внутрь вычислительного цикла вставить функцию DoEvents, которая передает управление операционной системе для выполнения других процессов.

Однако вариант

For i = 1 To 1000000 DoEvents " передача управления другим процессам If ProcessFlag = 0 Then Exit For "проверка флага Value# = 100 / 0.3 * 1.5 / 2.3 Next

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

For i = 1 To 1000000 If i Mod 100000 Then " проверка один раз на 100 000 циклов DoEvents " передача управления другим процессам If ProcessFlag = 0 Then Exit For " проверка флага End If Value# = 100 / 0.3 * 1.5 / 2.3 Next

В этом случае DoEvents будет занимать лишь 1% от полезных вычислений.

К сожалению, такой вариант решения задачи отслеживания двух параллельных процессов представляется не самым лучшим, но таковы уж реалии Windows.

Короче говоря, совет такой: для обеспечения прерывания вычислительных задач по ходу программы расставляйте (но не очень часто) подобные конструкции:

DoEvents If ProcessFlag = 0 Then Exit something

Совет 253. Как решить проблему с сохранением проектов с цифровой подписью

В ряде случаев в Office 2000 возникает ситуация, когда пользователь не может сохранить проект (документ с макрокодом) с электронной подписью - запись документа возможна только без подписи. При этом выдается неверная диагностика о нехватке места на диске.

В данном случае имеет место программная ошибка, которая, как мы надеемся, будет исправлена. На самом же деле она проявляется только в тех проектах, которые содержат внутренние синтаксические ошибки в коде. Поэтому, встретив подобное сообщение о невозможности сохранения документа с электронной подписью, мы рекомендуем вам, прежде чем отменять подпись, проверить работоспособность вашего кода. Довольно часто ошибка связана с отсутствием описания переменной или ссылки на внешний объект.

Чтобы лучше понять суть ситуации, сделайте такой простой пример в Word.

Создайте новый документ и перейдите в среду VBA. Там создайте макрокоманду Test1:

Sub Test1 () Avar = 1 End If

Разумеется, сначала должен быть задан режим Option Explicit (обязательное объявление переменных).

Теперь установите электронную подпись и попробуйте сохранить документ. Скорее всего, у вас появится сообщение о нехватке места на диске для записи файла.

Запустите макрокоманду Test1 на выполнение - транслятор выдаст сообщение о синтаксической ошибке (не определена переменная Avar). Добавьте в процедуру описание:

Dim Avar As Integer

Теперь макрокоманда станет выполняться (правда, не делая ничего полезного), и документ тоже без проблем сохранится с электронной подписью.

Совет 254. Как автоматически определить кодовую таблицу для русских текстов

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

  1. Это необходимо при загрузке Web-страниц в браузер, текстовых файлов - в Word или при работе с почтовыми программами (гораздо лучше поступать так, чем заниматься перебором разных вариантов кодировок).
  2. Это нужно для дополнительного контроля при преобразовании кодов файлов. Например, мы постоянно осуществляем преобразование HTML-страниц из Windows в KOI8 (наш Web-сервер работает под UNIX), но при этом порой из-за невнимательности либо делаем двойную перекодировку, либо неправильно устанавливаем исходный код, либо вообще пропускаем файлы.

Идея автоматического определения кодировки русских текстов достаточно очевидна: необходимо определить частоту попадания кодов 128-255 (&h80-&hFF) в различные числовые диапазоны. Понятно, что основное количество этих кодов приходится именно на русские буквы (в старшей половине кодовой таблицы находится также ряд специальных символов типа «№», открывающих-закрывающих кавычек, Copyright и др.), причем строчных букв гораздо больше, чем прописных.

В таблице приведены результаты подсчета такой статистики для довольно типичного русскоязычного текста, которые получены с помощью подпрограммы CodeTableTest (листинг 1). Тут хорошо видно, что строчные буквы попадают в разные числовые диапазоны для разных кодовых таблиц. Любопытно также отметить, что частота появления букв первой половины русского алфавита (от "а" до "п") в два раза выше, чем частота букв от "р" до "я". Соответственно, если принять за условие, что процент строчных русских букв среди кодов 128-255 превышает заданную величину, например, Lpercent = 0,70, то критерий определения кодовой таблицы будет выглядеть таким образом:

Windows частота (&hE0-&hFF) > Lpercent
KOI8-R частота (&hC0-&hDF) > Lpercent
DOS частота (&hA0-&hAF + &hE0-&EF) > Lpercent
ISO частота (&hD0-&hEF) > Lpercent

Единственная проблема здесь заключается в идентификации различных кодировок Windows и Macintosh, у которых диапазоны кодов русских строчных букв почти совпадают. Но тут можно осуществить дополнительную проверку, которая основана на том, что в Windows практически не используются коды в диапазоне &h80-&h8F, а прописные буквы от "А" до "П" (&hC0-&CF) составляют значительную величину, тогда как в Macintosh ситуация для этих же диапазонов диаметрально противоположная.

Функция NumberTableTest, реализующая описанный выше алгоритм, приведена в листинге 1 .

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

Open SourceFile$ For Binary As #1 LenS = LOF(1) ReDim bytSourceArray(1 To LenS) As Byte Get #1, bytSourceArray Close #1

Если же вам нужно преобразовать данные, изначально представленные в виде строковой переменной, то следует выполнить такое преобразование:

BytSourceArray() = StrConv (SourceString$, vbFromUniCode, &h419)

Совет 255. Как определить кодировку текста: еще один вариант

Алгоритм, приведенный в предыдущем совете, не работает в случае неверной перекодировки текста, то есть когда исходные данные уже не соответствуют ни одной из кодовых таблиц. (Когда, например, текст, записанный в Windows, ошибочно преобразуется «из DOS в любой другой».) В таких случаях восстановление текста порой бывает вообще невозможно, но в любом случае подобную ситуацию полезно идентифицировать.

С проблемой перекодировки мы чаще всего сталкиваемся при создании собственных HTML-страниц, предназначенных для размещения на Web-сервере. Для контроля реальной кодовой таблицы в данном файле можно использовать следующий прием. (Мы сами выполняем сканирование обновлений локального варианта нашего сервера перед их записью на удаленный компьютер в целях обнаружения подобных ошибок.)

В каждую новую HTML-страницу вставляется строка комментария, в которую включены все буквы русского алфавита, кроме «ё» (такая строка автоматически создается нашим простеньким генератором страниц):

Конечно, можно минимизировать число используемых символов, но полный их набор точно гарантирует нужное решение.

Программный код утилиты TstCode2, которая проверяет код отдельного файла, приведен в листинге 2 . Ключевой процедурой здесь является NumberTableTestKey, выполняющая идентификацию символьного кода.

В свой реальной работе для проверки кодовой таблицы текстовых и HTML-файлов мы пользуемся утилитой TestCode (рис. 1), которая применяет комбинацию двух описанных выше методов.

КомпьютерПресс 3"2000

OLAP (On-Line Analytical Processing) – это способ электронной аналитической обработки данных, представляющий организацию данных в иерархические категории с использованием предварительно рассчитанных итоговых значений. Данные OLAP упорядочены иерархически и хранятся не в таблицах, а в кубах. Кубы OLAP представляют собой многомерный набор данных с осями, на которых отложены параметры, и ячейками, содержащими зависящие от параметров агрегатные данные. Кубы предназначены для комплексного многомерного анализа больших объемов данных, поскольку они предоставляют для отчетов только сводные результаты, вместо большого числа отдельных записей.

Концепция OLAP была описана в 1993 г. известным исследователем баз данных и автором реляционной модели данных Э. Ф. Коддом. В настоящее время поддержка OLAP реализована во многих СУБД и иных инструментах.

Куб OLAP содержит два типа данных:

· итоговые значения, значения, для которых требуется подвести итог, представляющие вычисляемые поля данных ;

· описательные сведения, представляющие измерения или размерности . Описательные сведения обычно распределяются по уровням детализации. Например: «Год», «Квартал», «Месяц» и «День» в размерности «Время». Распределение полей по уровням детализации позволяет пользователям, работающим с отчетами, выбирать требуемый уровень детализации для просмотра, начиная с итоговых данных высокого уровня и затем переходя к более подробному представлению, и наоборот.

Средства Microsoft Query также позволяют создавать кубы OLAP из запроса, который загружает данные реляционной базы данных, например Microsoft Access, при этом происходит преобразование линейной таблицы в структурную иерархию (куб).

Мастер создания куба OLAP является встроенным средством Microsoft Query. Для создания куба OLAP на основе реляционной базы данных перед запуском мастера необходимо выполнить следующие действия.

1. Определить источник данных (см. рис. 6.1).

2. С помощью Microsoft Query создать запрос, включая в него только те поля, которые будут являться либо полями данных, либо полями размерностей куба OLAP, если поле в кубе используется больше одного раза, то его необходимо включить в запрос нужное число раз.

3. На последнем шаге мастера создания запросов установить переключатель на пункте Создание куба OLAP из данного запроса (см. рис. 6.2) или после того как запрос создан средствами непосредственно Query в меню Файл выбрать команду Создать куб OLAP , после чего мастер создания куба OLAP будет запущен.

Работа мастера создания куба OLAP состоит из трех шагов.

На первом шаге мастера (см. рис. 6.6) определяются поля данных –вычисляемые поля, для которых необходимо определить итоговые значения.



Рис. 6.6. Определение полей данных

Предполагаемые вычисляемые поля (обычно это числовые поля) мастер размещает в верхнюю часть списка, отмечает флажками и определяет итоговую функцию этих полей, обычно – Сумма . При выборе полей данных хотя бы одно поле должно быть выбрано в качестве вычисляемого поля и хотя бы одно поле должно остаться неотмеченным для определения размерности.

При создании OLAP куба можно использовать четыре итоговых функции – Сумма , Число (количество значений), Минимум , Максимум для числовых полей и одну функцию Число для всех остальных полей. Если нужно использовать несколько различных итоговых функций одного и того же поля, это поле должно быть включено в запрос нужное количество раз.

Имя вычисляемого поля можно изменить в столбце Имя поля данных .

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

Рис. 6.7. Определение полей измерений

Поля, содержащие изолированные или обособленные данные и не принадлежащие к иерархии, можно определить как размерности с одним уровнем. Однако использование куба будет более эффективным, если некоторые из полей организованы в уровни. Чтобы создать уровень в составе размерности, перетащите поле из списка Исходные поля на поле, являющееся размерностью или уровнем. Поля, содержащие более подробные сведения, должны располагаться на более низких уровнях. Например, на рисунке 6.7 поле Должность является уровнем поля НазваниеОтдела .

Чтобы переместить поле на более низкий или более высокий уровень, нужно перетащить его на более низкое или более высокое поле в составе размерности. Для отображения или скрытия уровней используются соответственно кнопки или .

Если в качестве размерности верхнего уровня используются поля даты или времени, мастер создания куба OLAP автоматически создает уровни для этих размерностей. Пользователь может затем выбрать, какие уровни должны присутствовать в отчетах. Например, можно выбрать недели, кварталы и годы, или же месяцы (см. рис. 6.7).

Следует помнить, что мастер создает автоматически уровни для полей даты и времени только при создании размерности верхнего уровня; при добавлении этих полей в качестве подуровней имеющей размерности, автоматические уровни не создаются.

На третьем шаге мастера определяется типа куба, создаваемого мастером, при этом возможны три варианта (см. рис. 6.8).

Рис. 6.8. Выбор типа создаваемого куба на третьем шаге мастера

· Первые два варианта предполагают создание куба при каждом открытии отчета (если куб просматривается из Excel, то речь идет о сводной таблице). В этом случае сохраняется файл запроса и файл определения куба *.oqy , содержащий инструкции по созданию куба. Файл *.oqy может быть открыт в программе Excel для создания отчетов на основе куба, а при необходимости внесения изменений в куб, можно его открыть Query для повторного запуска мастера создания куба.

По умолчанию файлы определения куба так же, как и файлы запросов, хранятся в папке профиля пользователя в Application Data\Microsoft\Que-ries. При сохранении файла *.oqy в стандартной папке, имя файла определения куба выводится на вкладке Кубы OLAP при открытии нового запроса в Microsoft Query или при выборе команды Создать запрос (меню Данные , подменю Импорт внешних данных ) в Microsoft Excel.

· В случае выбора третьего варианта типа куба Сохранение файла куба, содержащего все данные для куба , извлекаются все данные для куба и в указанном пользователем месте создается файл куба с расширением *.cub , в котором эти данные хранятся. Создание данного файла не происходит немедленно при нажатии кнопки Готово ; файл создается либо при сохранении определения куба в файле, либо при создании отчета на основе куба.

Выбор типа куба определяется несколькими факторами: объемом данных, которые содержит куб; типом и сложностью отчетов, которые будут создаваться на основе куба; ресурсами системы (память и дисковое пространство) и т. п.

Отдельный файл куба *.cub следует создавать в следующих случаях:

1) для часто изменяемых интерактивных отчетов при наличии достаточного дискового пространства;

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

Третья статья, посвященная обработке больших объемов данных с помощью Excel, описывает преимущества использования сводных таблиц. Вообще, эта статья должна была быть первой в цикле, если говорить о пользе того или иного метода работы. Действительно, интерфейс сводных таблиц специально создавался для анализа больших объемов данных, которые могут храниться не только в диапазонах электронных таблиц, но и во внешних источниках данных. Понимание принципов работы и практическое использование сводных таблиц позволяет существенно оптимизировать повседневную работу экономистов. Повышение уровня анализа данных, в свою очередь, ведет к улучшению управляемости компании и принятию верных управленческих решений менеджерами различных уровней.

Общетеоретические вопросы по работе со сводными таблицами и многомерным анализом данных описаны в другой статье на нашем сайте.

Здесь остановимся подробнее на конкретных методах обработки данных при помощи интерфейса сводных таблиц. В качестве примера используйте файл nwdata_pivot.xls .

Использование сводных таблиц

Выборка уникальных значений

Одной из самых популярных задач, решаемой при помощи сводной таблицы – это выборка уникальных значений из списка или массива данных. Использование интерфейса сводной таблицы позволяет решить эту задачу самым «элегантным» способом – без использования формул.

В примере на листе Выборка показан список стран и количество упоминаний в массиве данных.

В поле данных необходимо, чтобы стоял вид операции – «количество». Этот параметр позволяет обрабатывать в области данных сводной таблицы нечисловые поля исходных данных. Альтернативой операции подсчета количества служит стандартная функция COUNTIF. Сформировать набор уникальных значения только с помощью формул в принципе тоже возможно (см. часть 1), но это потребует очень сложных формул с вычисляемой адресацией. То есть, использование сводной таблицы в данной задаче – это самый оптимальный способ решения.

Суммирование значений

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

В примере на листе Сумма сформированы итоговые данные по заказам по каждой стране:

Вид операции «Сумма» в поле данных допускает использование только числовых полей. Прочие виды агрегации исходных данных на практике почти не используются.

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

Двухмерный анализ

Описанные ранее примеры демонстрируют анализ данных по одному критерию. Электронные таблицы позволяют наглядно представить данные в двух измерениях: по столбцам и по строкам. Сводные таблицы также имеют эти области отображения данных.

В примере на листе Таблица сформирован отчет по странам и датам, показывающий изменение показателя количества заказов во времени. Обратите внимание, что для поля типа дата применена дополнительная группировка: по месяцам и по годам.

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

Многомерный анализ

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

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

Поле фильтра можно переместить в область строк или столбцов, что позволит просмотреть больший массив информации. Кроме описанной области фильтров, дополнительную фильтрацию данных можно осуществлять через настройку списков ключевых полей в областях строк или столбцов.

Аналогом использования фильтров сводной таблицы при помощи формул рабочего листа являются в большинстве случаев формулы обработки массивов.

Примеры на листах pivot1 и pivot2 показывают варианты отображения одной и той же информации с использованием различных настроек измерений сводной таблицы.

Работа с данными

Обновление данных

Сводная таблица может быть основана как на данных, находящихся в произвольной области ячеек, так и во внешних источниках данных. Остановимся сначала на первом варианте работы. Т.е. данные для анализа хранятся в диапазоне ячеек рабочего листа Excel.

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

Мастер построения сводной таблицы позволяет указать диапазон ячеек, используемых в качестве источника данных. Если при обновлении информации были добавлены новые строки, то они могут не попасть в источник данных сводной таблицы, и, соответственно, не будут корректно проанализированы. Эта особенность достаточно сложна для отслеживания при обработке больших объемов данных.

Изменить диапазон-источник данных для существующей сводной таблицы можно через специальный диалог Excel 2007-2010. В предыдущих версиях Excel эта интерфейсная возможность реализована в «Мастере работы со сводными таблицами», в случае, когда он запущен из активной сводной таблицы. После открытия мастера необходимо вернуться на один шаг назад:

Исправления источника данных можно также произвести программным способом. Например, через окно вычислений редактора VBA (Immediate):

Чтобы не задумываться над корректностью размеров диапазона-источника данных сводной таблицы, можно изначально при построении задать диапазон строк с большим запасом. Например, зная, что предполагаемый объем строк не превышает 10000, можно сразу задать это значение в виде размера диапазона. Такая избыточность на практике не приведет к видимым замедлениям в работе интерфейса сводной таблицы. Пустые значения в измерениях отчета можно скрыть. Недостаток этого метода проявляется, в первую очередь, при работе с полями типа «дата». Стандартный интерфейс сводной таблицы позволяет реализовать различные группировки при работе с типом «дата» (по месяцам, по кварталам), но при наличии пустых значений эти возможности становятся недоступными, так как Excel определяет такой столбец как текстовый..

В дополнение к рассмотренным методам управления источником данных, предлагаем настраивать диапазон строк сводной таблицы активного рабочего листа программными методами. Если источник данных занимает рабочую область листа целиком, то можно использовать такую команду:

ActiveSheet.PivotTables(1).SourceData = _ Left(ActiveSheet.PivotTables(1).SourceData, _ InStr(ActiveSheet.PivotTables(1).SourceData, "!")) & _ Range(Application.ConvertFormula(_ ActiveSheet.PivotTables(1).SourceData, xlR1C1, xlA1) _).Worksheet.UsedRange.Address(ReferenceStyle:=xlR1C1)

Самым надежным, но медленным способом, является последовательная проверка строк листа-источника с последующим заполнением свойства SourceData активной сводной таблицы. Обратите внимание, что это свойство хранится только в R1C1-адресации.

Макрос можно вызывать по событию Worksheet_Activate , либо настроить «горячую» клавишу.

Работа с результатами анализа

Сводная таблица располагается в диапазоне ячеек рабочего листа Excel. Написание формул рабочего листа в границах сводной таблицы не допускается как при вводе вручную, так и программными методами. Теоретически допустима работа с ячейками, располагающимися в пределах границ сводной таблицы, при помощи ссылок для внешних формул. Часто на практике используется также функция VLOOKUP для поиска по столбцу сводной таблицы. Этот способ необходимо использовать с большой осторожностью - интерфейс сводного отчета предполагает изменение положения отображаемых данных относительно прямоугольных координат рабочего листа без какого-либо влияния на источник этих данных. То есть, нет никакой гарантии, что указанная в формуле ссылка внутрь сводной таблицы будет отображать правильное значение при дальнейшей работе с файлом. При этом источник данных может не меняться.

Имеются альтернативные способы обработки результатов сводной таблицы:

  1. Копирование и вставка значений сводной таблицы на другой лист (с использованием функции «Специальная вставка») с дальнейшим поиском дынных уже по этому сформированному диапазону ячеек. Нарушить целостность данных в пределах простой таблицы гораздо сложнее, чем в сводной. Очевидно, что главным недостатком этого способа работы, является использование ручных операций после каждого обновления источника данных.
  2. Использовать возможности функции GETPIVOTDATA (Excel 2002 и более поздние версии). Данная функция предполагает доступ к данным не по координатам рабочего листа, а по измерениям сводной таблицы. Для источников данных типа OLAP-куб предусмотрены специальные функции доступа к данным и измерениям: CUBEVALUE, CUBEMEMBER и другие (Excel 2007-2010). Данный способ работы неудобен, а также существенно замедляет работу, если требуется получить много различных значений сводной таблицы.
  3. Отказаться от сводной таблицы для получения результатов. Вместо этого использовать формулы рабочего листа (см. Часть 1). Этот способ, несмотря на сложность реализации, может оказаться самым удобным в том случае, если на результатах основываются другие вычисления, а источник данных часто обновляется.

Версии интерфейса сводных таблиц

В новом формате файла xlsx (Excel 2007-2010) существенно изменены возможности интерфейса сводных таблиц. В предыдущие версии интерфейса (97-2003) вносились только «косметические» изменения:

  • Excel 2000 (9.0) – базовая версия интерфейса сводных таблиц.
  • Excel XP (10.0) – новая функция GETPIVOTDATE
  • Excel 2003 (11.0) – похоже, что вообще никаких изменений не вносилось
  • Excel 2007 (12.0) – новая версия интерфейса сводных таблиц с поддержкой расширенных диапазонов. Улучшена производительность, изменен внешний вид интерфейса. Сохранена совместимость со старым форматом.
  • Excel 2010 (14.0) – поддержка надстройки PowerPivot. Работа с обновляемыми OLAP-кубами.

Основные изменения в новом формате файла (2007-2010):

  • В одном столбце могут располагаться несколько полей сводной таблицы, выделенных отступами (сжатая форма).
  • Срезы сводной таблицы позволяют визуально отображать текущий фильтрующий набор значений.
  • Измерения в области фильтра поддерживают множественный выбор.
  • Элементы измерения могут быть скрыты/отображены через кнопки, расположенные в той же ячейке, что и сам заголовок.
  • Появилось несколько новых параметров в свойствах поля и таблицы.
  • Доступны стили сводных таблиц, позволяющие изменить внешний вид отчетов в любой момент времени.

Для лучшего понимания отличий скачайте и откройте файлы-примеров nwdata_pivot1.xlsx и nwdata_pivot2.xlsx (в арихиве nwdata_pivot.zip ). В первом файле представлен отчет в старом формате, во втором – в новом, исходные данные одинаковые.

Внутренняя организация интерфейса сводных таблиц

Для лучшего понимания принципов работы сводной таблицы рассмотрим внутреннюю организацию интерфейса.

Кэш сводной таблицы

При создании или обновлении сводной таблицы, независимо от выбранного типа источника, Excel переносит данные в промежуточное хранилище, так называемый, кэш сводной таблицы . Структура организации данных в кэше позволяет существенно оптимизировать агрегацию данных и вычисления в сводной таблице. Хранение данных в собственном кэше позволяет использовать различные источники данных с сохранением схожей функциональности.

Данные в кэше обновляются при нажатии кнопки «Обновить» интерфейса сводной таблицы (кнопка на ленте или в контекстном меню), либо по заданному интервалу времени, если такая установка задана в параметрах. Режим вычислений Excel (автоматический или ручной) при этом никак не влияет на сводную таблицу.

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

Объекты VBA

Доступ к данным программными методами возможен на уровне объектов сводной таблицы - объект PivotTable . Другие объекты сводной таблицы отвечают за расположение и визуальное отображение элементов и данных. К ним относятся коллекции полей: PivotFields , ColumnFields , RowFields , PageFields , DataFields . Варианты значений полей доступны через коллекции объектов PivotItems .

Универсальная возможность обращения к данным непосредственно в кэш (объект PivotCache ) почему-то не предусмотрена разработчиками Excel. Логика при этом не совсем понятна. Как уже отмечалось, данные кэша хранятся отдельно и их даже можно увидеть в файле формата xlsx, если открыть этот файл как zip-архив. В зависимости от типа источника данных можно попытаться использовать свойство SourceData (для сводных таблиц на основе диапазона) или Recordset (для источников типа «запрос к базе данных»).

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

Виды источников данных

Глобально можно разделить источники данных на 3 типа:

  1. Диапазоны ячеек
  2. Запросы к базе данных
  3. OLAP-кубы и PowerPivot2010 как один из вариантов реализации OLAP-механизма.

Диапазоны

Первый вариант работы – самый распространенный на практике; предыдущие описания примеров относятся как раз к данным, хранящимся в диапазоне ячеек.

Стандартный интерфейс Excel не позволяет строить сводный отчет на основе нескольких диапазонов ячеек. Причина такого ограничения не очень понятна. Есть подозрение, что разработчики просто не могут предложить интуитивно-понятный интерфейс пользователя для решения данной задачи. Техническая реализация задачи не выглядит слишком сложной – требуется просто заполнить кэш данных. В разделе Надстройки нашего сайта представлено наше собственное решение для построения сложных сводных отчетов.

Запросы к базе данных

Запросы к базе данных могут быть реализованы с использованием различных технических механизмов: Microsoft Query, ADO, ODBC. Независимо от интерфейса доступа к данным объединяющим фактором этого варианта работы является заполнение кэша сводной таблицы непосредственно из внешнего источника. При дальнейшей работе со сводной таблицей запрос может быть выполнен повторно, после чего данные будут заново перенесены в кэш. Этот метод позволяет анализировать данные из внешних источников (учетных систем) в реальном времени. При разрыве связи с источником данных, анализ может производиться на последних данных, попавших в кэш.

OLAP-кубы

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

До версии Office 2007 простой OLAP-куб можно было подготовить при помощи Microsoft Query, но в последних версиях эту возможность по непонятным причинам отключили. Разработчики настоятельно рекомендуют использовать SQL Server Analysis Service для создания и настройки OLAP-кубов. Рекомендация полезная, но, во-первых, этот сервис входит в состав только платных версий SQL Server, а, во-вторых, требует серьезного изучения, как интерфейса, так и языка обработки MDX-запросов.

В примере к статье представлен архив nwdata_cube.zip с двумя файлами nwdata_cube.cub , nwdata_cube.xls . Обратите внимание на изменения в интерфейсе сводной таблицы при использовании OLAP-куба в качестве источника данных:

  • Наличие иерархических измерений, нет возможности поменять родительский и дочерний элемент местами.
  • Недопустимо перемещение измерений в область данных и наоборот.
  • Промежуточные итоги отображаются для всех элементов, а не по текущему фильтру группы.

PowerPivot

Для Excel 2010 доступна специальная надстройка PowerPivot, которая является, по большому счету, альтернативным механизмом реализации OLAP-кубов. При помощи PowerPivot можно обрабатывать миллионы записей различных информационных файлов и баз данных с огромной производительностью. При этом интерфейс пользователя для конечного анализа данных реализован в Excel 2010.

С высокой вероятностью эта надстройка войдет в состав следующей версии Excel в качестве базовой функциональности. Мы очень надеемся посвятить описанию работы PowerPivot отдельную статью или даже цикл статей. На сегодняшний день PowerPivot + Excel являются, пожалуй, самым мощным инструментом для анализа больших объемов данных.

Официальный сайт PowerPivot.

OLAP - это не отдельно взятый программный продукт, не язык программирования и даже не конкретная технология. Если постараться охватить OLAP во всех его проявлениях, то это совокупность концепций, принципов и требований, лежащих в основе программных продуктов, облегчающих аналитикам доступ к данным. Выясним, зачем аналитикам надо как-то специально облегчать доступ к данным.

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

Итак, аналитику нужно много данных, эти данные являются выборочными, а также носят характер "набор атрибутов - число ". Последнее означает, что аналитик работает с таблицами следующего типа:

Здесь "Страна ", "Товар ", "Год " являются атрибутами или измерениями , а "Объем продаж " - тем самым числовым значением или мерой . Задачей аналитика, повторимся, является выявление стойких взаимосвязей между атрибутами и числовыми параметрами . Посмотрев на таблицу, можно заметить, что ее легко можно перевести в три измерения: по одной из осей отложим страны, по другой - товары, по третьей - годы. А значениями в этом трехмерном массиве у нас будут соответствующие объемы продаж.

Трехмерное представление таблицы. Серым сегментом показано, что для Аргентины в 1988 году данных нет

Вот именно такой трехмерный массив в терминах OLAP и называется кубом. На самом деле, с точки зрения строгой математики кубом такой массив будет далеко не всегда: у настоящего куба количество элементов во всех измерениях должно быть одинаковым, а у кубов OLAP такого ограничения нет. Тем не менее, несмотря на эти детали, термин "кубы OLAP" ввиду своей краткости и образности стал общепринятым. Куб OLAP совсем не обязательно должен быть трехмерным. Он может быть и двух-, и многомерным - в зависимости от решаемой задачи. Особо матерым аналитикам может понадобиться порядка 20 измерений - и серьезные OLAP-продукты именно на такое количество и рассчитаны. Более простые настольные приложения поддерживают где-то 6 измерений.

Измерения OLAP-кубов состоят из так называемых меток или членов (members). Например, измерение "Страна" состоит из меток "Аргентина", "Бразилия", "Венесуэла" и так далее.

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

Однако куб сам по себе для анализа не пригоден. Если еще можно адекватно представить или изобразить трехмерный куб, то с шести - или девятнадцатимерным дело обстоит значительно хуже. Поэтому перед употреблением из многомерного куба извлекают обычные двумерные таблицы . Эта операция называется "разрезанием" куба. Термин этот, опять же, образный. Аналитик как бы берет и "разрезает" измерения куба по интересующим его меткам. Этим способом аналитик получает двумерный срез куба и с ним работает. Примерно так же лесорубы считают годовые кольца на спиле.

Соответственно, "неразрезанными", как правило, остаются только два измерения - по числу измерений таблицы. Бывает, "неразрезанным" остается только измерение - если куб содержит несколько видов числовых значений, они могут откладываться по одному из измерений таблицы.

Если еще внимательнее всмотреться в таблицу, которую мы изобразили первой, можно заметить, что находящиеся в ней данные, скорее всего, не являются первичными, а получены в результате суммирования по более мелким элементам. Например, год делится на кварталы, кварталы на месяцы, месяцы на недели, недели на дни. Страна состоит из регионов, а регионы - из населенных пунктов. Наконец в самих городах можно выделить районы и конкретные торговые точки. Товары можно объединять в товарные группы и так далее. В терминах OLAP такие многоуровневые объединения совершенно логично называется иерархиями . Средства OLAP дают возможность в любой момент перейти на нужный уровень иерархии. Причем, как правило, для одних и тех же элементов поддерживается несколько видов иерархий: например день-неделя-месяц или день-декада-квартал. Исходные данные берутся из нижних уровней иерархий, а затем суммируются для получения значений более высоких уровней. Для того, чтобы ускорить процесс перехода, просуммированные значения для разных уровней хранятся в кубе. Таким образом, то, что со стороны пользователя выглядит одним кубом, грубо говоря, состоит из множества более примитивных кубов.

Пример иерархии

В этом заключается один из существенных моментов, которые привели к появлению OLAP - производительности и эффективности. Представим себе, что происходит, когда аналитику необходимо получить информацию, а средства OLAP на предприятии отсутствуют. Аналитик самостоятельно (что маловероятно) или с помощью программиста делает соответствующий SQL-запрос и получает интересующие данные в виде отчета или экспортирует их в электронную таблицу. Проблем при этом возникает великое множество. Во-первых, аналитик вынужден заниматься не своей работой (SQL-программированием) либо ждать, когда за него задачу выполнят программисты - все это отрицательно сказывается на производительности труда, повышаются штурмовщина, инфарктно-инсультный уровень и так далее. Во-вторых, один-единственный отчет или таблица, как правило, не спасает гигантов мысли и отцов русского анализа - и всю процедуру придется повторять снова и снова. В-третьих, как мы уже выяснили, аналитики по мелочам не спрашивают - им нужно все и сразу. Это означает (хотя техника и идет вперед семимильными шагами), что сервер корпоративной реляционной СУБД, к которому обращается аналитик, может задуматься глубоко и надолго, заблокировав остальные транзакции.

Концепция OLAP появилась именно для разрешения подобных проблем. Кубы OLAP представляют собой, по сути, мета-отчеты. Разрезая мета-отчеты (кубы, то есть) по измерениям, аналитик получает, фактически, интересующие его "обычные" двумерные отчеты (это не обязательно отчеты в обычном понимании этого термина - речь идет о структурах данных с такими же функциями). Преимущества кубов очевидны - данные необходимо запросить из реляционной СУБД всего один раз - при построении куба. Поскольку аналитики, как правило, не работают с информацией, которая дополняется и меняется "на лету", сформированный куб является актуальным в течение достаточно продолжительного времени. Благодаря этому, не только исключаются перебои в работе сервера реляционной СУБД (нет запросов с тысячами и миллионами строк ответов), но и резко повышается скорость доступа к данным для самого аналитика. Кроме того, как уже отмечалось, производительность повышается и за счет подсчета промежуточных сумм иерархий и других агрегированных значений в момент построения куба. То есть, если изначально наши данные содержали информацию о дневной выручке по конкретному товару в отдельно взятом магазине, то при формировании куба OLAP-приложение считает итоговые суммы для разных уровней иерархий (недель и месяцев, городов и стран).

Конечно, за повышение таким способом производительности надо платить. Иногда говорят, что структура данных просто "взрывается" - куб OLAP может занимать в десятки и даже сотни раз больше места, чем исходные данные.

Ответить на вопросы:

    Что такое куб OLAP?

    Что такое метки конкретного измерения? Привести примеры.

    Могут ли меры в кубе OLAP, содержать нечисловые значения.

Возможно, для кого-то использование OLAP-технологии (On-line Analytic Processing) при построении отчетности покажется какой-то экзотикой, поэтому применение OLAP-КУБа для них вовсе не является одним из важнейших требований при автоматизации бюджетирования и управленческого учета .

На самом деле очень удобно пользоваться многомерным КУБом при работе с управленческой отчетностью. При разработке форматов бюджетов можно столкнуться с проблемой многовариантности форм (подробнее об этом можно прочитать в Книге 8 "Технология постановки бюджетирования в компании" и в книге "Постановка и автоматизация управленческого учета").

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

Естественно, это приводит к тому, что руководители хотят получать отчетность во всех интересующих их аналитических срезах. А это значит, что отчеты нужно как-то заставить «дышать». Иными словами можно сказать, что в данном случае речь идет о том, что по смыслу один и тот же отчет должен предоставлять информацию в различных аналитических разрезах. Поэтому статичные отчеты уже не устраивают многих современных руководителей. Им нужна динамика, которую может дать многомерный КУБ.

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

Причем нужно уметь отличать настоящие КУБы от имитации. Одной из таких имитаций являются сводные таблицы в MS Excel. Да, этот инструмент похож на КУБ, но на самом деле таковым не является, поскольку это статические, а не динамические таблицы. Кроме того, в них гораздо хуже реализована возможность построения отчетов, использующих элементы из иерархических справочников.

Для подтверждения актуальности использования КУБа при построении управленческой отчетности можно привести простейший пример с бюджетом продаж. В рассматриваемом примере для компании актуальными являются следующие аналитические срезы: продукты, филиалы и каналы сбыта. Если для компании важны эти три аналитики, то бюджет (или отчет) продаж можно выводить в нескольких вариантах.

Следует отметить, что если создавать строки бюджетов на основе трех аналитических срезов (как в рассматриваемом примере), это позволяет создавать достаточно сложные бюджетные модели и составлять детализированные отчеты с использованием КУБа.

Например, бюджет продаж можно составлять с использованием только одной аналитики (справочника). Пример бюджета продаж, построенного на основе одной аналитики "Продукты" представлен на рисунке 1 .

Рис. 1. Пример бюджета продаж, построенного на основе одной аналитики "Продукты" в OLAP-КУБе

Этот же бюджет продаж можно составлять с использованием двух аналитик (справочников). Пример бюджета продаж, построенного на основе двух аналитик "Продукты" и "Филиалы" представлен на рисунке 2 .

Рис. 2. Пример бюджета продаж, построенного на основе двух аналитик "Продукты" и "Филиалы" в OLAP-КУБе программного комплекса "ИНТЕГРАЛ"

.

Если есть необходимость строить более детальные отчеты, то можно тот же бюджет продаж составлять с использованием трех аналитик (справочников). Пример бюджета продаж, построенного на основе трех аналитик "Продукты", "Филиалы" и "Каналы сбыта" представлен на рисунке 3 .

Рис. 3. Пример бюджета продаж, построенного на основе трех аналитик "Продукты", "Филиалы" и "Каналы сбыта" в OLAP-КУБе программного комплекса "ИНТЕГРАЛ"

Нужно напомнить о том, что КУБ, используемый для формирования отчетов, позволяет выводить данные в различной последовательности. На рисунке 3 бюджет продаж сначала "разворачивается" по продуктам, затем по филиалам, а потом по каналам сбыта.

Те же самые данные можно представить в другой последовательности. На рисунке 4 тот же самый бюджет продаж "разворачивается" сначала по продуктам, затем по каналам сбыта, а потом по филиалам.

Рис. 4. Пример бюджета продаж, построенного на основе трех аналитик "Продукты", "Каналы сбыта" и "Филиалы" в OLAP-КУБе программного комплекса "ИНТЕГРАЛ"

На рисунке 5 тот же самый бюджет продаж "разворачивается" сначала по филиалам, затем по продуктам, а потом по каналам сбыта.

Рис. 5. Пример бюджета продаж, построенного на основе трех аналитик "Филиалы", "Продукты" и "Каналы сбыта" в OLAP-КУБепрограммного комплекса "ИНТЕГРАЛ"

На самом деле это не все возможные варианты вывода бюджета продаж.

Кроме того, нужно обратить внимание на то, что КУБ позволяет работать с иерархической структурой справочников. В представленных примерах иерархическими справочниками являются "Продукты" и "Каналы сбыта".

С точки зрения пользователя он в данном примере получает несколько управленческих отчетов (см. Рис. 1-5 ), а с точки зрения настроек в программном продукте – это один отчет. Просто с помощью КУБа его можно просматривать несколькими способами.

Естественно, что на практике возможно очень большое количество вариантов вывода различных управленческих отчетов, если их статьи строятся на одной или нескольких аналитиках. А уж сам набор аналитик зависит от потребности пользователей в детализации. Правда, при этом не следует забывать, что, с одной стороны, чем больше аналитик, тем более детализированные отчеты можно строить. Но, с другой стороны, значит, и финансовая модель бюджетирования будет более сложной. В любом случае при наличии КУБа компания будет иметь возможность просмотра необходимой отчетности в различных вариантах, в соответствии с интересующими аналитическими разрезами.

Необходимо упомянуть еще о нескольких возможностях OLAP-КУБа.

В многомерном иерархическом OLAP-КУБе есть несколько измерений: тип строки, дата, строки, справочник 1, справочник 2 и справочник 3 (см. Рис. 6 ). Естественно, в отчет выводится столько кнопок со справочниками, сколько есть в строке бюджета, содержащей максимальное количество справочников. Если ни в одной строке бюджета нет ни одного справочника, то в отчете не будет ни одной кнопки со справочниками.

Изначально OLAP-КУБ строится по всем измерениям. По умолчанию при первоначальном построении отчета измерения расположены именно в тех областях, как показано на рисунке 6 . То есть такое измерение, как «Дата», располагается в области вертикальных измерений (измерения в области столбцов), измерения «Строки», «Справочник 1», «Справочник 2» и «Справочник 3» – в области горизонтальных измерений (измерения в области строк), а измерение «Тип строки» – в области «нераскрываемых» измерений (измерения в страничной области). Если измерение находится в последней области, то данные в отчете не будут «раскрываться» по этому измерению.

Каждое из этих измерений можно поместить в любую из трех областей. После переноса измерений отчет мгновенно перестраивается в соответствии с новой конфигурацией измерений. Например, можно поменять местами дату и строки со справочниками. Или можно в вертикальную область измерений перенести один из справочников (см. Рис. 7 ). Иными словами, отчет в OLAP-КУБе можно «крутить» и выбирать тот вариант вывода отчета, который является наиболее удобным для пользователя.

Рис. 7. Пример перестройки отчета после изменения конфигурации измерений программного комплекса "ИНТЕГРАЛ"

Конфигурацию измерений можно менять либо в основной форме КУБа, либо в редакторе карты изменений (см. Рис. 8 ). В этом редакторе также можно мышкой перетаскивать измерения из одной области в другую. Помимо этого, можно менять местами измерения в одной области.

Кроме того, в этой же форме можно настраивать некоторые параметры измерений. По каждому измерению можно настраивать расположение итогов, порядок сортировки элементов и названия элементов (см. Рис. 8 ). Также можно задавать, какое название элементов выводить в отчет: сокращенное (Name) или полное (FullName).

Рис. 8. Редактор карты измерений программного комплекса "ИНТЕГРАЛ"

Редактировать параметры измерений можно непосредственно в каждом из них (см. Рис. 9 ). Для этого нужно нажать на пиктограмму, расположенную на кнопке рядом с названием измерения.

Рис. 9. Пример редактирования справочника 1 Продукты и услуги в

С помощью этого редактора можно выбирать элементы, которые нужно показывать в отчете. По умолчанию в отчет выводятся все элементы, но при необходимости часть элементов или папок можно не показывать. Например, если нужно выводить в отчет только одну продуктовую группу, то у всех остальных необходимо убрать галочки в редакторе измерений. После чего в отчете будет только одна продуктовая группа (см. Рис. 10 ).

Также в этом редакторе можно сортировать элементы. Кроме того, элементы можно перегруппировывать различными способами. После такой перегруппировки отчет мгновенно перестраивается.

Рис. 10. Пример вывода в отчете только одной продуктовой группы (папки) в программном комплексе "ИНТЕГРАЛ"

В редакторе измерения можно оперативно создавать свои группы, перетаскивать туда элементы из справочников и т.д. По умолчанию автоматически создается только группа «Прочие», но можно создавать и другие группы. Таким образом, с помощью редактора измерений можно настраивать, какие элементы справочников и в каком порядке нужно выводить в отчет.


Следует отметить, что все такие перегруппировки не записываются. То есть после закрытия отчета или после его перерасчета в отчет будут выводиться все справочники в соответствии с настроенной методикой.

На самом деле все такие изменения можно было сделать изначально при настройке строк.

Например, с помощью ограничений также можно задавать, какие элементы или группы справочников нужно выводить в отчет, а какие – нет.

Примечание : более подробно тема данной статьи рассматривается на семинарах-практикумах "Бюджетное управление предприятием" и "Постановка и автоматизация управленческого учета" , которые проводит автор данной статьи - Александр Карпов .

Если пользователю практически регулярно нужно выводить в отчет только определенные элементы или папки справочников, то подобные настройки лучше заранее сделать при создании строк отчетов. Если же для пользователя важны различные комбинации элементов справочников в отчетах, тогда при настройке методики никакие ограничения ставить не нужно. Все такие ограничения можно будет оперативно настраивать с помощью редактора измерения.