Close
Логин:  Пароль: 
Поиск на форуме:
Расширенный поиск
kadrovik-info.ru
sekretar-info.ru
economist-info.ru
economist-info.ru
Журнал «Справочник экономиста»
Журнал «Справочник экономиста»

В ближайшую неделю день рождения празднуют:
Статус неизвестенПронина, Статус неизвестенПронина, Статус неизвестенНадежда, Статус неизвестенЕлена, Статус неизвестенWладимир.

Посмотреть все

Голосование:

Глобальные перспективы экономики РФ и стран ЕС, ваш прогноз.




Создание полного перечня пересечения объектов в Excel с помощью операции CrossJoin

Статья была опубликована в журнале «Справочник экономиста» № 11 ноябрь 2018.
Все права защищены. Воспроизведение, последующее распространение, сообщение в эфир или по кабелю, доведение до всеобщего сведения статей с сайта разрешается правообладателем только с обязательной ссылкой на печатное СМИ с указанием его названия, номера и года выпуска.

Рассмотрим приемы, с помощью которых можно создать полный перечень пересечения объектов в Excel (т. е. выполнить операциюи CrossJoin).

Предложим три варианта:

1) с использованием формул СТРОКА(), ОКРУГЛВВЕРХ(), ОСТАТ(), ИНДЕКС();

2) с помощью инструментов интерфейса Power Query;

3) с помощью DAX-запросов к таблицам в модели данных Power Pivot.

 

Периодически в Excel необходимо создать полный перечень пересечения объектов, например в случаях, когда мы хотим создать шаблон отчета либо правильно рассчитать метрики.

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

Имеем выгрузку продаж в кг за день по категории «Молочная продукция» в пяти магазинах (рис. 1). При этом у нас есть пять магазинов — таблица «Магазин» и пять единиц товаров — таблица «Товар».

Количество строк в отчете «Выгрузка» — 23, а полное пересечение магазинов и товаров — 25 строк (5 магазинов × 5 товаров). Это значит, что два товара в нашем случае имеют нулевые продажи за день, поэтому не попали в выгрузку.

Для магазина «Купеческий» нет категории «Молоко», для магазина «Фестивальный» — позиции «Йогурт».

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

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

Построим сводную таблицу, поместив в область строк поле «Магазин», в поле значений — Сумму по полю Продажи, кг, Среднее по полю продажи, кг, Количество по полю Продажи, кг (рис. 2).

Первый столбец значений — «Сумма» — показывает сумму проданных килограммов, а столбец «Количество» — количество категорий. Средним в сводной таблице является отношение суммы к количеству.

Мы знаем, что в нашей таблице перечислены не все категории, которые продавались в магазине, а значит, среднее значение по магазинам «Купеческий» и «Фестивальный» завышены.

Чтобы рассчитать среднее относительно всех категорий, нам необходимо сумму продаж разделить на пять (полное количество категорий) — столбец «Правильное среднее»на рис. 2.

Столбец «Отношение» на рис. 2 — это разница между столбцом «Правильное среднее» и «Среднее по полю продажи».

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

Полный перечень пересечений также называется операцией CROSSJOIN.

Способ 1

CrossJoin двух объектов с помощью формул

Мы знаем, что нам нужно создать полный список пересечений магазинов и товаров и у нас есть пять магазинов и пять товаров. Полный перечень — это всегда произведение уникальных значений каждого объекта. В нашем случае это 25 (рис. 3).

Если бы надо было добавить еще пять дней к перечню, то перечень состоял бы из 25 × 5 = 125 строк и т. д.

Порядок расчета:

1. Начиная с ячейки A2 пронумеруем строки от 1 до 25. Автор использует формулу:

=СТРОКА()–1

Функция СТРОКА() возвращает порядковый номер текущей строки.

2. В столбце B указан порядковый номер магазина. Нам необходимо сделать так, чтобы для порядковых номеров столбца А 1–5 был указан номер 1, для порядковых номеров 2–10 — номер 2 и т. д. Для этого запишем в ячейку B2 формулу:

=ОКРУГЛВВЕРХ(A2/5;0)

Функция ОКРУГЛВВЕРХ() округляет число до ближайшего сверху с заданной точностью. Мы делим число в столбце А на 5 и округляем до целого.

3. В столбце C указан порядковый номер товара. Нам необходимо сделать так, чтобы в данном столбце цифры от 1 до 5 шли в хронологическом порядке, возвращаясь после пяти к единице и т. д. Для этого запишем в ячейку C2 формулу:

=ЕСЛИ(ОСТАТ(A2;5)=0;5;ОСТАТ(A2;5))

Функция ОСТАТ() возвращает остаток от деления (в нашем случае — деления на 5). Если остаток равен нулю, то возвращает 5.

4. Теперь мы имеем порядковые номера магазинов — столбец B и порядковые номера товаров — столбец C. Чтобы добавить магазины в столбец D, воспользуемся функцией ИНДЕКС().

Для подстановки магазинов в столбце D функция будет выглядеть следующим образом:

=ИНДЕКС(Магазины;B2)

Для подстановки товаров в столбце E:

=ИНДЕКС(Товары;B2)

Столбцы D и E — это тот результат, к которому мы хотели прийти. Чтобы подставить продажи из первоначальной таблицы, можно воспользоваться функцией ВПР() по связке столбцов либо СУММЕСЛИМН(), где условиями будут «Магазины» и «Товары».

© 2006—2018, ООО «Профессиональное издательство» — издательство журнала «Справочник экономиста».
Воспроизведение, последующее распространение, сообщение в эфир или по кабелю, доведение до всеобщего сведения материалов с сайта разрешается правообладателем только с указанием гиперссылки на данный сайт, если не указано иное.