Урок 7. Введение в программирование Power Query
Седьмой урок из курса Максима Уварова «Power Bi для интернет-маркетинга»
Полезные ссылки к уроку:
Видеолекции
Введение в программирование Power Query
Структурированные типы данных. List, Record, Table
Функции Power Query
Power Query Formula Categories
Power Query Formula Categories
Выражение Let in
Служебные слова и типы данных
Раскрытие столбцов, содержащих различные типы данных
Домашнее задание
Рабочий файл: папка l7
Задача
Ваша задача модифицировать вашу bi систему из урока 3, чтобы добавить в нее обновленные и расширенные данные.
В процессе вы будете сталкиваться с ошибками, которые вам предстоит решать.
Удачи!
- Откройте вашу BI систему с выполненным домашним заданием к уроку 3.
- Скачайте и распакуйте архив раздатки.
- Создайте запрос, который получает данные из папки «CSV» из распакованного архива раздатки.
- Вероятнее всего, power bi автоматически не смог корректно распознать тип данных у столбцов содержащих десятичные дроби (все столбцы с расходами) и даты. У столбцов с десятичными дробями остался тип данных текстовый, а к датам хоть и был применен тип данных «дата», но в строчках ниже появились ячейки с ошибками. Убедиться в этом вы сможете, если примените функцию Keep Errors
- Чтобы избавиться от ошибок в столбце «Дата» вам нужно удалить автоматически созданный шаг «Changed types» («Измененный тип»), во время которого появились ошибки.
- Измените тип данных в столбце «Дата», выставив тип данных «Date» с использованием локали «English (USA)» («Английский (США)»).
- Далее, измените тип данных у всех столбцов с расходом, на формат «decimal number» с локалью «English (USA)» («Английский (США)»). Зажав клавишу ctrl вы можете выбрать несколько столбцов и задать тип данных выделенным столбцам одновременно.
- После этого вы можете выделить все столбцы и определить типы данных в столбцах автоматически. Чтобы выделить все столбцы сначала выделите первый столбец, зажмите клавишу shift и выберите последний столбец. Либо, выделив любую ячейку в таблице, вы можете нажать на сочетание клавиш CTRL+A. После того как все столбцы выделены вам нужно нажать на кнопку Detect Data types automatically.
- Убедитесь, что запрос выполняется без ошибок — для этого используйте функцию keep errors.
- Откройте код текущего запроса (где вы настроили обработку всех файлов из папки CSV), выделите его полностью и скопируйте в буфер обмена.
- Откройте код запроса Stats в Advanced Editor и замените на код, который вы скопировали на предыдущем шаге. Если у вас нет этого запроса Stats — смотрите урок 3 и разбирайтесь сами, какой запрос вы поименовали не по инструкции.
- Закройте редактор кода (Advanced Editor), убедитесь, что запрос выполняется корректно.
- Добавьте столбец «Валовая прибыль». Для этого умножьте столбец «Доход» на 20%.
- Удалите оригинальный запрос, в котором вы получали данные из папки с CSV.
- Переименуйте запрос «CampaignNames» в «DimCampaignNames» и включите загрузку запроса в модель данных.
- Загрузите в модель данных таблицы DimAds и DimPhrases из файла «Dict20190731.xlsx» из архива раздатки.
- Создайте связи (или сделайте их активными) между таблицами «Stats» и «DimAds» по столбцу «Id объявления», между таблицам «Stats» и «DimPhrases» по столбцу «Id фразы», между таблицами «Stats» и «DimCampaigns» по столбцу «Id кампании». Если вам будут мешать активные связи — удалите или выключите их.
- Модифицируйте меру, «*Ключевая фраза количество уникальных» по формуле *Ключевая фраза количество уникальных = CALCULATE( DISTINCTCOUNT(DimPhrases[Фраза (ключ)]) ; Stats ). Подробности в видео ниже.
- Модифицируйте меру средней ставки по аналогии.
- Восстановите работоспособность визуализаций «Таблиц» в отчете, заменив пропавшие столбцы из таблицы «Stats» на соответствующие столбцы из таблиц «DimCampaignNames» модели данных.
- Откройте запрос «DimAds» в Power Query.
- Добавьте «настраиваемый столбец» («custom column») с названием «Uri», в котором введите функцию Uri.Parts с аргументом [URL объявления] (=Uri.Parts([URL объявления]) ).
- В результате выполнения функции в столбце «Uri» появятся ячейки, содержащие данные в структурированном типе данных «Record» («Запись»). Изучите, чего полезного есть в этих ячейках.
- Добавьте «настраиваемый столбец» («custom column») с названием «UrlPath». В столбце «UrlPath» должны быть данные из поля «Path» записи в столбце «Uri».
- Добавьте «настраиваемый столбец» («custom column») с названием «UrlQueryRegion». В столбце «UrlQueryRegion» должны быть данные из поля записи «region» (это поле вложено в поле записи «Query» столбца «Uri»). В уроке я рассказывал как обращаться к несуществующим полям таблицы, чтобы при обращении получалось значение «null» вместо ошибки. Примените эти знания.
- Удалите столбец «Uri».
- Загрузите запрос в модель данных.
- Создайте пустой запрос «TextContainsAny». В Advanced Editor замените код пустого запроса на код функции Text.ContainsAny.pq. Эта функция проверяет, есть ли в тексте из первого аргумента вхождения любого из текстов списка второго аргумента.
/*
//Check if a string contains any of the keywords from a given list
//Usage:
Text.ContainsAny = Load("Text.ContainsAny"),
Text.ContainsAny("the cat sat on the mat", {"cat", "apple"})
//Result: true
*/
(str, needles) as logical =>
let
count = List.Count(needles)
in
List.AnyTrue(
List.Generate(
()=>[i=0],
each [i] < count,
each [i=[i]+1],
each Text.Contains(str,needles{[i]})
)
)- В запросе «DimPhrases» разделите столбец «Фраза (ключ)» по крайнему левому разделителю « -» Split Column by Delimeter — Разделить текстовый столбец по разделителю.
- Переименуйте получившиеся столбцы соответственно «Ключевая фраза» и «Минус-слова».
- Добавьте столбец «ПродающиеДобавки», в котором при помощи недавно созданной функции «TextContainsAny» проверьте значения столбца «Ключевая фраза» на наличие слов:
- купить
- Москва
- интернет
- Загрузите запрос в модель данных.
PBI Фильтрация меры по таблице фактов
Эталонное выполнение
Максим Уваров выполняет домашнее задание к уроку 7
Файлы: папка l7_Gold