Сводные таблицы
Сводная таблица сворачивает тысячи строк в компактный отчёт за несколько кликов — без единой формулы.
Сводная таблица (pivot table) — инструмент, который группирует строки исходной таблицы по выбранным признакам и считает по ним итоги (сумму, среднее, количество), мгновенно перестраивая отчёт при перетаскивании полей.
Зачем это нужно
Представьте журнал продаж интернет-магазина: 5000 строк, каждая — это одна покупка с полями Дата, Город, Категория, Сумма. Вопрос директора: «Сколько мы продали по каждому городу за квартал?» Решать это формулами СУММЕСЛИ по каждому городу вручную — долго и хрупко: добавился новый город, и отчёт молчит. Сводная таблица отвечает на такой вопрос за десять секунд и сама подхватывает новые значения.
Главная идея: вы не пишете формулы, а раскладываете поля по областям. Программа сама находит уникальные значения и считает итоги. Это переход от «считать ячейки» к «задавать вопросы данным».
Четыре области сводной
Любая сводная строится из четырёх «корзин», куда вы перетаскиваете заголовки столбцов исходной таблицы:
| Область | Что туда кладут | Пример |
|---|---|---|
| Строки | признак, по которому идёт разбивка сверху вниз | Город |
| Столбцы | второй признак, разбивка слева направо | Категория |
| Значения | число, которое агрегируется (сумма, среднее, счёт) | Сумма заказа |
| Фильтры | срез всей таблицы целиком | Год = 2025 |
Перетащили Город в строки, Сумма в значения — и получили выручку по городам. Добавили Категория в столбцы — таблица превратилась в матрицу «город × категория».
Пример «было → стало»
Было — плоский журнал (фрагмент из 8 строк):
| Город | Категория | Сумма |
|---|---|---|
| Москва | Книги | 1200 |
| Москва | Игры | 3000 |
| Казань | Книги | 800 |
| Москва | Книги | 500 |
| Казань | Игры | 2000 |
| Казань | Книги | 700 |
| Москва | Игры | 1500 |
| Казань | Игры | 1000 |
Стало — сводная (строки = Город, столбцы = Категория, значения = сумма по полю Сумма):
| Сумма | Игры | Книги | Итог |
|---|---|---|---|
| Казань | 3000 | 1500 | 4500 |
| Москва | 4500 | 1700 | 6200 |
| Итог | 7500 | 3200 | 10700 |
Восемь строк журнала свернулись в матрицу 2×2 с итогами по краям. Проверьте Казань-Игры: 2000 + 1000 = 3000 — сходится.
Группировка и агрегирование
В области значений вы выбираете, как сворачивать числа. Самые частые операции:
- Сумма — складывает все попавшие в ячейку значения (выручка, штуки).
- Количество — считает число строк (сколько было заказов).
- Среднее — арифметическое среднее (средний чек).
- Максимум / минимум — крайние значения.
Средний чек по городу — это сумма выручки, делённая на число заказов. Формально для города с заказами на суммы $x_1, x_2, \ldots, x_n$ среднее равно:
$$ \bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i $$
Для Москвы (4 заказа: 1200, 3000, 500, 1500) получаем $\bar{x} = \frac{6200}{4} = 1550$ рублей. Сводная посчитает это сама, если в значениях выбрать операцию «Среднее».
Даты обычно группируют по месяцам и кварталам: программа берёт поле Дата и сворачивает дни в более крупные периоды, чтобы отчёт стал читаемым.
Как это работает
Под капотом сводная делает то же, что в программировании называют «группировкой со свёрткой». Она проходит по всем строкам, для каждой вычисляет ключ (например, пара «Город+Категория») и накапливает итог в словаре ключ → сумма. Покажем это на чистом Python — он повторяет логику сводной по полю «Город»:
from collections import defaultdict
rows = [
("Москва", "Книги", 1200),
("Москва", "Игры", 3000),
("Казань", "Книги", 800),
("Москва", "Книги", 500),
("Казань", "Игры", 2000),
("Казань", "Книги", 700),
("Москва", "Игры", 1500),
("Казань", "Игры", 1000),
]
itogo = defaultdict(int)
for city, category, amount in rows:
itogo[city] += amount # ключ = город, копим сумму
for city in sorted(itogo):
print(city, itogo[city])
print("Всего:", sum(itogo.values()))
Вывод:
Казань 4500 Москва 6200 Всего: 10700
Числа совпали со столбцом «Итог» в нашей сводной. Сводная таблица — это, по сути, такой цикл, обёрнутый в наглядный интерфейс: вы только указываете, что класть в ключ, а что суммировать.
Частые ошибки
- Пустые заголовки или пробелы в шапке. Если у столбца нет имени, программа не возьмёт его как поле. Каждый столбец исходной таблицы должен иметь уникальный заголовок.
- Дыры и итоги внутри данных. Пустая строка разрывает диапазон, а строка «Итого» посреди журнала попадёт в сводную как обычная запись и удвоит суммы. Исходник — это плоский список без промежуточных итогов.
- Числа как текст. Если суммы записаны текстом (с лишними пробелами или буквой в конце), операция «Сумма» даст ноль или ошибку — сводная не складывает текст.
- Забыли обновить. Сводная не пересчитывается сама при изменении исходника — нужно нажать «Обновить». Это частая причина «устаревшего» отчёта.
- Перепутали сумму и количество. «Количество по полю Сумма» считает число заказов, а не выручку. Всегда проверяйте, какая операция выбрана в области значений.
Итоги
- Сводная таблица группирует строки по признакам и считает итоги без формул.
- Четыре области: строки, столбцы, значения и фильтры — вы раскладываете поля по ним мышью.
- В значениях выбирается операция свёртки: сумма, количество, среднее, минимум, максимум.
- Под капотом это группировка со свёрткой (словарь «ключ → итог»), как в примере на Python.
- Исходник держите плоским и чистым, а сводную не забывайте обновлять.