Старт в Power BI Desktop. У меня открыт абсолютно пустой свежий Power BI, ничем не заполненный, без шаблонов и заготовок — хотя в целом они есть, и, возможно, где-то для сокращения времени я к ним прибегу. Мы видим стандартное окно программного продукта Power BI Desktop, в котором собирается вся аналитика изначально. Desktop — десктопное приложение, бесплатное: можно для себя, даже не имея подписок и лицензий, не нарушая абсолютно ничего, скачать с сайта Microsoft, установить и пользоваться для собственной аналитики, чтобы что-то настроить, посмотреть, проанализировать. Десктопной версии для Mac на текущий момент нет: чтобы работать с Mac, нужна либо виртуалка с Windows, либо какие-то обходные пути, но напрямую Power BI работает только на Windows.
В окне есть панель инструментов с различными разделами и командами — классическая для BI, и панель слева, которая даёт несколько разделов — разные представления одних и тех же загруженных данных:
- Представление отчёта — где рисуется сам дашборд, где видны визуализации, где можно с ними взаимодействовать и настраивать интерактивность; то, что будут видеть пользователи.
- Представление таблицы — сейчас здесь пусто, потому что данных пока нет, но они появятся буквально через несколько минут. Оно даёт возможность посмотреть, что в наших данных в модели на текущий момент есть, взаимодействовать с таблицами, фильтровать, сортировать и искать какие-то отклонения непосредственно в представленных моделях данных, чтобы понять, то у нас считается или не то.
- Представление модели — здесь данные будут связываться между собой.
Во всех трёх сегодня поработаем. Снизу есть ещё два представления — запросов и табличной модели, но в них сегодня не пойдём. Справа есть три плашки: плашка с данными (здесь будет структура всех загруженных данных: таблицы, поля, меры и так далее), визуализации (характерно для представления отчёта) и фильтры (тоже для представления отчёта); вкладка данных присутствует везде, у представления модели есть ещё свойства.
Специфика дашборда. Кратко о том, что мы собираем. Собираем простенький дашборд по образовательной сфере: некоторая компания на сайте продаёт курсы — почти как мы. Эти курсы кто-то оплачивает; курсы разные — есть семинары, вебинары, непосредственно курсы разной тематики с разными стоимостями. Есть таблица с заказами этих курсов: один заказ — один курс, зашёл, нажал кнопочку «купить» и отправился в покупку. Покупка может быть совершена либо нет, поэтому есть статусы оплаты: что-то завершили, что-то не завершили, за что-то денежки пришли, а где-то пользователь повис на середине — это нам тоже важно понимать. Есть информация о заказчиках: все данные искусственные, никто от персональных данных не пострадал, совпадения случайны — имя, фамилия, идентификатор. Есть информация о менеджерах, которые связываются с заказчиками по работе над заказом. Есть промокоды на скидку — на разные образовательные мероприятия часто есть свои промокоды. И есть товары — товарными мы называем наши образовательные мероприятия, у них есть категории: курсы, вебинары, семинары. Механика примерно такая, как у каждого, кто когда-нибудь покупал курс или небольшой образовательный продукт.
Подключение к базе данных. Первое, к чему подключимся, — база данных PostgreSQL. Для подключения есть кнопочка «Получить данные» на панели инструментов; её же можно найти в самом Power Query, когда провалимся, и в разных других местах — она рассеяна везде, мимо неё не пройдём. Здесь есть список некоторых часто используемых вариантов коннекторов и «Другие», откуда виден полный список, сгруппированный по категориям. Нам понадобится одна из баз данных — конкретно PostgreSQL. Чтобы подключиться к базе данных, необходимо знать про неё сервер, порт, саму базу данных и иметь логин, пароль с доступом как минимум на чтение нужных таблиц. Здесь у меня уже есть сервер, порт, база данных — подключаюсь. Есть возможность писать SQL-запросы; сегодня этого не коснёмся, но такая опция есть — этими запросами можно получать данные уже преобразованными, как нужно. Мы подключаемся без них. Если подключаюсь к базе данных впервые, он запрашивает логин и пароль; но так как база рабочая и я подключаюсь к ней достаточно часто, логин и пароль не запросил и в базу пустил — в рамках одной моей учётной записи ПК пароли внутри сохраняются, повторно их вводить не нужно.
Выбор таблиц. Намеренно не захватываю менеджеров и продукты — их заберём из файлов, чтобы рассмотреть вариативность подключения. Итак, берём заказы, заказчиков, статусы оплаты, промокоды и категории — пять таблиц. Я их выбрала в навигаторе; на каждую таблицу виден предпросмотр. Можно сразу нажать «Загрузить» — тогда они проскочат через Power Query, обогатятся какими-то минимальными автоматически добавленными преобразованиями и приедут в модель сразу, но это не входит в наши планы. Поэтому нажимаю «Преобразовать»: сделаем то же самое, но вникнем в процесс. Открывается второе окно Power Query; эти окна могут работать параллельно, друг друга не блокируют — я могу работать и там, и там. Единственное: все изменения, которые делаю в Power Query, нужно применить, чтобы они попали непосредственно в модель Power BI.
Знакомство с Power Query. Окно отчасти похожее: та же панель инструментов, те же вкладочки — типичная схема для всех продуктов Microsoft, загляните куда угодно и получите примерно такую же конструкцию. Слева находятся запросы: все запросы нашего файла Power BI будут храниться в одном Power Query — на каждый файл своя область; можно открыть пять разных окон и наблюдать, что происходит. Не все запросы могут прогружаться в модель: какие-то могут быть внутренними, исключительно промежуточными. У каждого запроса есть свои шаги преобразования. Если бы в навигаторе нажали сразу «Загрузить», те шаги, которые сейчас здесь прописаны, применились бы, и таблица загрузилась бы без нашего вмешательства.
На таблице с БД преобразований минимум, потому что они уже в том виде, в котором нужны BI. Самый простенький запрос — на категории товаров (курсы, вебинары, семинары), у него два шага; с двумя сильно не разгуляешься, но шаги кликабельные, и щелчок на каждый шаг показывает предпросмотр того, что на этом шаге сделано. Два шага соответствуют тому, что мы делали в самом Power BI: подключались к данным и потом выбирали в навигаторе таблицу. В строке формул показывается подключение к источнику — здесь подключение к БД по конкретному адресу; с другим подключением, другим источником будет написано что-то другое. Вторым шагом предпросматриваем и видим тот же список таблиц, которые видели в навигаторе; шаг навигации выбирает конкретную таблицу из этой БД. Аналогично у всех остальных — только в шаге навигации выбрана какая-то другая таблица. Эти таблицы пока оставляем как есть.
Подключение к файлам. Нам нужно подключить ещё две таблицы — с менеджерами и с продуктами; они хранятся в файлах. Можно это сделать из самого главного окна Power BI, а можно из Power Query создать источник — окно будет то же самое. Нам нужен файл текстовый или CSV и путь к этому файлу: это менеджеры. Здесь другое подключение и другой вариант навигатора — для каждого подключения свой вариант; автоматически определилось с кодировкой, с разделителем, и файл принял вполне приемлемый вид. Принимаем. Появляется новый запрос, и шаги у него уже свои: в источнике — путь к файлу; в повышенных заголовках первая строка CSV переехала в заголовки; третьим шагом Power Query автоматически типизировал все столбцы. Ещё один источник — тоже файл, тот же тип, та же папка, только там были менеджеры, а сейчас будут продукты. Несмотря на то, что там был CSV, а здесь XLSX, механизм очень похожий: оба файла обрабатываются по одному и тому же принципу, разве что в параметрах есть некоторые нюансы.
Итого семь таблиц — практически полная информация, которая нужна для дальнейших действий. Единственное, что сейчас сделаю, — приведу в порядок названия, чтобы в них ориентироваться и не было лишних слов: заказы, заказчики, статусы оплат, промокоды, категории продуктов, менеджеры и продукты. Чтобы эти семь таблиц попали в Power BI, нажимаю «Закрыть и применить» — произойдёт загрузка, все шаги, которые были прописаны у каждого запроса, применятся, и данные загрузятся непосредственно в модель и покажутся в «Данных» в виде этих семи таблиц. Визуализация пока пустая, но в табличном виде мы уже можем походить по таблицам и посмотреть, что там хранится. В модели теперь присутствуют схемы таблиц, но со связями будем разбираться чуть позже, на следующем этапе.
Преобразования. Данные загрузили, но практически никак не коснулись преобразований. Возвращаемся в Power Query и смотрим, какие преобразования нужны. Попасть в него можно несколькими способами: из любого запроса через «Изменить запрос» либо с панели инструментов «Преобразования данных» с любого раздела — так или иначе в Power Query попаду.
В заказах есть лишние столбцы. В БД я не все таблицы перечислила: там ещё есть информация о прохождении самих курсов, о том, как заказчики участвуют в занятиях, какие рейтинги получают, и так далее — нам эта информация сегодня не нужна. В таблице с заказами нажимаю на панели инструментов «Выбор столбцов» и снимаю галочки с ненужных, оставив, по сути, набор айдишников для связи со всеми остальными таблицами, дату заказа и идентификатор заказа. Столбцов стало меньше.
В таблице с промокодами процент скидки представлен вот таким числом: 11 процентов представлено как 11. По-хорошему, по правильному, 11 процентов должны быть представлены процентами. Дело даже не в том, что нарисуется значок с процентами, а в том, что это должно быть 0,11, а не 11: оперируя таким числом, нам придётся каждый раз помнить, что надо поделить на 100, а это не очень правильно. Поэтому делим на 100 сразу. Создаём дополнительный столбец — этот можно оставить, но можно удалить. Для создания дополнительного столбца отправляемся на панель «Добавление столбца» и добавляем настраиваемый столбец. Здесь как раз пригодится написание формул — не из серии «поделить на 100», как сейчас, но в целом для написания этих формул очень полезно знать, какие в принципе возможности у Power Query есть: порядка 700 различных функций, которые можно использовать очень по-разному; какие-то из них зашиты в кнопки, но очень многие — нет. Создаём столбец, называем его «Процент скидки»: он будет очень простой — берём из доступных столбцов наш процент и делим на 100. Если бы я делала аналитику по правильному, я бы ещё прошлась по всем столбцам, всё переименовала так, чтобы это билось и называлось идентично везде, но сейчас не буду тратить на это драгоценные минуты вебинара. Поэтому оставляем немного неконсистентное формирование названий.
Когда я добавляю столбец, он у меня по умолчанию не типизирован. Здесь я бы очень хотела рекомендовать следить за типами данных и присваивать их всем столбцам без ограничений и исключений. Тип данных можно прописать прямо в формуле добавления столбца либо поменять, просто нажав на пиктограмму типа данных у столбца. Итак, «Процент скидки» — и в принципе пока всё.
Был в планах ещё календарь, но календарь оставим на попозже. Чтобы эти изменения попали в модель, нужно нажать волшебную кнопочку «Закрыть и применить».
Вопрос из чата: если Power Query не определил тип данных и показывает ошибку, что делать? Power Query по умолчанию пытается определить тип данных у загруженных данных: если вы данные загружаете, он, как правило, их определяет; если определить не может, всё отправляет в текст. Текст — такой универсальный тип, в который можно засунуть всё что угодно. За этим надо следить, потому что он может отправить в текст то, что текстом не является, или как-то ещё определить автоматически некорректно. Поэтому контролируем это — первый момент. Если показывает ошибку, есть два варианта: либо он на самом деле определил тип и сам промахнулся, либо у вас в принципе ошибочный тип подъехал — надо смотреть, что у вас в исходных данных. Если появляется какая-то ошибка в ячейке, вы можете щёлкнуть в пустом месте — и там, где вывелось значение, выводится причина ошибки, и вы с ней работаете. С ошибками можно ещё по-разному работать: по-разному их выуживать, отслеживать и нейтрализовывать, есть такие инструменты.
Пока преобразовали немного, но преобразовали: в таблице с промокодами появился дополнительный столбец «Процент скидки», и он теперь представлен числом 0,11. На этом эту фазу завершим. Повторюсь, календарик мы не сделали, но если будет опция в конце — вернёмся. Он, конечно, очень нужен, но я рискую не вписаться в полтора часа, поэтому экономим на чём можем.