SQL в хранилищах данных: агрегация и суммирование. Агрегирование и группировка данных

Агрегирование данных состоит в формировании промежуточных итогов , а также создании сводных и консолидированных таблиц .)

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

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

· Сводные таблицы. Этот инструмент табличного процессора обеспечивает формирование сводной (агрегированной) информации и представление табличных данных в структурированном виде (в определенной внешней форме с упорядочением местоположения фрагментов), а также построение связанной со сводной таблицей сводной диаграммы. Распределение информации в сводной таблице можно задать, указывая какие поля и элементы должны в ней содержаться. Поле - это некоторая общая категория (поименованный столбец), а элемент - это отдельное значение, содержащееся внутри некоторой категории значений. Источником данных для сводной таблицы может быть электронная таблица, данные из внешних баз и т.д. Помимо «базовых» полей из источников данных, сводная таблица допускает формирование вычисляемых полей в области данных, а также вычисляемых элементов для полей группировки. Элементы полей группирования далее могут объединяться в группы, для которых можно указать тип итоговой функции.

Примечание.

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

· Консолидация данных . Это особый способ вычисления итогов для диапазона ячеек. Консолидируемые данные могут находится на одном и том же или нескольких листах рабочей книги, а также на листах нескольких разных рабочих книг. При консолидации доступны все типичные функции статистических итогов (сумма, среднее значение, максимум, минимум и т.п.). Результат консолидации записывается на лист рабочей книги, причем на одном и том же листе могут быть записаны несколько результатов консолидации с одними и теми же исходными диапазонами ячеек с данными, но с разными итоговыми функциями. Однако, если исходные диапазоны ячеек отличаются, результаты консолидации должны располагаться на разных листах. Различают следующие виды консолидации:


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

· Консолидация по категориям - когда данные исходных областей не упорядочены, но имеют одни и те же заголовки столбцов и строк. Этот способ применяется при консолидации данных рабочих листов, имеющих разную структуру, но одинаковые заголовки.

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

Примечание.

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

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

Общая информация

Для начала давайте ознакомимся с тем, что же собой представляет термин «агрегации». Это слово используется для обозначения процесса объединения разных элементов в одну общую систему. Это настолько общее понятие, что оно может использоваться во всех сферах, где можно наблюдать подобное. Можно даже назвать агрегацией собрание пары людей, что занимают определённое пространство. В это верится с трудом, но если ознакомиться с трудами, скажем, Эрика Берна, это не покажется выдумкой автора. Более того, агрегации - это базовое понятие в целом ряде систем классификации человеческих сообществ, что используются в психологии и социологии. В качестве альтернативы часто используют ещё такое словосочетание, как «социальная группа», которое является несколько более узнаваемым. Но это относится только к социологии и психологии. В других дисциплинах и сферах использования часто применяются иные альтернативные названия.

Агрегация информации

В последнее время часто высказывается предположение о том, что за двадцать первый век человеком было сгенерировано больше информации, чем за всю его предыдущую историю. К примеру, в Harvard Business Review провели исследование, согласно которому даже за последние несколько лет было создано такое количество данных, что они превышают всё, ранее сформулированное и представленное к нашему сведению. При этом наметилась тенденция, когда очень большие массивы качественного и интересного контента создают не профессиональные авторы, а обычные люди с помощью социальных сетей и блогов. Но такая агрегация данных имеет и негативные последствия. В первую очередь необходимо упомянуть о проблеме информационной перегрузки. Так обозначается ситуация, когда человеком получается так много данных, что становится сложно их всех воспринимать. Есть определённые проблемы и с распределением свободного времени. Так, специалисты ранее упомянутой Harvard Business Review утверждают, что сейчас человек около 1/5 своего времени тратит на поиск в Сети, из которого почти половина идёт на то, что уже было просмотрено. Из этого можно сделать заключение, что у нас есть определённые проблемы в плане как получения новых данных, так и хранения уже имеющихся.

Социальный аспект поведения

Человеку чрезвычайно сложно жить без общества.

В той или иной мере с другими людьми контактировать приходится практически каждому. Этому способствует и агрегация интересов, и создание комфортной среды. Интересна в этом плане роль социальных сетей (особенно в плане получения информации). Так, компания ComScore провела исследование, в результате которого установила, что каждый десятый посетитель новостных сайтов перед тем как зайти на них, посетил "Фейсбук". Таким образом, можно уверенно говорить о том, что сайты подобного типа постепенно увеличивают свою роль в плане поиска и ознакомления с информацией. А сколько же данных передаётся между людьми во время простого общения? Увы, человеку это даже не по силам подсчитать. Но провести подобную агрегацию смог бы искусственный интеллект.

Зачем это необходимо?

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

Как всё развивалось?

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

И когда сформировалась идея Web 2.0 и генерации пользователем контента, то возникли сервисы На момент их организации они были флагманами подобного движения. Многие из решений, которые возникли в то время, работают и сейчас. Сейчас подобные сервисы предлагают свои услуги в ранжировании и подборе контента. Как правило, это относится к новостным агрегатам. Но подобные механизмы используют и многие иные сервисы, вроде досок картинок, и много других. Даже упомянутые ранее социальные сети, когда предлагают новых людей для знакомства, действуют подобным образом, подбирая по интересам. Закономерное продолжение в виде идеи Web 3.0 представляет собой персонализацию информации и разработку различных способов её доставки к конечному потребителю. И благодаря росту размера информационного потока нагрузка на пользователя будет расти, а вместе с этим и улучшится качество фильтрации контента.

Агрегация каналов

Продолжаем разговор об информационных технологиях. В данном случае подразумевается объединение нескольких каналов передачи данных, которые находятся параллельно в рамках сети Ethernet, в один логический. Это позволяет повысить надёжность передачи данных и увеличить пропускную способность. Хотя и существуют различные реализации со своими специфическими моментами, но в общем всё выглядит именно так. Агрегация каналов является важным моментом в создании надёжных сетей. В случае повреждения одного провода информация будет передаваться по другим.

Агрегация в программировании

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

Агрегация тромбоцитов

Но не едиными информационными потоками живёт это понятие. Существует ещё и агрегация тромбоцитов. Что это такое? Так называется процесс слипания (склеивания) тромбоцитов под влиянием специфических стимуляторов между собой. Это всё, что собой представляет агрегация тромбоцитов? Что это такое на микроуровне? Способствуют этому специальные индукторы: серотонин, адреналин, тромбоксан А2, АДФ, нестабильные простагландины и тромбоцитоактивирующий фактор. Когда же и как всё будет происходить, определяют гликопротеины мембран тромбоцитов IIb/IIIa, когда они взаимодействуют между собой вместе с фибриногеном. Может ли быть такое, что будет нарушена агрегация тромбоцитов? Что это такое в перспективе? В подобном случае у человека наблюдается кровоточивость. При более детальном обследовании ему ставят диагноз болезни, в основе которой лежит недостаточность (как правило, врождённая) гликопротеинов или фибриногена.

Агрегация клеток

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

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

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

Если агрегированные переменные добавляются в активный набор данных, сам

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

Работа с файлами

Рисунок 9-7

Диалоговое окно Агрегировать данные

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

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

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

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

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

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

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

E Выберите одну или несколько агрегируемых переменных.

E Выберите агрегирующую функцию для каждой агрегируемой переменной.

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

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

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

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

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

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

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

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

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

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

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

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

Работа с файлами

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

Агрегирование данных: Агрегирующая функция

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

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

Число наблюдений, включая не взвешенные, взвешенные, не пропущенные и пропущенные.

Процент или доля значений больше или меньше указанного значения.

Процент или доля значений внутри или вне указанного диапазона значений

Рисунок 9-8

Диалоговое окно Агрегировать данные: Агрегирующая функция

Агрегирование данных: Имя и метка переменной

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В данном разделе рассматривается применение в запросе агрегирующих функций- функций вычисляющих результат по набору значений группы, либо всех записей БД. Например, функция sum возвращает сумму значений заданного поля, а функция count - общее число записей.

Агрегирующая функция может применяться ко всем записям БД слоя, к выборке по заданным условиям и, кроме того, возможно группирование записей слоя в несколько групп, и применение агрегирующей функции к каждой группе («Группировка записей»).

Применяемые агрегирующие функции записываются после ключевого слова SELECT . Также допускается использовать агрегирующие функции в составе выражений, включающих функции, арифметические и побитовые операции. В одном запросе может перечисляться несколько выражений с агрегирующими функциями. Не допускается в запросе одновременно с агрегирующими функциями запрашивать значения полей записей БД, либо использовать в аргументах неагрегирующих функций обращения к полям записей БД. Например, запрос вида SELECT SQRT(Area), SUM(Perimeter) FROM Здания не допускается, поскольку аргументом функции SQRT является название поля данных.

Общая запись агрегирующих функций:

<Функция> ([DISTINCT ] <выражение> )

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

Остальная часть запроса задается стандартным образом.

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

В языке SQL используются следующие агрегирующие функции:

SUM ([DISTINCT ] <выражение>)

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

AVG ([DISTINCT ] <выражение>)

Среднее значение для выражения. Выражение должно возвращать числовое значение.

COUNT ([DISTINCT ] <выражение> |*)

Подсчитывает число записей, в который выражение не имеет значение Null (поля имеют значение Null , когда никакое значение для них не задано). Выражение может возвращать произвольное значение.

При используемом формате функции COUNT (*) возвращает общее количество записей в БД слоя.

MAX (<выражение>)

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

MIN ( <выражение> )

Возвращает минимальное значение выражения из выборки.

Применение агрегирующих функций

Простой пример

SELECT SUM (Perimeter) FROM Здания

Выводит сумму периметров зданий.

Одновременное применение нескольких функций

SELECT AVG (Area), Count(*) FROM Здания

Выводит среднюю площадь здания и общее количество зданий.

Применение функций совместно с условиями отбора

SELECT SUM (Area) FROM Здания WHERE Улица="Нахимова"

Возвращает сумму площадей зданий расположенных на улице Нахимова.

Применение выражений в качестве аргументов агрегирующих функций

SELECT SUM(Area/Perimeter*2) FROM Здания

Для каждого здания рассчитывается величина равная Площадь/Периметр*2 и суммируется.

Применение агрегирующих функций в составе выражений

SELECT SQRT (SUM (Area)), "Общий периметр" + SUM (Perimeter) FROM Здания

Возвращает квадратный корень от суммарной площади всех зданий и фразу вида «Общий периметр XXX » , где XXX - суммарный периметр всех зданий.

Использование ключевого слова DISTINCT

SELECT COUNT(DISTINCT Улица) FROM Здания

Возвращает количество разных названий улиц в БД слоя.