Шаг 2. Построение логической модели
Для объединения данных из нескольких источников, их обработки и создания витрины, которую в последующем планируется визуализировать, необходимо построить логическую модель данных.

Для этого нужно:
1
Перейти в раздел «Модели»
2
Создать новую модель, нажав на кнопку «Добавить», и ввести наименование
3
Добавить источники данных, созданные на предыдущем этапе: с помощью кнопки «+» можно выбрать сразу все необходимые источники
4
Подключенные источники с типом csv или xlsx отображаются в виде Источник – Книга – Лист
5
По очереди перетащить лист «Вакансии за Март» и «Вакансии за Апрель» в область диаграммы и соединить их с помощью функции UNION ALL
Если вы внимательно изучили файлы, то обратили внимание, что не все зарплатные предложения указаны в рублях, поэтому потребуется еще одна таблица с указанием курсов валют и последующая конвертация сумм в рубли.

С помощью drag-and-drop добавьте таблицу «Курс валют» в область диаграммы и соедините c таблицей вакансий при помощи функции LEFT JOIN по полям valuta и valuta_kod_ – эти поля система создала автоматически, прописав русские наименования столбцов английскими буквами.

На видео видно, насколько просто это выполнить в системе:
Поскольку в таблице «Курс валют» номинал не везде указан в единичном формате, необходимо привести его к единому виду. Это можно сделать с помощью вычисляемого поля, значения в котором будут заполняться SQL-запросом.

Для создания расчетного поля необходимо выполнить следующие шаги:
1
Добавить новое вычисляемое поле в меню слева или из области превью
2
Ввести алиас и наименование поля в модели, а также указать тип данных (в данном случае будет дробное число)
3
Написать SQL-запрос. При создании формулы важно учитывать, что для указания нужного поля перед его наименованием должно быть указано наименование таблицы, в которой это поле находится, и запрос будет относиться к конкретным метаданным указанной таблицы, поэтому оператор SELECT FROM не потребуется. Наименование таблицы можно посмотреть в разделе «Описание таблиц».
В запросе необходимо прописать, что номинал валюты не должен быть равен нулю или иметь пустое значение, а также задать формулу: курс/номинал. Скорее всего, многие легко смогут написать этот запрос самостоятельно, однако мы оставим его тут для самопроверки
CASE WHEN Kurs_valut.nominal IS NOT NULL AND Kurs_valut.nominal<>0
THEN Kurs_valut.kurs/Kurs_valut.nominal
ELSE 0
END
4
Сохранить. Новое поле отобразится в конце таблицы.
Саму конвертацию в рубли можно также реализовать через создание нового расчетного поля, а в данном примере их будет два – для минимальной и максимальной зарплаты для каждой вакансии.

Здесь пример запроса для конвертации минимальной заработной платы.
case
when Kurs_valut.valuta__kod_<>'RUR' AND junionall.minimalnaa_zarplata IS NOT NULL AND Kurs_valut.nominal IS NOT NULL AND Kurs_valut.nominal<>0
then junionall.minimalnaa_zarplata*(Kurs_valut.kurs/Kurs_valut.nominal)
when Kurs_valut.valuta__kod_ = 'RUR' AND junionall.minimalnaa_zarplata IS NOT NULL
then junionall.minimalnaa_zarplata
else 0
end
А для максимальной заработной платы будет аналогичный запрос, отличающийся на одно поле.

Кроме всего прочего, для аналитики по вакансиям будет полезен размер средней заработной платы. При расчете этого поля необходимо учесть, что не все вакансии содержат информацию о зарплатах, а также влияние типа валют и необходимость выполнения конвертации, если тип валюты отличен от рубля.
((case
when Kurs_valut.valuta__kod_ <>'RUR' AND junionall.minimalnaa_zarplata IS NOT NULL AND Kurs_valut.nominal IS NOT NULL AND Kurs_valut.nominal<>0
then junionall.minimalnaa_zarplata*(Kurs_valut.kurs/Kurs_valut.nominal)
when Kurs_valut.valuta__kod_ = 'RUR' AND junionall.minimalnaa_zarplata IS NOT NULL
then junionall.minimalnaa_zarplata
else 0
end) +(case when Kurs_valut.valuta__kod_ <>'RUR' AND junionall.maksimalnaa_zarplata
IS NOT NULL AND Kurs_valut.nominal IS NOT NULL AND Kurs_valut.nominal<>0
then junionall.maksimalnaa_zarplata
*(Kurs_valut.kurs/Kurs_valut.nominal)
when Kurs_valut.valuta__kod_ = 'RUR' AND junionall.maksimalnaa_zarplata IS NOT NULL
then junionall.maksimalnaa_zarplata
else 0
end
))/2
Для отслеживания динамики изменений по месяцам необходимо преобразовать формат даты. Это можно сделать с помощью добавления иерархии: в области отображения данных модели для поля «Дата публикации вакансии» нажать на кнопку «Редактировать» → «Создать иерархию» и отметить необходимые уровни:


  • Год
  • Месяц (число)
  • Месяц (строка)
  • День

Готово!


Подробнее про работу с расчетными полями и иерархиями можно узнать здесь, а разобранный пример посмотреть в этом коротком видео
Когда все необходимые дополнительные столбцы добавлены в таблицу, нужно определить, какие из полей будут справочниками. Это можно сделать сразу из режима редактирования или в разделе «Описание столбцов» – «Является справочником»

В данном случае это будут поля:
  • Тип ПО
  • Тип занятости
  • Должность
  • Месяц (строка)

Построение модели завершено, теперь необходимо загрузить данные в хранилище. Это делается с помощью нажатия на одноименную кнопку над областью схемы.

Ждем уведомление об успешной загрузке.

Здорово! Ваша первая модель готова к работе.


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