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

Технология DirectQuery

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

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

При использовании технологии DirectQuery аналитическая модель (например, в Power BI или SQL Server Analysis Services) не содержит самих данных, а только метаданные — описание таблиц, связей, мер и измерений. Когда пользователь взаимодействует с визуализацией (фильтрует, группирует, выбирает значения), система генерирует запрос на языке DAX (Data Analysis Expressions) или MDX (Multidimensional Expressions), который затем преобразуется в нативный SQL-запрос, специфичный для конкретного источника данных. Этот запрос отправляется в базу данных, выполняется там, и результат возвращается в отчёт.

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

Сравнение с режимом импорта

Основные различия между DirectQuery и импортным режимом можно представить в виде таблицы:

ХарактеристикаРежим импортаDirectQuery
Хранение данныхДанные копируются и сжимаются в оперативной памяти (in-memory)Данные остаются в исходной базе данных
Производительность запросовВысокая, так как данные уже в памятиЗависит от производительности источника и сети
Актуальность данныхНа момент последнего обновления (запланированного или ручного)Всегда актуальна на момент запроса (режим реального времени)
Объём данныхОграничен доступной оперативной памятьюОграничен только возможностями источника
Сложность моделиПоддерживает сложные вычисления и связиОграничения на использование некоторых функций DAX (например, CALCULATE с фильтрами по другим таблицам)
Нагрузка на источникНизкая (только во время обновления)Высокая (каждый запрос пользователя генерирует нагрузку)

История и развитие

Технология DirectQuery была впервые представлена корпорацией Microsoft в составе SQL Server Analysis Services (SSAS) в версии 2012 года (в режиме Tabular). Изначально она поддерживала ограниченное число источников данных (в основном SQL Server и Oracle). В последующих версиях (SQL Server 2016, 2017, 2019) функциональность была расширена, улучшена оптимизация запросов и добавлена поддержка большего количества реляционных баз данных, включая Teradata, SAP HANA, Amazon Redshift, Google BigQuery и другие.

В Power BI технология DirectQuery стала доступна с момента выхода продукта в 2015 году, первоначально для SQL Server, а затем для всё более широкого круга источников. В 2019 году Microsoft представила так называемый «составной режим» (Composite Model), который позволяет в одной модели сочетать таблицы, загруженные через импорт, и таблицы, работающие через DirectQuery. Это дало возможность создавать гибридные решения, где часть данных (например, справочники) хранится локально, а часть (например, транзакции) запрашивается в реальном времени.

Поддерживаемые источники данных

DirectQuery поддерживается для широкого спектра реляционных баз данных и аналитических платформ. Наиболее распространённые источники:

Для каждого источника существуют свои ограничения по поддерживаемым функциям DAX и типам соединений.

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

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

  • Актуальность данных в реальном времени: пользователи всегда видят текущее состояние данных, что критично для оперативной отчётности (например, мониторинг продаж, логистика, финансы).
  • Отсутствие дублирования данных: не требуется создавать и поддерживать отдельную копию данных в BI-системе, что экономит место в оперативной памяти и упрощает администрирование (нет необходимости настраивать расписание обновлений).
  • Работа с большими объёмами данных: DirectQuery позволяет обрабатывать терабайтные базы данных, которые невозможно загрузить в память из-за ограничений по объёму ОЗУ.
  • Безопасность на уровне источника: можно использовать встроенные механизмы безопасности базы данных (например, строковую безопасность на уровне строк — Row-Level Security), не дублируя их в модели.

Недостатки

  • Зависимость от производительности источника: каждый запрос пользователя выполняется на стороне базы данных, что может приводить к задержкам при слабой производительности сервера БД или высокой нагрузке на сеть.
  • Ограничения на функции DAX: не все функции языка DAX доступны в режиме DirectQuery. Например, ограничены возможности работы с временными интеллектами (Time Intelligence), функциями RANKX, TOPN и некоторыми другими.
  • Повышенная нагрузка на источник: частые запросы от множества пользователей могут создавать значительную нагрузку на базу данных, что может замедлить её работу для других приложений.
  • Сложность оптимизации: для достижения приемлемой производительности требуется глубокая настройка как модели данных (минимизация количества запросов, использование агрегаций), так и самой базы данных (индексы, статистика, оптимизация запросов).
  • Ограничения на преобразования данных: в DirectQuery нельзя использовать Power Query для сложных преобразований данных (например, объединение таблиц, добавление столбцов на основе вычислений) — все преобразования должны выполняться на стороне источника (например, через представления или хранимые процедуры).

Применение

DirectQuery наиболее эффективен в следующих сценариях:

  • Оперативная отчётность (real-time dashboards) — мониторинг ключевых показателей эффективности (KPI) в режиме реального времени (например, количество заказов, текущая выручка, загрузка производственных линий).
  • Работа с очень большими объёмами данных (Big Data) — когда объём данных превышает возможности оперативной памяти сервера BI (например, логи транзакций за несколько лет, данные сенсоров IoT).
  • Сценарии с частыми изменениями данных — когда данные обновляются непрерывно (например, биржевые котировки, данные с кассовых аппаратов), и импорт по расписанию не обеспечивает необходимой актуальности.
  • Гибридные модели — когда часть данных (например, справочники, исторические данные) импортируется для быстрого доступа, а часть (например, текущие транзакции) запрашивается через DirectQuery.

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

Несмотря на очевидные преимущества, технология DirectQuery подвергается критике за:

  • Сложность настройки и оптимизации: для достижения приемлемой производительности требуется высокая квалификация администратора баз данных и разработчика BI-моделей. Неправильно спроектированная модель может привести к генерации неэффективных SQL-запросов, которые будут выполняться минутами.
  • Ограниченная поддержка в некоторых BI-инструментах: не все системы бизнес-аналитики (например, Tableau, Qlik) имеют полноценную поддержку DirectQuery, хотя аналогичные технологии (Live Query, On-Demand) существуют.
  • Проблемы с безопасностью: при использовании DirectQuery необходимо тщательно контролировать, какие запросы может генерировать BI-инструмент, чтобы избежать случайного раскрытия конфиденциальных данных (например, через SQL-инъекции или неограниченный доступ к таблицам).

Источники

  • Microsoft Docs: «DirectQuery model in Power BI Desktop» (2023)
  • Microsoft Docs: «DirectQuery in SQL Server Analysis Services» (2022)
  • Книга: «Analyzing Data with Power BI and Power Pivot for Excel» by Alberto Ferrari and Marco Russo (Microsoft Press, 2017)
  • Статья: «DirectQuery vs. Import: When to Use Which in Power BI» — SQLBI (2021)
  • Документация SAP: «DirectQuery for SAP HANA» (2020)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →