Аудит шаблонів аналітичних звітів

RP-01. Фільтрація в CTE

Критичність: висока
Опис

При використанні спільних табличних виразів (common table expression) в SQL-запитах вкрай важливо виконувати фільтрацію безпосередньо у тілі CTE, а не у основному виразі, що використовує CTE.

Вплив

Застосування фільтрів у основному виразі замість тіла CTE може призвести до значно більшого часу обробки. Нефільтровані CTE можуть спричинити витягування зайвих даних з бази даних, унаслідок чого обчислення CTE та цілого запиту стають набагато повільнішими.

Рекомендації

Завжди застосовуйте фільтри в тілі CTE, а не у основному виразі. Це оптимізує ваші SQL-запити, зменшує непотрібне обчислювальне навантаження та покращує загальний час обробки даних.

RP-02. Індекси для аналітичних представлень

Критичність: висока
Опис

При створенні аналітичних представлень (за допомогою тегу ext:createAnalyticsView), необхідно також створювати індекси для полів, за якими буде відбуватися пошук.

Вплив

Невикористання індексів може суттєво сповільнити продуктивність запитів до бази даних. Це може негативно вплинути на загальну продуктивність системи, час відклику на запити користувачів та задоволеність користувачів.

Рекомендації
  • Створювати індекси для полів, які використовуються для пошуку в аналітичних представленнях, за допомогою тегу ext:createAnalyticsIndex. Це забезпечує швидке пошукове звернення до даних та зменшує час відповіді на стороні сервера.

  • Своєчасно видаляти дублікати та зайві індекси за допомогою тегу ext:dropAnalyticsIndex.

Більш детально про роботу з індексами описано в пункті DM-02. Індекси для аналітичних представлень

RP-03. Типові SQL-функції

Критичність: низька
Опис

Використовувати SQL функції, розроблені в платформі для розв’язання типових задач при моделюванні запитів для аналітичних звітів

Вплив
  • Використання типових SQL функцій дозволяє зменшити кількість коду, який потрібно писати для розв’язання типових задач

  • Функції, що постачаються в платформі, вже оптимізовані й враховують більше варіантів використання

  • Зменшення часу розробки внаслідок перевикористання рішень, які вже реалізовані в платформі

Рекомендації

Для наступних типових задач можуть бути використані SQL функції:

  • Екранування спеціальних символів в параметрах пошуку - f_regexp_escape, f_like_escape

  • Застосування RLS (Row Level Security) - f_starts_with_array

Детальніше про типові SQL функції можна ознайомитись за посиланням: Liquibase extensions for data modeling

RP-04. Зміни в аналітичних звітах для різних ролей

Критичність: середня
Опис

Вносити зміни в кожну копію звіту для кожної окремої ролі при необхідності внесення змін в звіт чи відповідний запит. Авторизаційна модель для аналітичних звітів побудована таким образом, що для кожної ролі створюється окрема директорія, що містить всі необхідні запити та звіти, що для цієї ролі доступні. Це призводить до того, що фактично йде копіювання файлів описів запитів та звітів для кожної ролі в регламенті.

Вплив
  • Неконсистентний стан звітів для різних ролей. Наприклад, при виправленні помилки для однієї з ролей, інші ролі будуть бачити стару версію звіту, доки не буде внесено зміни в кожну копію звіту.

  • Потенційно збільшена кількість ітерацій для випуску релізу чи хотфіксу

Рекомендації
  • Після внесення змін у відповідний звіт у Веб-інтерфейсі моделювання звітів треба розповсюдити його по всім ролям, що його використовують.

  • Якщо на якомусь етапі розробки було виявлено, що звіт для окремої ролі повинен відрізнятися чи має специфічні вимоги - винести його як окремий звіт для цієї ролі зі своїм життєвим циклом

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

RP-05. Заплановані запити (Scheduled Queries)

Критичність: середня
Опис

Зробити частоту запланованих запитів (Scheduled Queries) якомога меншою. Для запитів є можливість налаштувати автоматичне оновлення результатів за розкладом без додаткових дій від користувача. Це може покращити користувацький досвід при роботі зі звітами та залежними запитами.

Вплив
  • Додаткове навантаження на аналітичну базу даних внаслідок частого виконання запитів за розкладом

  • Додаткове навантаження на тимчасове сховище результатів запитів внаслідок частого виконання запитів за розкладом

Рекомендації

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

RP-06. Налаштування прав доступ до аналітичних представлень

Критичність: висока
Опис

При налаштуванні прав доступу до аналітичних представлень (за допомогою тегу ext:grant) застосовувати принцип найменших привілеїв. Тобто надавати доступ тільки до тих представлень, які використовуються в звітах, а не для всіх представлень.

Права доступу для звітів налаштовуються на рівні облікового запису користувача (доступ до звіту та запитів) та на рівні джерела даних (доступ до аналітичних представлень)
Рекомендації
  • Застосовувати гранулярний підхід до видачі прав за допомогою тегу ext:grant до конкретних представлень конкретній ролі

  • Застосовувати тег ext:grantAll для видачі прав на всі представлення тільки для ролі analytics_admin яка необхідна для розробки звітів у Веб-інтерфейсі моделювання аналітичних звітів

  • Для тегів ext:grant та ext:grantAll вказувати атрибут runAlways="true" для підтримання налаштувань авторизації при змінах в аналітичних представленнях