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. Сообщество продвинутых пользователей Excel, Power Pivot и Power Query в Facebook
  3. Обновляемая страничка в 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. Книга Ken Puls и Miguel Escobar — M is for Data Monkey

Комментарии (21)


  1. RAF
    17.11.2015 10:03
    +1

    Ох, где бы взять время, чтобы это все освоить, и сэкономить время на составлении отчетов :-)


    1. 4002
      17.11.2015 10:09
      +2

      лучше однажды освоить технику и она всегда будет помогать в будущем


      1. nickko
        18.11.2015 00:26
        +2

        Во былые времена тоже надеялись, что с внедрением компьютеров работы станет меньше. Как же они ошибались… Когда-то было бы безумием, чтобы начальник приказал сделать анализ продаж по какому-то критерию за прошедший год в большой организации и предоставить отчет уже через час — сейчас это норма.


  1. bougakov
    17.11.2015 10:17
    +2

    Идею «скриптов», кажется, честно скоммуниздили из SPSS — и это отлично!


    1. 4dmonster
      17.11.2015 10:41

      а название языка украли у M — MUMPS :)


  1. Cobolorum
    17.11.2015 10:26
    +2

    Есть классическая вещь которая работала с 2000, а может и с 97-ого офиса, это связка:
    ODBC источник данных т.ч. txt-файлы + MS query
    Для любителей Web еще с 2003 есть возможность выбрать даже из тупых html таблиц.
    А если еще вспомнить что есть VBA то про новый костыль можно забыть.


    1. 4002
      17.11.2015 10:30
      +3

      Пользоваться Power Query гораздо удобнее и эффективнее. Мое экспертное мнение


    1. Aclz
      17.11.2015 10:53

      Вы пробовали писать на нем запросы? Кроме самых простейших select'ов в них ничего не поддерживается. ЕМНИП, даже сджойнить 3 таблицы или соединить union'ом было невозможно.


    1. bougakov
      17.11.2015 11:12
      +1

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


      1. 4002
        17.11.2015 17:16

        aclz джоиню больше трех таблиц одновременно. Есть такая возможность.


        1. Aclz
          17.11.2015 17:47

          Пробуйте не только Inner join, а, скажем к одной таблице left, к другой right или full.


  1. Drizzly
    17.11.2015 11:44
    +2

    Спасибо.

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


  1. ViacheslavMezentsev
    17.11.2015 11:56

    Пошёл скачивать эту надстройку, а оказалось, что для моего 2016 это уже встройка.


  1. n01d
    17.11.2015 12:35

    Спасибо за статью!
    Не подскажете, можно ли где-то поподробнее почитать (желательно на русском, чтобы не переводить самому для пользователей), как через эту надстройку работать с Google Analytics? На работе как раз аналитики ищут инструменты для эффективной работы с GA.


    1. bougakov
      17.11.2015 16:31

      так в трёх кликах от указанной автором ссылки находится github.com/40-02/PQGoogleAnalytics


      1. 4002
        17.11.2015 16:56

        спасибо!
        К сожалению другой информации нет.


  1. ikashnitsky
    17.11.2015 17:09
    +1

    Отменное название поста!


  1. Stas911
    17.11.2015 18:12

    Интересный функционал! А то я все по-старинке — IPython+pandas, а оказывается половину можно на Экселе сделать.


    1. 4002
      17.11.2015 21:00

      Все таки тем кто ipython + pandas владеют такие вещи вряд ли сильно помогут. Это скорее для тех кто в excel дальше среднего продвинулся, но програмировать не умеет.


      1. Stas911
        17.11.2015 22:42

        Переносимость плохая — коллегам, кто не в теме, фиг объяснишь как это работает и чего поправить :)


        1. 4002
          18.11.2015 10:18

          ну тогда да, PQ вариант. Но тоже не для средних умов :(