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

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

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

Число показателей в каждой группе на одном уровне управления не должно превышать 7-10. Следовательно, руководитель любого уровня работает с 30-40 показателями одновременно, что не составляет особого труда. Основная трудность заключается в выстраивании информационной природы показателей, где каждый последующий уровень представляет собой агрегат предыдущего. Решение этой задачи входит в круг обязанностей системного аналитика.

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

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

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

функционирующей системы и ее позиционирование в определенном фазовом пространстве.

Контрольные вопросы

1. Дайте определение агрегирования. Эквивалентны ли понятия «система» и «агрегат»?

2. Как проявляется внутренняя целостность агрегата? Почему при агрегировании системы в ней появляются новые свойства?

3. Приведите примеры эмерджентности системы. Почему эмерджентность считают внутренним свойством системы?

4. Какая связь существует между системообразующим фактором и эмерджентностью системы?

5. Как связаны дифференциация свойств элементов системы с ее организованностью?

6. Что лежит в основе агрегирования системы? Чем вызвана необходимость многопланового описания агрегируемой системы?

7. Что такое конфигуратор системы? Приведите примеры конфигураторов.

8. Сколько структурных описаний должна содержать агрегируемая система? Приведите примеры структурных описаний социокультурных систем.

9. В чем заключается сущность задачи агрегирования данных в экономике?

10. Что представляет собой система сбалансированных показателей?

11. В чем заключается основная задача синтетического подхода к исследованию системы?

Темы рефератов и эссе

Проблемы анализа данных в экономических приложениях.

Слияния и поглощения как примеры агрегирования экономических систем.

Проектирование новых образований.

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

Синтаксис:

SELECT ... GROUP BY ROLLUP(grouping_column_reference_list)

Действия ROLLUP являются следующими: создаются частичные суммы для каждого из раскрываемых уровней от наиболее низкого уровня иерархии к более высокому уровню и вычисляется итоговая сумма в соответствии с указанным списком колонок в предложении ROLLUP . Предложение ROLLUP рассматривает свои аргументы как упорядоченный список колонок группировки. Сначала вычисляется стандартное агрегатное значение, указанное в предложении GROUP BY . Затем создаются частичные суммы для уровней атрибутов из списка группировки GROUP BY в порядке возрастания их значений, справа налево по списку колонок группировки. И окончательно создается итоговая сумма (grand total).

Предложение ROLLUP создает частичные суммы для n+1 уровней, где n есть число колонок группировки. Например, если в запросе указан ROLLUP на колонки группировки измерений "Время" (Time), "Регион" (Region) и "Отдел продаж" (Department) (n=3 ), то результирующее множество (result set) будет включать в себя строки для 4-х уровней агрегации.

Рассмотрим примеры.

Пример 22.3 . Пусть руководству компании требуется отчет о прибыли по всем регионам по всем отделам продаж за 2007-08 гг. Предложение SELECT для приведенной на рис. 22.3 схемы ХД может выглядеть следующим образом.

SELECT Time, Region, Department, SUM(Profit) AS Profit FROM sales GROUP BY ROLLUP(Time, Region, Department);

Вывод 1 : Агрегирование в ROLLUP для трех измерений

Time Region Department Profit
2007 Центральный VideoRental 75,00
2007 Центральный VideoSales 74,00
2007 Центральный NULL 149,00
2007 Восточный VideoRental 89,00
2007 Восточный VideoSales 115,00
2007 Восточный NULL 204,00
2007 Западный VideoRental 87,00
2007 Западный VideoSales 86,00
2007 Западный NULL 173,00
2007 NULL NULL 526,00
2008 Центральный VideoRental 82,00
2008 Центральный VideoSales 85,00
2008 Центральный NULL 167,00
2008 Восточный VideoRental 101,00
2008 Восточный VideoSales 137,00
2008 Восточный NULL 238,00
2008 Западный VideoRental 96,00
2008 Западный VideoSales 97,00
2008 Западный NULL 193,00
2008 NULL NULL 598,00
NULL NULL NULL 1124,00

Как видно из примера выше, запрос возвращает следующий набор строк:

  • предложением GROUP BY без использования ROLLUP ;
  • частичные суммы 1-го уровня, агрегированные для "Отдела продаж" (Department) для каждой комбинации измерений "Время" (Time) и "Регион" (Region);
  • частичные суммы 2-го уровня, агрегированные для измерений "Регион" (Region) и "Отдела продаж" (Department) для каждого значения измерения "Время" (Time);
  • строку с итоговой суммой.

Заметим, что NULL-значения показываются только для ясности. В действительности при выводе будут показаны пробелы.

NULL-значения, возвращаемые в результате выполнения предложений ROLLUP и CUBE , не всегда могут толковаться в общепринятом смысле, как неопределенные значения. NULL-значения могут указывать, что строка содержит частичную сумму. Например, первое NULL-значение в Выводе 1 появляется в колонке "Отдел продаж" (Department). Это NULL-значение означает, что строка есть частичная сумма для всех отделов продаж для Центрального региона за 2007 год.

Использование ROLLUP для вычисления частичных сумм

Можно использовать предложение ROLLUP только для вычисления некоторых частичных сумм. Такие команды с применением ROLLUP используют синтаксис как показано ниже:

GROUP BY expr1, ROLLUP(expr2, expr3);

В этом случае предложение ROLLUP создает частичные суммы для (2+1=3) уровней агрегации (aggregation levels), т.е. для уровней (expr1, expr2, expr3) , (expr1, expr2) и (expr1) . Итоговая сумма (grand total) не создается.

Пример 22.4 . Пусть руководству компании требуется отчет о прибыли по всем регионам по всем отделам продаж за 2007-2008 гг. без итоговой суммы прибыли. Предложение SELECT для приведенной на рис. 22.3 схемы ХД может выглядеть следующим образом:

SELECT Time, Region, Department, SUM(Profit) AS Profit FROM sales GROUP BY Time, ROLLUP (Region, Department);

Вывод 2 . Использование предложения ROLLUP для вывода частичных сумм

Time Region Department Profit
2007 Центральный VideoRental 75,00
2007 Центральный VideoSales 74,00
2007 Центральный NULL 149,00
2007 Восточный VideoRental 89,00
2007 Восточный VideoSales 115,00
2007 Восточный NULL 204,00
2007 Западный VideoRental 87,00
2007 Западный VideoSales 86,00
2007 Западный NULL 173,00
2007 NULL NULL 526,00
2008 Центральный VideoRental 82,00
2008 Центральный VideoSales 85,00
2008 Центральный NULL 167,00
2008 Восточный VideoRental 101,00
2008 Восточный VideoSales 137,00
2008 Восточный NULL 238,00
2008 Западный VideoRental 96,00
2008 Западный VideoSales 97,00
2008 Западный NULL 193,00
2008 NULL NULL 598,00

Как видно, запрос возвращает следующее множество строк:

  • обычные строки агрегации, которые выдаются предложением GROUP BY без использования ROLLUP ;
  • частичную сумму 1-го уровня агрегации по "Отделам продаж" (Department) для каждой комбинации "Время" (Time) и "Регион" (Region);
  • частичную сумму 2-го уровня агрегации по измерениям "Регион" (Region) и "Отдел продаж" (Department) для каждого значения измерения "Время" (Time);
  • нет строки с итоговой суммой.

Можно вычислить частичные суммы без использования предложения ROLLUP следующим образом:

SELECT Time, Region, Department, SUM(Profit) FROM Sales GROUP BY Time, Region, Department UNION ALL SELECT Time, Region, "" , SUM(Profit) FROM Sales GROUP BY Time, Region UNION ALL SELECT Time, "", "", SUM(Profit) FROM Sales GROUP BY Time UNION ALL SELECT "", "", "", SUM(Profit) FROM Sales;

Как видно из примера выше, для этого требуется для n измерений n+1 SELECT с UNION ALL .

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

  • в измерениях с иерархической структурой, таких как "время" или "географическое расположение": ROLLUP(y, m, day) или ROLLUP(country, state, city) .
  • для быстрой генерации отчетов с суммарными данными.
Предложение CUBE

Частичные суммы, генерируемые предложением ROLLUP , представляют только часть возможных комбинаций частичных сумм в измерениях. Например, в перекрестном отчете (см. табл. 22.1) итоги работы отделов продаж по регионам (279,000 и 319,000) не могут быть вычислены в предложении ROLLUP(Time, Region, Department) . Для этого нужно изменить порядок колонок группировки в предложении ROLLUP: ROLLUP(Time, Department, Region) . Простой способ генерации полного набора частичных сумм для перекрестных отчетов состоит в использовании расширения CUBE предложения GROUP BY .

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

Синтаксис:

SELECT ... GROUP BY CUBE (grouping_column_reference_list)

Из примера ниже видно, что CUBE берет указанный набор колонок группировки и создает частичные суммы для всех возможных комбинаций значений этих колонок. С точки зрения многомерного анализа, предложение CUBE генерирует все частичные суммы, которые могут быть вычислены для куба данных с указанными измерениями. Если указывается CUBE(Time, Region, Department) , то результирующее множество запроса будет включать все значения, которые входят в аналогичную конструкцию 2007

Центральный VideoSales 74,00 2007 Центральный NULL 149,00 2007 Восточный VideoRental 89,00 2007 Восточный VideoSales 115,00 2007 Восточный NULL 204,00 2007 Западный VideoRental 87,00 2007 Западный VideoSales 86,00 2007 Западный NULL 173,00 2007 NULL NULL 526,00 2008 Центральный VideoRental 82,00 2008 Центральный VideoSales 85,00 2008 Центральный NULL 167,00 2008 Восточный VideoRental 101,00 2008 Восточный VideoSales 137,00 2008 Восточный NULL 238,00 2008 Западный VideoRental 96,00 2008 Западный VideoSales 97,00 2008 Западный NULL 193,00 2008 NULL VideoRental 279,00 2008 NULL VideoSales 319,00 2008 NULL NULL 598,00 NULL Центральный VideoRental 157,00 NULL Центральный VideoSales 159,00 NULL Центральный NULL 316,00 NULL Восточный VideoRental 190,00 NULL Восточный VideoSales 252,00 NULL Восточный NULL 442,00 NULL Западный VideoRental 183,00 NULL Западный VideoSales 183,00 NULL Западный NULL 366,00 NULL NULL VideoRental 530,00 NULL NULL VideoSales 594,00 NULL NULL NULL 1124,00

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

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

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

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

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

Как агрегировать файл данных

  1. Выберите в меню:

    Данные > Агрегировать...

  2. Можно задать группирующие переменные, определяющие, как наблюдения группируются при агрегировании данных. Если группирующие переменные не заданы, то весь набор данных представляет собой единую группу для агрегирования.
  3. Выберите одну или несколько агрегируемых переменных.
  4. Выберите агрегирующую функцию для каждой агрегируемой переменной.

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

Сохранение агрегированных результатов

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

  • Добавить агрегированные переменные в активный набор данных. В активный набор данных добавляются новые переменные, основанные на функциях агрегирования. Сам файл данных не агрегируется. Каждое наблюдение с одинаковыми значениями группирующих переменных получает одинаковые значения для новых агрегированных переменных.
  • Создать новый набор данных, содержащий только агрегированные переменные. Сохраняет агрегированные данные в новом наборе данных в текущем сеансе работы. Файл включает группирующие переменные, задающие агрегированные наблюдения, и все агрегированные переменные, заданные функциями агрегирования. Активный набор данных не меняется.
  • Записать новый файл данных, содержащий только агрегированные переменные. Сохраняет агрегированные данные во внешнем файле данных. Файл включает группирующие переменные, задающие агрегированные наблюдения, и все агрегированные переменные, заданные функциями агрегирования. Активный набор данных не меняется.

Параметры сортировки для больших файлов данных

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

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

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

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