Открыть сервисСервис

DirectQuery

DirectQuery — это технология подключения к источникам данных, используемая в системах бизнес-аналитики (BI), при которой запросы к данным выполняются непосредственно в исходной базе данных или хранилище в момент построения отчёта или визуализации, а не загружаются в память кэша аналитического приложения. В отличие от традиционного режима импорта, DirectQuery не копирует данные в промежуточное хранилище, а транслирует запросы пользователя (например, с помощью DAX или MDX) в SQL-запросы, отправляемые к внешнему источнику. Это позволяет работать с очень большими объёмами данных, которые невозможно или нецелесообразно загружать полностью, а также обеспечивает доступ к данным в реальном времени (или близком к реальному).

Принцип работы

При использовании DirectQuery аналитическая модель (например, в Microsoft Power BI, SQL Server Analysis Services или Azure Analysis Services) не содержит самих данных. Вместо этого она хранит метаданные: определения таблиц, мер, вычисляемых столбцов, связей и иерархий. Когда пользователь взаимодействует с отчётом (фильтрует, срезает, детализирует), система формирует запрос на языке DAX или MDX, который затем транслируется в один или несколько SQL-запросов, специфичных для целевой базы данных (SQL Server, Oracle, Teradata, Snowflake, BigQuery, Amazon Redshift и др.). Результаты этих запросов возвращаются в память визуального элемента, но не сохраняются в модели для последующего использования. При каждом новом взаимодействии с отчётом запросы отправляются заново.

Отличия от режима импорта

ХарактеристикаРежим импортаDirectQuery
Хранение данныхКопия данных загружается в память (In-Memory)Данные остаются в исходном источнике
Производительность запросовВысокая (данные уже в памяти)Зависит от скорости источника и сети
Объём данныхОграничен доступной памятьюПрактически не ограничен (ограничение — мощность источника)
Актуальность данныхПо расписанию обновления (обычно раз в несколько часов/дней)Реальное время (при каждом запросе)
Функциональность DAXПолная поддержка всех функцийОграниченная (не все функции поддерживаются)
Сложность настройкиПростая (достаточно указать источник)Требуется настройка производительности источника

История

Технология DirectQuery была впервые представлена компанией Microsoft в 2012 году в составе SQL Server 2012 Analysis Services (SSAS Tabular). Изначально она поддерживала только SQL Server и Oracle. В 2015 году, с выходом Power BI Desktop, DirectQuery стал доступен для более широкого круга пользователей. В 2016—2017 годах Microsoft добавила поддержку Teradata, SAP HANA, Amazon Redshift и Google BigQuery. В 2020 году появилась поддержка Azure Synapse Analytics и Snowflake. В 2022 году была представлена версия DirectQuery для Power BI с возможностью работы через шлюз данных (On-premises data gateway). На 2024 год DirectQuery поддерживает более 20 различных источников данных, включая облачные хранилища, реляционные базы данных и аналитические платформы.

Классификация режимов DirectQuery

В современных BI-системах (прежде всего в Power BI) выделяют несколько режимов работы с DirectQuery:

Чистый DirectQuery

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

Смешанный режим (Composite Model)

Сочетает импортированные таблицы и таблицы с DirectQuery в одной модели. Позволяет, например, импортировать справочники (сотрудники, товары) и подключать DirectQuery к таблицам фактов (продажи, транзакции). В этом режиме часть данных кэшируется, а часть запрашивается в реальном времени. Поддерживается с 2019 года в Power BI.

Dual (двойной режим)

Таблица может работать как в режиме импорта, так и в режиме DirectQuery в зависимости от контекста запроса. Если запрос может быть удовлетворён из кэша — используется импорт, если нет — отправляется запрос к источнику. Этот режим оптимизирует производительность для часто используемых данных.

Применение

DirectQuery используется в следующих сценариях:

  • Работа с большими данными (Big Data): когда объём данных превышает возможности памяти аналитического сервера (например, сотни гигабайт или терабайты). Источники — Snowflake, Amazon Redshift, Google BigQuery, Azure Synapse.
  • Оперативная аналитика: требуется актуальность данных в реальном времени (например, мониторинг производственных процессов, трейдинг, логистика). DirectQuery позволяет видеть изменения в данных сразу после их появления в исходной базе.
  • Единый источник правды: организация не хочет дублировать данные в нескольких системах, предпочитая подключаться напрямую к корпоративному хранилищу (Data Warehouse, Data Lake).
  • Безопасность на уровне строк (RLS): DirectQuery позволяет применять политики безопасности, определённые в исходной базе данных, что особенно важно для финансовых и медицинских организаций.
  • Интеграция с системами реального времени: например, подключение к IoT-платформам, где данные поступают непрерывно.

Преимущества и недостатки

Преимущества

  • Актуальность данных: пользователи видят последние изменения без необходимости запускать обновление модели.
  • Отсутствие ограничений по объёму: можно работать с базами данных размером в петабайты.
  • Экономия ресурсов: не требуется мощный сервер с большим объёмом оперативной памяти для хранения модели.
  • Централизованная безопасность: права доступа управляются на уровне источника данных.

Недостатки

  • Зависимость от производительности источника: медленная база данных или перегруженная сеть приводят к долгому времени отклика отчёта.
  • Ограниченная функциональность DAX: не поддерживаются функции, требующие работы с полным набором данных в памяти (например, RANKX, TOPN с динамическим порогом, VALUES с пустыми строками).
  • Ограничения на преобразования данных: в режиме DirectQuery нельзя использовать Power Query для сложных трансформаций (например, слияние таблиц, добавление пользовательских столбцов на основе сложных выражений).
  • Нагрузка на источник: каждый пользовательский запрос генерирует SQL-запрос к базе данных, что может привести к перегрузке продуктивной системы.
  • Ограничения на количество запросов: в Power BI Desktop есть лимит на количество одновременных запросов (обычно до 5-10), что может замедлить работу с большими отчётами.

Производительность и оптимизация

Для эффективной работы DirectQuery необходимо соблюдать ряд рекомендаций:

  • Индексация: таблицы в источнике должны иметь подходящие индексы для ускорения выполнения SQL-запросов.
  • Снижение количества запросов: объединение нескольких визуалов в один запрос (например, использование одного графика вместо нескольких).
  • Агрегация на стороне источника: использование предварительно агрегированных таблиц (например, сумма продаж по дням вместо детальных транзакций).
  • Кэширование метаданных: настройка кэширования схемы данных для ускорения первого запроса.
  • Использование шлюза данных: для локальных баз данных рекомендуется использовать шлюз (On-premises data gateway) для снижения задержек.
  • Ограничение визуалов: на одной странице отчёта не рекомендуется размещать более 10-15 визуалов, работающих в режиме DirectQuery.

Примеры использования

  • Розничная сеть: подключение к базе данных продаж в реальном времени для мониторинга остатков на складах и динамики продаж по магазинам.
  • Банковская сфера: анализ транзакций клиентов в режиме реального времени для выявления мошеннических операций.
  • Производство: мониторинг работы оборудования через IoT-платформу, где DirectQuery подключается к базе данных телеметрии.
  • Логистика: отслеживание перемещения грузов с использованием данных из системы управления транспортом (TMS).

Критика и ограничения

DirectQuery подвергается критике за следующие аспекты:

  • Производительность при сложных вычислениях: при использовании сложных мер DAX (например, с несколькими фильтрами и итерациями) время выполнения запроса может значительно возрастать.
  • Отсутствие поддержки многих функций Power Query: пользователи не могут применять такие трансформации, как группировка, слияние, разворачивание столбцов, что ограничивает гибкость моделирования.
  • Зависимость от сетевой инфраструктуры: при работе с облачными источниками через интернет задержки могут быть значительными.
  • Ограниченная поддержка в мобильных приложениях: некоторые функции DirectQuery недоступны в мобильных версиях BI-клиентов.

Источники

  1. Microsoft Learn. «DirectQuery in Power BI». — Официальная документация Microsoft.
  2. Microsoft Learn. «DirectQuery model guidance in Power BI Desktop». — Руководство по моделированию.
  3. Marco Russo, Alberto Ferrari. «Using DirectQuery in Power BI». — SQLBI, 2023.
  4. Microsoft. «SQL Server Analysis Services Tabular: DirectQuery». — Документация SQL Server 2012—2022.
  5. Microsoft. «Composite models in Power BI Desktop». — Документация, 2022.
  6. Gartner. «Magic Quadrant for Analytics and Business Intelligence Platforms». — 2023.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru