Перейти к содержанию

Модели данных

Модель данных создает виртуальное представление/объединение ресурсов (физических таблиц) для связи со словарем бота и справочниками.

Модель данных может состоять из одного или нескольких ресурсов.

Модель данных из нескольких ресурсов

Для создания модели данных из нескольких ресурсов необходимо учитывать следующие критерии:

  1. Объединить в одну модель данных можно ресурсы одного типа по следующим параметрам:

    • Закэшировано
    • Если ресурсы не закэшированы, то они должны быть доступны в рамках одного SQL-запроса (т.е. из одного источника данных)
  2. При формировании SQL-запроса ресурсы будут объединяться через UNION ALL по следующим правилам:

    • Каждая колонка модели данных связана с не более чем одной колонкой каждого ресурса, входящего в эту модель данных. Совместимые типы колонок:

      • integer, double
      • date, timestamp
      • text
      • boolean
      • decimal
    • Все выбранные в рамках одной связи колонки ресурсов объединяются в результирующей таблице в одну.

    • Если связь с каким-либо ресурсом не выбрана, то его часть в результирующей колонке будет заполнена пустыми значениями (NULL)
  3. Используйте автогенерацию связей при создани модели данных. Она объединит колонки ресурсов с одинаковым названиями в одну колонку модели данных.

Tip

После создания модели данных вы можете создавать новые связи вручную.

Колонки из нескольких ресурсов, объединяемые в одну колонку модели данных, могут иметь различные названия.

Пример

В модели данных 3 ресурса. 

Колонки Ресурса 1: A, B, C
Колонки Ресурса 2: A, B, D
Колонки Ресурса 2: A, E

Колонки модели данных:
- A (состоит из Ресурс 1.A, Ресурс 2.A, Ресурс 3.A)
- B (Ресурс 1.B, Ресурс 2.B)
- C (Ресурс 1.С)
- D (Ресурс 2.D)
- E (Ресурс 3.E)

SQL-запрос для объедиения ресурсов в одну таблицу:

SELECT A, B, C, NULL as D, NULL as E
FROM resource1
UNION ALL
SELECT A, B, NULL as C, D, NULL as E
FROM resource2
UNION ALL
SELECT A, NULL as B, NULL as C, NULL as D, E
FROM resource3

Общие настройки

  • Название модели - используйте понятные бизнес-пользователю названия, они будут использоваться в интерфейсах конечного пользователя (мессенджерах).
  • Примеры запросов - добавляйте примеры запросов, чтобы показать бизнес-пользователям, как можно запрашивать данные для этой модели данных. Примеры можно будет использовать в интерфейсах конечного пользователя (мессенджерах).
  • Публичная - публичная модель данных будет доступна всем бизнес-пользователям вне зависимости от их полномочий.

    Не публичная модель будет доступна только тем бизнес-пользователям, которым явно выданы полномочия на работу с этой моделью данных.

Теги

Связывайте модель данных с записями из справочников напрямую, для добавления дополнительного контекста.

Easy Report будет использовать теги при автовыборе подходящей модели данных при построении отчета по запросу бизнес-пользователя.

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

Пример

Вы создали две модели данных:

  • Продажи по мобильной технике

  • Продажи по аксессуарам

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

Чтобы по запросу "Продажи по мобильной технике за последний месяц", система верно определила модель данных, вы можете явно привязать запись "Мобильная техника" из справочника "Товарная группа" к модели данных "Продажи по мобильной технике" с помощью функциональности Теги.

Колонки

Связывайте колонки данных с метами из словаря бота соответствующего типа:

Только колонки, связанные с метами, могут быть использованы при построении отчета бизнес-пользователем.

Расчет справочника из данных колонки

Для любой из колонок можно создать справочник, рассчитанный на основе данных в этой колонке. Обычно это необходимо для тех случаев, когда в Easy Report создается модель данных на основе денормализованной витрины данных (т.е. в данных содержатся текста, а не внешние ключи на справочники).

Для создания справочника из данных колонки, необходимо указать: - Название справочника - Частоту обновления записей справочника - Признак, который будет привязан к справочнику

При создании такого справочника будет автоматически произведен следующий набор действий:

  1. Создается справочник с указанным названием на основе того же набора ресурсов, что и модель данных.
  2. Внутри справочника создаются 2 колонки с типами Главный ключ и Основной текст. Данные колонки будут связаны с такими же колонками ресурсов, как и исходная колонка в модели данных.
  3. В модели данных создается связь со справочником через соответсвующие колонки

Расчетные колонки

Это индивидуально созданный показатель, который рассчитывается по указанной формуле.

Расчетные показатели нужны для ведения расчетов на предагрегированных данных, например, для расчета относительных значений на любой группировке (рентабельность по клиенту, рентабельность по проекту и пр).

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

Формула может быть одного из двух типов:

Простая формула

Арифметическое SQL-выражение, в котором могут быть использованы следующие элементы:

  • Арифметические операции: +, -, *, /, ()
  • Числовые константы
  • Колонки модели данных
  • Функции агрегации: sum, avg, min, max, count, countDistinct, countMonthDays (количество дней в месяце), countMonthDaysRest (количество оставшихся дней в месяце)
  • Условные функции агрегации: sumIf, avgIf, minIf, maxIf, countIf, countDistinctIf. В неё подается два аргумента: колонка модели данных (или арифметическое выражение из колонок модели данных), условие вида column in ["A"]. Агрегатная функция будет обрабатывать только те строки, для которых условие сработало.

SQL формула

Динамически рассчитываемый SQL-запрос с элементами шаблонизации, для расчета показателя с любыми группировками и фильтрациями. Такие формулы позволяют рассчитать показатели любой сложности.

Пример SQL-формулы:

Формула, которая в качестве результата вернет количество строк

SELECT {{all_details_select|trailing_comma}} count(*) AS {{result_alias}}
{{FROM_data_model}} 
{% if all_filters|not_empty %}WHERE {{all_filters}}{% endif %}
{% if {{all_details_expr}}|not_empty %}GROUP BY {{all_details_expr}}{% endif %}

Список переменных:

  • {{ result_alias }} - итоговый алиас для показателя. Данная переменная должна обязательно присутствовать в запросе, чтобы попасть в итоговый отчет.
  • {{ FROM_data_model }} - секция FROM-JOIN для обращения ко всем необходимым колонкам ресурсов необходимых для расчета всех детализаций и фильтров. Вы можете дополнительно дописывать свои JOIN после этой переменной.
  • {{ all_details_select }} - SQL-выражения вида expr as label, для подстановки в секцию SELECT SQL-запроса. Содержит все детализации по датам и признакам, которые запросил пользователь.
  • {{ all_details_expr }} - SQL-выражения вида expr, обычно используются для подстановки в секцию GROUP BY SQL-запроса. Содержит все детализации по датам и признакам, которые запросил пользователь.
  • {{ all_details_labels }} - SQL-выражения вида label, обычно используются для подстановки в секцию ORDER BY SQL-запроса или для использования во внешних SQL-запросах. Содержит все детализации по датам и признакам, которые запросил пользователь.
  • {{ all_filters }} - SQL-выражения для подстановки в секцию WHERE SQL-запроса. Содержит все фильтры по датам и признакам, которые запросил пользователь.
  • {{ attrs_details_select }} - SQL-выражения вида expr as label, для подстановки в секцию SELECT SQL-запроса. Содержит все детализации по признакам, которые запросил пользователь.
  • {{ attrs_details_expr }} - SQL-выражения вида expr, обычно используются для подстановки в секцию GROUP BY SQL-запроса. Содержит все детализации по признакам, которые запросил пользователь.
  • {{ attrs_details_labels }} - SQL-выражения вида label, обычно используются для подстановки в секцию ORDER BY SQL-запроса или для использования во внешних SQL-запросах. Содержит все детализации по признакам, которые запросил пользователь.
  • {{ attrs_filters }} - SQL-выражения для подстановки в секцию WHERE SQL-запроса. Содержит все фильтры по признакам, которые запросил пользователь.
  • {{ dates_details_select }} - SQL-выражения вида expr as label, для подстановки в секцию SELECT SQL-запроса. Содержит все детализации по датам, которые запросил пользователь.
  • {{ dates_details_expr }} - SQL-выражения вида expr, обычно используются для подстановки в секцию GROUP BY SQL-запроса. Содержит все детализации по датам, которые запросил пользователь.
  • {{ dates_details_labels }} - SQL-выражения вида label, обычно используются для подстановки в секцию ORDER BY SQL-запроса или для использования во внешних SQL-запросах. Содержит все детализации по датам, которые запросил пользователь.
  • {{ dates_filters }} - SQL-выражения для подстановки в секцию WHERE SQL-запроса. Содержит все фильтры по датам, которые запросил пользователь.
  • {{ date_filters_prev_year }} - SQL-выражения для подстановки в секцию WHERE SQL-запроса. Содержит все фильтры по датам минус один год, которые запросил пользователь. Обычно используется для расчета показателей Year Over Year.

Список операторов:

  • {% if cond %}true result{% else %}false result {% endif %} - If-оператор

Список функций (дописываются к переменным через | ):

  • | trailing_comma - дописывает запятую после переменной, если значение переменной не пустая строка
  • | not_empty - возращает true, если значение переменной не пустая строка

Tip

Полный список доступных операторов и функций вы можете увидеть здесь

Связи со справочниками

Для описания связей модели данных с внешними справочниками необходимо создать связь со следующими параметрами:

  • Выбрать справочник
  • Описать связь модели данных со справочником, создавая пары колонок:
    • Колонка из модели данных
    • Колонка типа Главный ключ из справочника

При описании связи может быть использовано несколько пар колонок в случае составного ключа.

При SQL-генерации справочники будут связываться с моделью данных с помощью конструкции INNER JOIN.