Иван Бат Пользователь Сообщений: 47 |
Добрый день. Суммировать значения по 3м критериям: Ссылка на массив ячеек, удовлетворяющих определенным критериям, но может быть я ошибаюсь: В примере попробовал изложить то, что нужно. |
Hugo Пользователь Сообщений: 23252 |
без участия VBA — это значит то, что написано? Изменено: Hugo — 19.12.2013 14:37:17 |
Иван Бат Пользователь Сообщений: 47 |
Без VBA это без макросов, пользовательских функций и прочих премудростей. Без пользовательских не потому, что сложно, а что бы не было проблем с использованием файла на других ПК. |
Hugo Пользователь Сообщений: 23252 |
Хороший вопрос |
Иван Бат Пользователь Сообщений: 47 |
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
Ждите. А лучше сразу пишите в поддержку Microsoft Office, т.к. функциями листа без VBA этого не сделать. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
Иван Бат Пользователь Сообщений: 47 |
А вдруг? Эх, а так хотелось… |
Юрий М Модератор Сообщений: 60577 Контакты см. в профиле |
#8 19.12.2013 15:24:47
А какие видятся проблемы на других машинах? |
||
SkyPro Пользователь Сообщений: 309 |
Excel Starter может стать проблемой |
Юрий М Модератор Сообщений: 60577 Контакты см. в профиле |
|
ZVI Пользователь Сообщений: 4328 |
Вот здесь еще был VBA-вариант |
Иван Бат Пользователь Сообщений: 47 |
#12 19.12.2013 19:13:04
Особых проблем конечно никаких. Но помнить о том, что где то могут макросы быть заблокированы и прочие такие плюхи… |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
Так может попробовать принудить пользователей пользоваться макросами? — Как запустить файл с включенными макросами? Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
AndreTM Пользователь Сообщений: 454 |
#14 20.12.2013 00:07:57 Был пример
решения только функциями… Но с одним доп.столбцом. |
Файлы к уроку:
- Для спонсоров Boosty
- Для спонсоров VK
Ссылки:
- Страница курса
- Плейлист YouTube
- Плейлист ВК
Описание
В этом уроке вы узнаете как объединить 2 таблицы и сразу же сделать агрегирование. Это аналог SELECT с JOIN и GROUP BY.
Есть 2 таблицы с исходными данными. В одной таблице находится 2 столбца: 1) Код товара, 2) Название товара. В другой таблице находятся данные по продажам.
Нужно получить таблицу, в которой будут все столбцы из первой таблицы и итоговые агрегированные данные по продажам из второй таблицы.
Выходит, что мы выполняем сразу 2 операции:
- Операция объединения таблиц
- Операция группировки
Именно эти 2 шага мы и выполним, но воспользуемся встроенным функционалом Power Query, которым позволит нам сократить количество шагов.
Решение
После подготовки данных задача решается всего в 2 шага:
- Объединить таблицы по столбцу Код
- Кликнуть на пиктограмму разворота табличного столбца и выбрать вкладку Агрегировать. На этой вкладке указать нужные агрегирования
Примененные функции
- Csv.Document
- File.Contents
- Table.Skip
- Table.PromoteHeaders
- Table.SelectRows
- Table.SelectColumns
- Table.TransformColumnTypes
- Excel.Workbook
- Table.NestedJoin
- JoinKind.LeftOuter
- Table.AggregateTableColumn
- Table.Sort
- Order.Descending
Код
Подключение к первому источнику:
let
source = Csv.Document(
File.Contents(path & "2018.10.txt"),
[Delimiter = " ", Columns = 26, Encoding = 65001, QuoteStyle = QuoteStyle.None]
),
rows_skip = Table.Skip(source, 4),
headers_promote = Table.PromoteHeaders(rows_skip, [PromoteAllScalars = true]),
rows_select = Table.SelectRows(headers_promote, each ([Дата] <> "Итого")),
cols_select = Table.SelectColumns(
rows_select,
{
"Код",
"Номенклатура",
"Количество",
"Сумма",
"Себестоимость сумма",
"Премия сумма"
}
),
types = Table.TransformColumnTypes(
cols_select,
{
{"Количество", Int64.Type},
{"Сумма", type number},
{"Себестоимость сумма", type number},
{"Премия сумма", type number}
}
)
in
types
Подключение ко второму источнику:
let
source = Excel.Workbook(File.Contents(path & "И_Стоки.xlsx"), null, true),
get_sheet = source{[Item = "Сток GSM", Kind = "Sheet"]}[Data],
headers_promote = Table.PromoteHeaders(get_sheet, [PromoteAllScalars = true]),
types = Table.TransformColumnTypes(
headers_promote,
{{"Код", type text}, {"Номенклатура", type text}}
)
in
types
Код объединения двух датасетов с агрегированием:
let
source = Table.NestedJoin(
stock,
{"Код"},
sales,
{"Код"},
"sales",
JoinKind.LeftOuter
),
aggregate = Table.AggregateTableColumn(
source,
"sales",
{
{"Количество", List.Sum, "Сумма Количество"},
{"Сумма", List.Sum, "Сумма Сумма"},
{"Себестоимость сумма", List.Sum, "Сумма Себестоимость сумма"},
{"Премия сумма", List.Sum, "Сумма Премия сумма"}
}
),
table_sort = Table.Sort(aggregate, {{"Сумма Количество", Order.Descending}})
in
table_sort
Этот урок входит в Базовый курс Power Query
Номер урока | Урок | Описание |
---|---|---|
1 | Зачем нужен Power Query. Обзор возможностей | Этот урок сам по себе является мини-курсом. Здесь вы узнаете для каких видов операций с данными создан Power Query. |
2 | Подключение Excel | Подключаемся к файлам Excel. Импортируем данные из таблиц, именных диапазонов, динамических именных диапазонов. |
3 | Подключение CSV/TXT, таблиц, диапазонов | Подключаемся к к файлам CSV/TXT, Excel. |
4 | Объединить таблицы по вертикали | Учимся объединять две таблицы по вертикали — combine. |
5 | Объединить по вертикали все таблицы одной книги друг за другом | Как объединить по вертикали все таблицы одной книги, находящиеся на разных листах Excel. |
6 | Объединить по вертикали все файлы в папке | Объединяем по вертикали таблицы, которые находятся в разных файлах в одной папке. |
7 | Объединение таблиц по горизонтали | Учимся объединять таблицы по горизонтали — JOIN, merge. |
8 | Объединить таблицы с агрегированием | Объединить таблицы по горизонтали и сразу выполнить группировку с агрегированием — JOIN + GROUP BY. |
9 | Анпивот (Unpivot) | Изучаем операцию Анпивот — из сводной таблицы делаем таблицу с данными. |
10 | Многоуровневый анпивот (Анпивот с подкатегориями) | Более сложный вариант Анпивота — в строках находится несколько измерений. |
11 | Скученные данные | Данные собраны в одном столбце, нужно правильно его разбить на несколько. |
12 | Скученные данные 2 | Разбираем еще один пример скученных данных. |
13 | Ссылка на другую строку | Как сослаться на другую строку. |
14 | Ссылка на другую строку 2 | Как сослаться на другую строку, используя объединение по горизонтали. |
15 | Виды объединения таблиц по горизонтали | Изучаем виды объединения таблиц по горизонтали — LEFT JOIN, FULL JOIN, INNER JOIN, CROSS JOIN. |
16 | Виды объединения таблиц по горизонтали 2 | Изучаем анти-соединение и соединение таблицы с ней же самой — ANTI JOIN, SELF JOIN. |
17 | Группировка | Изучаем операцию группировки с агрегированием — GROUP BY. |
18 | Консолидация множества таблиц пользовательской функцией | Объединяем по вертикали множество таблиц с предварительной обработкой при помощи пользовательской функции. |
19 | Деление на справочник и факт | Разделим один датасет на два датасета: справочник и факт. |
20 | Создание параметра | Мы можем ввести значение в какую-то ячейку Excel, а потом передать это значение в формулу Power Query. |
21 | Таблица параметров | Создадим целую таблицу параметров и будем их использовать в запросах Power Query. |
22 | Объединение таблиц по вертикали, когда не совпадают заголовки столбцов | Как объединить две таблицы по вертикали, если названия столбцов не совпадают. |
23 | Поиск ключевых слов | Научимся искать ключевые слова в текстовом поле. |
24 | Поиск ключевых слов 2 | Будем искать ключевые поля в текстовом поле и присваивать этому значению какую-то категорию. |
В начале 2016 года Microsoft Excel выпустил очередной релиз своей программы. В этой заметке рассмотрены две новые текстовые функции Excel. На момент написания этой статьи они доступны пока только в режиме Excel online, поэтому скриншоты и последующий ролик записаны именно там.
Чтобы объединить содержимое нескольких ячеек в одну, традиционно используют формулу Excel СЦЕПИТЬ либо специальный оператор амперсанд &. В то же время у этой функции есть ряд недостатков. Основной из них — это необходимость каждую склеиваемую ячейку указывать в виде отдельного аргумента. При большом количестве склеиваемых ячеек приходится изрядно помучиться. С появлением новых функций СЦЕП и ОБЪЕДИНИТЬ этому неудобству пришел конец.
На смену СЦЕПИТЬ пришла функция СЦЕП, которая может сцепить целый диапазон! Теперь вместо отдельных ячеек A1;A2;A3;A4;A5;A6;A7;A8;A9;A10 достаточно указать диапазон A1:A10. Многие давно этого ждали. Дождались!
Однако радость кажется неполной, т.к. между словами обычно вставляют пробелы, запятые или какие-либо другие разделители, а СЦЕП этого не умеет. В примере выше нужно их либо сразу указать в конце каждого слова, либо опять же прописывать вручную. Вот бы здорово еще и разделители сами вставлялись.
Вы не поверите, но это как раз то, что умеет делать вторая текстовая функция эксель, о которой я хотел рассказать! Встречайте — ОБЪЕДИНИТЬ.
Ее синтаксис следующий.
ОБЪЕДИНИТЬ(разделитель; игнорировать_пустые; текст1; [текст2]; …)
разделитель – то, что должно вставляться между ячейками.
игнорировать_пустые – здесь ставится либо 0 (ЛОЖЬ), либо 1 (ИСТИНА). Если поставить 1, то пустые ячейки будут игнорироваться и разделители не будут дублироваться.
текст1; [текст2]; … – это либо отдельные ячейки, либо целый соединяемый диапазон.
В нашем примере функция ОБЪЕДИНИТЬ позволяет получить следующий результат.
Примечание. Некоторое время функция имела названия TEXTJOIN.
Я специально удалил бананы, чтобы показать отсутствие лишнего пробела после яблок.
Теперь объединить ячейки Excel, добавив к ним разделитель, можно всего за несколько секунд. Отличная функция ОБЪЕДИНИТЬ. Выглядит настолько круто, что хочется разработчикам пожать руку.
Поделиться в социальных сетях:
FULL OUTER JOIN средствами excel |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Время на прочтение
7 мин
Количество просмотров 194K
В данной статье я хочу рассказать о некоторых возможностях бесплатной и крайне полезной, но пока еще мало известной надстройки над MS Excel под названием Power Query.
Power Query позволяет забирать данные из самых разных источников (таких как csv, xls, json, текстовых файлов, папок с этими файлами, самых разных баз данных, различных api вроде Facebook opengraph, Google Analytics, Яндекс.Метрика, CallTouch и много чего еще), создавать
повторяемые последовательности обработки
этих данных и загружать их внутрь таблиц Excel или самого data model.
И вот под катом вы можете найти подробности всего этого великолепия возможностей.
Совместимость и технические подробности
Power Query доступен бесплатно для всех версий Windows Excel 2010, 2013 и встроен по умолчанию в Windows Excel 2016. Для пользователей MacOS X Power Query недоступен (впрочем, даже без этого маковский Excel отвратителен на ощупь и продвинутые пользователи, включая меня, чаще всего работают с нормальным Excel через Parallels или запуская его на удаленной виндовой машинке).
Также, Power Query встроен в новый продукт для бизнес аналитики — Power BI, а еще, ходят слухи, что Power Query будет появляться и в составе других продуктов от Microsoft. Т.е. Power Query ждет светлое будущее и самое время для адептов технологий Microsoft (и не только) заняться его освоением.
Как оно работает
После установки Power Query в интерфейсе Excel 2010–2013 появляется отдельная одноименная вкладка.
В новом Excel 2016 функционал Power Query доступен на вкладке Data (данные), в блоке “Get & Transform”.
Сначала, в интерфейсе Excel мы выбираем конкретный источник данных, откуда нам их нужно получить, и перед нами открывается окошко самого Power Query с предпросмотром первых строчек загруженных данных (область 1). В верхней части окошка располагается Ribbon с командами по обработке данных (область 2). И в правой части экрана (область 3) у нас расположена панель с последовательностью всех действий, которые применяются к данным.
Возможности Power Query
У Power Query очень много возможностей и я хочу остановиться на некоторых из числа моих любимых.
Как я уже писал выше, Power Query замечателен тем, что позволяет подключаться к самым разным источникам данных. Так он позволяет загружать данные из CSV, TXT, XML, json файлов. Притом процесс выбора опций загрузки тех-же CSV файлов гибче и удобнее, чем он реализован штатными средствами Excel: кодировка автоматически выбирается часто правильно и можно указать символ разделителя столбцов.
Объединение файлов лежащих в папке
Power Query умеет забирать данные из указанной папки и объединять их содержимое в единые таблицы. Это может быть полезно, например, если вам периодически приходят какие-то специализированные отчеты за отдельный промежуток времени, но данные для анализа нужны в общей таблице. Гифка
Текстовые функции
К столбцам из текста в Power Query по нажатию на кнопки на Ribbon можно применять такие функции как:
- Разделить столбец по символу или по количеству символов. И в отличие от Excel можно задать максимальное количество столбцов, а также направление откуда нужно считать символы — слева, справа.
- Изменить регистр ячеек в столбце
- Подсчитать количество символов в ячейках столбца.
Числовые функции
К столбцам с числовыми значениями по нажатию на кнопки на Ribbon можно применять:
- Арифметические операции
- Возводить в степени, вычислять логарифмы, факториалы, корни
- Тригонометрические операции
- Округлять до заданных значений
- Определять четность и т.д.
Функции для работы с датами, временем и продолжительностью
К столбцам со значениями даты и времени по нажатию на кнопки на Ribbon можно применять:
- Автоматическое определение формата вписанной даты (в excel c этим большая боль)
- Извлекать в один клик номер месяца, дня недели, количество дней или часов в периоде и т.п.
Unpivot — Pivot
В интерфейсе Power Query есть функция “Unpivot”, которая в один клик позволяет привести данные с одной метрикой разложенные по столбцам по периодам к форме, которая будет удобна для использования в сводных таблицах (понимаю что трудно написал — смотрите пример). Также, есть функция с обратным действие Pivot. Гифка
Операция Merge — смерть ВПР
Функция ВПР (VLOOKUP) одна из наиболее используемых функций в MS Excel. Она позволяет подтягивать данные в одну таблицу из другой таблицы по единому ключу. И вот как раз для этой функции в Power Query есть гораздо более удобная альтернатива — операция Merge. При помощи этой операции соединение таблиц нескольких таблиц в одну по ключу (по простому или по составному ключу, когда соответствие нужно находить по нескольким столбцам) выполняется буквально в 7 кликов мыши без ввода с клавиатуры.
Операция Merge — это аналог join в sql, и ее можно настроить чтобы join был разных типов — Inner (default), Left Outer, Right Outer, Full Outer.
Upd.Мне тут подсказали, что Power Query не умеет делать Aproximate join, а впр умеет. Чистая правда, из коробки альтернатив нет. Гифка
Подключение к различным базам данных. Query Folding.
Power Query также замечателен тем, что умеет цепляться к самым разным базам данных — от MS SQL и MySQL до Postgres и HP Vertica. При этом, вам даже не нужно знать SQL или другой язык базы данных, т.к. предпросмотр данных отображается в интерфейсе Power Query и все те операции, которые выполняются в интерфейсе прозрачно транслируются в язык запросов к базе данных.
А еще в Power Query есть понятие Query Folding: если вы подключены к совместимой базе данных (на текущий момент это MS SQl), то тяжелые операции по обработке данных Power Query будет стараться выполнить на серверной стороне и забирать к себе лишь обработанные данные. Эта возможность радикально улучшает быстродействие многих обработок.
Язык программирования “М”
Надстройка Power Query — это интерпретатор нового, скриптового, специализированного для работы с данными, языка программирования М.
На каждое действие, которое мы выполняем с данными в графическом интерфейсе Power Query, в скрипт у нас пишется новая строчка кода. Отражая это, в панели с последовательностью действий (область 3), создается новый шаг с говорящим названием. Благодаря этому, используя панель с последовательностью действий, мы всегда можем посмотреть как выглядят у нас данные на каждом шаге обработки, можем добавить новые шаги, изменить настройки применяемой операции на конкретном шаге, поменять их порядок или удалить ненужные шаги. Гифка
Также, мы всегда можем посмотреть и отредактировать сам код написанного скрипта. И выглядеть будет он примерно так:
Язык M, к сожалению, не похож ни на язык формул в Excel, ни на MDX и, к счастью, не похож на Visual Basic. Однако, он очень прост в изучении и открывает огромные возможности по манипуляции данными, которые недоступны с использованием графического интерфейса.
Загрузка данных из Яндекс.Метрики, Google Analytics и прочих Api
Немного овладев языком “M” я смог написать программки в Power Query, которые умеют подключаться к API Яндекс.Метрики и Google Analytics и забирать оттуда данные с задаваемыми настройками. Программки PQYandexMetrika и PQGoogleAnalytics я выложил в опенсорс на гитхаб под лицензией GPL. Призываю пользоваться. И я буду очень рад, если эти программы будут дорабатываться энтузиастами.
Для Google Analytics подобного рода экспортеров в разных реализациях достаточно много, но вот для Яндекс.Метрики, насколько я знаю, мой экспортер был первым публично доступным, да еще и бесплатным
Power Query умеет формировать headers для post и get запросов и забирать данные из интернета. Благодаря этому, при должном уровне сноровки, Power Query можно подключить практически к любым API. В частности, я для своих исследований дергаю данные по телефонным звонкам клиентов из CallTouch API, из API сервиса по мониторингу активности за компьютером Rescuetime, занимаюсь парсингом нужных мне веб-страничек на предмет извлечения актуальной информации.
Еще раз про повторяемость и про варианты применения
Как я уже писал выше, скрипт Power Query представляет собой повторяемую последовательность манипуляций, применяемых к данным. Это значит, что однажды настроив нужную вам обработку вы сможете применить ее к новым файлам изменив всего один шаг в скрипте — указав путь к новому файлу. Благодаря этому можно избавиться от огромного количества рутины и освободить время для продуктивной работы — анализа данных.
Я занимаюсь веб-аналитикой и контекстной рекламой. И так уж получилось, что с момента, как я познакомился с Power Query в ее интерфейсах я провожу больше времени, чем в самом Excel. Мне так удобнее. Вместе с тем возросло и мое потребление другой замечательной надстройки в MS Excel — PowerPivot.
Вот часть задач, которые я делаю с использованием Power Query:
- разбираю семантику для Толстых проектов,
- Делаю частотные словари,
- Создаю веб-аналитические дашборды и отчеты для анализа конкретных срезов,
- Восстанавливаю достижение целей в системах веб-аналитики, если они не настроены на проекте,
- Сглаживаю прогноз вероятности методами Андрея Белоусова (+Байеса:),
- Делаю аудит контекстной рекламы на данных из K50 статистика,
- И много других разных ad-hoc analysis задач, которые нужно сделать лишь однажды
Вот bi систему, про которую я рассказывал на Yac/M 2015 (видео) я делал полнстью при помощи Power Query и загружал данные внутрь PowerPivot.
Пару слов про локализацию
На сайте Microsoft для пользователей из России по умолчанию скачивается Power Query с переведенным на русским язык интерфейсом. К счастью, локализаторы до перевода на русский языка программирования (как это сделано с языком формул в excel) не добрались, однако жизнь пользователям неоднозначными переводами сильно усложнили. И я призываю вас скачивать, устанавливать и пользоваться английской версией Power Query. Поверьте, она будет гораздо понятнее.
Ссылки по теме
Официальные ресурсы на английском:
- Скачать Английскую версию Power Query
- Справка по формулам языка M
- Ветка Форума Microsoft Technet про Power Query
На момент написания статьи на русском языке информации по Power Query практически нет, и то что мной найдено приведено ниже:
- Импорт данных из таблиц в Google Spreadsheets
- Power BI. Получаем данные из REST API
- Сообщество продвинутых пользователей Excel, Power Pivot и Power Query в Facebook
- Обновляемая страничка в Marketing-wiki про Power Query
На английском:
- Видео с демонстрацией возможностей Power Query на конференции TechEd North America
- Блог Chris Webb, пожалуй наиболее полный ресурс с примерами использования Power Query
- Книга Chris Webb — Power Query for Power BI and Excel
- Блог Ken Puls
- Курс «Excel для интернет-маркетинга»
- Курс «Power BI для интернет-маркетинга»
- Книга Ken Puls и Miguel Escobar — M is for Data Monkey