Аналог join в excel

 

Иван Бат

Пользователь

Сообщений: 47
Регистрация: 18.01.2013

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

Суммировать значения по 3м критериям:
{=СУММ(ЕСЛИ((Н2!$B$1:$B$19000=A3)*(Н2!$J$1:$J$19000>=G3)*(Н2!$J$1:$J$19000<=H3);Н2!$AG$1:$AG$19000))}

Ссылка на массив ячеек, удовлетворяющих определенным критериям, но может быть я ошибаюсь:
{=ЕСЛИ((Н2!$B$1:$B$19000=A3)*(Н2!$J$1:$J$19000>=G3)*(Н2!$J$1:$J$19000<=H3);Н2!$AG$1:$AG$19000)}

В примере попробовал изложить то, что нужно.

 

Hugo

Пользователь

Сообщений: 23252
Регистрация: 22.12.2012

без участия VBA — это значит то, что написано?
Потому что всегда такое делали с помощью UDF…
И было бы в формуле.
Тем более что там собираетесь 1900 строк просматривать — это же сколько фамилий может в одну ячейку через разделитель отобраться?…

Изменено: Hugo19.12.2013 14:37:17

 

Иван Бат

Пользователь

Сообщений: 47
Регистрация: 18.01.2013

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

 

Hugo

Пользователь

Сообщений: 23252
Регистрация: 22.12.2012

Хороший вопрос :)
Ктоб ответил…

 

Иван Бат

Пользователь

Сообщений: 47
Регистрация: 18.01.2013

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Ждите. А лучше сразу пишите в поддержку Microsoft Office, т.к. функциями листа без VBA этого не сделать.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Иван Бат

Пользователь

Сообщений: 47
Регистрация: 18.01.2013

А вдруг? :)
Вашу пользовательскую функцию СцепитьЕсли уже посмотрел — наверное будут доделывать под себя.

Эх, а так хотелось…

 

Юрий М

Модератор

Сообщений: 60577
Регистрация: 14.09.2012

Контакты см. в профиле

#8

19.12.2013 15:24:47

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

А какие видятся проблемы на других машинах?

 

SkyPro

Пользователь

Сообщений: 309
Регистрация: 23.07.2013

Excel Starter может стать проблемой :)

 

Юрий М

Модератор

Сообщений: 60577
Регистрация: 14.09.2012

Контакты см. в профиле

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

Вот

здесь

еще был VBA-вариант

 

Иван Бат

Пользователь

Сообщений: 47
Регистрация: 18.01.2013

#12

19.12.2013 19:13:04

Цитата
А какие видятся проблемы на других машинах?

Особых проблем конечно никаких. Но помнить о том, что где то могут макросы быть заблокированы и прочие такие плюхи…
Поэтому и копаю в сторону формулы.

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Так может попробовать принудить пользователей пользоваться макросами? —

Как запустить файл с включенными макросами?

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

AndreTM

Пользователь

Сообщений: 454
Регистрация: 02.05.2013

#14

20.12.2013 00:07:57

Был пример

решения только функциями… Но с одним доп.столбцом.

Файлы к уроку:

  • Для спонсоров Boosty
  • Для спонсоров VK

Ссылки:

  • Страница курса
  • Плейлист YouTube
  • Плейлист ВК

Описание

В этом уроке вы узнаете как объединить 2 таблицы и сразу же сделать агрегирование. Это аналог SELECT с JOIN и GROUP BY.

Есть 2 таблицы с исходными данными. В одной таблице находится 2 столбца: 1) Код товара, 2) Название товара. В другой таблице находятся данные по продажам.

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

Выходит, что мы выполняем сразу 2 операции:

  1. Операция объединения таблиц
  2. Операция группировки

Именно эти 2 шага мы и выполним, но воспользуемся встроенным функционалом Power Query, которым позволит нам сократить количество шагов.

Решение

После подготовки данных задача решается всего в 2 шага:

  1. Объединить таблицы по столбцу Код
  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. Многие давно этого ждали. Дождались!

Функция Excel СЦЕП

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

Вы не поверите, но это как раз то, что умеет делать вторая текстовая функция эксель, о которой я хотел рассказать! Встречайте — ОБЪЕДИНИТЬ.

Ее синтаксис следующий.

ОБЪЕДИНИТЬ(разделитель; игнорировать_пустые; текст1; [текст2]; …)

разделитель – то, что должно вставляться между ячейками.

игнорировать_пустые – здесь ставится либо 0 (ЛОЖЬ), либо 1 (ИСТИНА). Если поставить 1, то пустые ячейки будут игнорироваться и разделители не будут дублироваться.

текст1; [текст2]; … – это либо отдельные ячейки, либо целый соединяемый диапазон.

В нашем примере функция ОБЪЕДИНИТЬ позволяет получить следующий результат.

Функция Excel TEXTJOIN

Примечание. Некоторое время функция имела названия TEXTJOIN.

Я специально удалил бананы, чтобы показать отсутствие лишнего пробела после яблок.

Теперь объединить ячейки Excel, добавив к ним разделитель, можно всего за несколько секунд. Отличная функция ОБЪЕДИНИТЬ. Выглядит настолько круто, что хочется разработчикам пожать руку.

Поделиться в социальных сетях:

FULL OUTER JOIN средствами excel

SergeyKorotun

Дата: Воскресенье, 17.11.2013, 23:08 |
Сообщение № 1

Группа: Проверенные

Ранг: Обитатель

Сообщений: 301


Репутация:

15

±

Замечаний:
0% ±


Excel 2007

FULL OUTER JOIN
1. В результат включается внутреннее соединение (INNER JOIN) первой и второй таблиц.
2. В результат добавляются те записи первой таблицы, которые не вошли во внутреннее соединение на шаге 1. Для таких записей поля, соответствующие второй таблице, заполняются значениями NULL.
3. В результат добавляются те записи второй таблицы, которые не вошли во внутреннее соединение на шаге 1. Для таких записей поля, соответствующие первой таблице, заполняются значениями NULL.

ВПР или ИНДЕКС реализуют LEFT OUTER JOIN
Если фильтром скрыть строки с #Н/Д, то получится INNER JOIN
А как реализовать FULL OUTER JOIN?

Пример в прикрепленном файле.

К сообщению приложен файл:

qwerty6.xlsm
(11.6 Kb)

 

Ответить

_Boroda_

Дата: Воскресенье, 17.11.2013, 23:45 |
Сообщение № 2

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Сводной таблицей пойдет?


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

SergeyKorotun

Дата: Понедельник, 18.11.2013, 00:37 |
Сообщение № 3

Группа: Проверенные

Ранг: Обитатель

Сообщений: 301


Репутация:

15

±

Замечаний:
0% ±


Excel 2007

подойдет, но я наверно плохо объяснил.
Изначально на листах есть только три столбца: id_1, id_2, «начислено» на одном листе и id_1, id_2, «уплачено» на втором. Остальные столбцы добавлены уже мной в процессе попытки решить задачу. Сходу не разобрался как создана сводная таблица, но результаты там задвоены.
Берем первую строку со значениями на 1 листе (1 a 10) и (1 а) ищем на втором листе, такая строка есть, значит на 3 лист добавляем всю строку с первого листа (1 a 10) и в следующий столбец заносим значение из соответствующей строки 2 листа — это 15 и на 3 листе получим (1 a 10 15). Еще как то надо пометить строку на 2 листе как использованную. В SQL это внутреннее соединение.
Берем следующую строку на 1 листе (1 b) и выполнили бы те же действия, если бы (1 b) нашли во второй таблице. Но поскольку (1 b) там нет, то на 3 лист в новую строку заносим значения с 1 листа (1 b 25), а 4-й столбец не заполняем. В SQL это левостороннее соединение.
И так обрабатываем все строки с 1 листа.
После этого пробегаемся по неиспользованным строкам на 2-м листе и заносим их на 3 лист, но значение из 1 и 2 столбца заносим в 1 и 2 столбец 3-го листа, а значение 3 столбца из 2-го листа заносим в 4 столбец 3-го листа (чтобы уплата не попала в начисление). Значение 3 столбца оставляем пустым.
Если снова не понятно излагаю, может еще раз прочитать определение FULL OUTER JOIN в СТ
PS Может быть там где написано «оставляем пустым» заменить на «заносим нуль», чтобы позже не было проблем с выполнением арифметических операций.

Сообщение отредактировал SergeyKorotunПонедельник, 18.11.2013, 00:42

 

Ответить

AndreTM

Дата: Понедельник, 18.11.2013, 07:38 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

А я всё же считаю, что проще в данном случае сделать через ADO.
Поскольку текст запроса можно сначала программно собрать в текстовую переменную, то количество ключевых полей значения не имеет. Пример реализации FULL OUTER JOIN — см. в файле. Единственное — если надо получить записи в результате именно в том виде, что вы хотите (сначала INNER JOIN, затем OUTER), то можно добавить в запросы поле для сортировки, которое затем исключить в объединенной выборке…


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

SergeyKorotun

Дата: Пятница, 22.11.2013, 13:21 |
Сообщение № 5

Группа: Проверенные

Ранг: Обитатель

Сообщений: 301


Репутация:

15

±

Замечаний:
0% ±


Excel 2007

Пример реализации FULL OUTER JOIN — см. в файле.

Тест показал, что [vba]

Код

Select Distinct * from ((select * from t1 left join t2 on t1.id=t2.id …) union (select * from t1 right join t2 on t1.id=t2.id …))

[/vba] не всегда есть аналогом FULL OUTER JOIN
Например, если в [vba]

Код

(t1 left join t2 on t1.id=t2.id …)

[/vba] условия t1.id=t2.id … не будут обеспечивать связь один к одному, то Distinct удалит не только одну из задвоенных записей, включенные в выборку и по left join и по right join, но и удалит нужные записи, полученные в результате соединения один ко многим.

Сообщение отредактировал SergeyKorotunПятница, 22.11.2013, 13:24

 

Ответить

_Boroda_

Дата: Пятница, 22.11.2013, 14:28 |
Сообщение № 6

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

консолидацией по динамическим диапазонам


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

AndreTM

Дата: Пятница, 22.11.2013, 15:39 |
Сообщение № 7

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

условия t1.id=t2.id … не будут обеспечивать связь один к одному

А вот это и есть та самая тонкость реализации. Ибо, с точки зрения сиквела, — мы предполагаем связь именно по уникальному ключевому выражению:D
Я не зря тонко намекнул, что текст запроса мы собираем программно — поэтому имеем возможность собрать именно уникальный ключ.
А для связей типа «один-ко-многим» — достаточно сначала сформировать ключ (скажем, номер записи/строки), и использовать его в объединённом запросе…


Skype: andre.tm.007
Donate: Qiwi: 9517375010

Сообщение отредактировал AndreTMПятница, 22.11.2013, 18:34

 

Ответить

SergeyKorotun

Дата: Суббота, 23.11.2013, 17:21 |
Сообщение № 8

Группа: Проверенные

Ранг: Обитатель

Сообщений: 301


Репутация:

15

±

Замечаний:
0% ±


Excel 2007

консолидацией по динамическим диапазонам

Не могу продублировать вашу консолидирующую таблицу. У вас в настройках чекер стоит только возле «подписи верхней строки». Мне, чтобы добиться аналогичного результата, пришлось установить еще два чекера («значения левого столбца» и «создавать связи с исходными данными»). Но тогда появляются скрытые строки с данными, из которых собраны консолидирующие строки. Смотрите «Лист5».

К сообщению приложен файл:

qwerty7.xlsm
(13.0 Kb)

 

Ответить

_Boroda_

Дата: Суббота, 23.11.2013, 20:22 |
Сообщение № 9

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Не знаю, куда делась галка про левый столбец, но она должна быть. А вот связи создавать не нужно.
Все это повесить на макрос и не морочиться
[vba]

Код

Range(«A1»).Consolidate Sources:=Array(«нач», «упл»), Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False

[/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Время на прочтение
7 мин

Количество просмотров 194K

image

В данной статье я хочу рассказать о некоторых возможностях бесплатной и крайне полезной, но пока еще мало известной надстройки над 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 можно применять такие функции как:

  1. Разделить столбец по символу или по количеству символов. И в отличие от Excel можно задать максимальное количество столбцов, а также направление откуда нужно считать символы — слева, справа.
  2. Изменить регистр ячеек в столбце
  3. Подсчитать количество символов в ячейках столбца.

Числовые функции

К столбцам с числовыми значениями по нажатию на кнопки на Ribbon можно применять:

  1. Арифметические операции
  2. Возводить в степени, вычислять логарифмы, факториалы, корни
  3. Тригонометрические операции
  4. Округлять до заданных значений
  5. Определять четность и т.д.

Функции для работы с датами, временем и продолжительностью

К столбцам со значениями даты и времени по нажатию на кнопки на Ribbon можно применять:

  1. Автоматическое определение формата вписанной даты (в excel c этим большая боль)
  2. Извлекать в один клик номер месяца, дня недели, количество дней или часов в периоде и т.п.

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:

  1. разбираю семантику для Толстых проектов,
  2. Делаю частотные словари,
  3. Создаю веб-аналитические дашборды и отчеты для анализа конкретных срезов,
  4. Восстанавливаю достижение целей в системах веб-аналитики, если они не настроены на проекте,
  5. Сглаживаю прогноз вероятности методами Андрея Белоусова (+Байеса:),
  6. Делаю аудит контекстной рекламы на данных из K50 статистика,
  7. И много других разных ad-hoc analysis задач, которые нужно сделать лишь однажды

Вот bi систему, про которую я рассказывал на Yac/M 2015 (видео) я делал полнстью при помощи Power Query и загружал данные внутрь PowerPivot.

Пару слов про локализацию

На сайте Microsoft для пользователей из России по умолчанию скачивается Power Query с переведенным на русским язык интерфейсом. К счастью, локализаторы до перевода на русский языка программирования (как это сделано с языком формул в excel) не добрались, однако жизнь пользователям неоднозначными переводами сильно усложнили. И я призываю вас скачивать, устанавливать и пользоваться английской версией Power Query. Поверьте, она будет гораздо понятнее.

Ссылки по теме

Официальные ресурсы на английском:

  1. Скачать Английскую версию Power Query
  2. Справка по формулам языка M
  3. Ветка Форума Microsoft Technet про Power Query

На момент написания статьи на русском языке информации по Power Query практически нет, и то что мной найдено приведено ниже:

  1. Импорт данных из таблиц в Google Spreadsheets
  2. Power BI. Получаем данные из REST API
  3. Сообщество продвинутых пользователей Excel, Power Pivot и Power Query в Facebook
  4. Обновляемая страничка в Marketing-wiki про Power Query

На английском:

  1. Видео с демонстрацией возможностей Power Query на конференции TechEd North America
  2. Блог Chris Webb, пожалуй наиболее полный ресурс с примерами использования Power Query
  3. Книга Chris Webb — Power Query for Power BI and Excel
  4. Блог Ken Puls
  5. Курс «Excel для интернет-маркетинга»
  6. Курс «Power BI для интернет-маркетинга»
  7. Книга Ken Puls и Miguel Escobar — M is for Data Monkey

Like this post? Please share to your friends:
  • Аналог vlookup excel на русском
  • Аналог ifs в excel
  • Аналог trim в excel
  • Аналог f4 в excel на маке
  • Аналог excel только лучше