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-клиентов.
¶Источники
- Microsoft Learn. «DirectQuery in Power BI». — Официальная документация Microsoft.
- Microsoft Learn. «DirectQuery model guidance in Power BI Desktop». — Руководство по моделированию.
- Marco Russo, Alberto Ferrari. «Using DirectQuery in Power BI». — SQLBI, 2023.
- Microsoft. «SQL Server Analysis Services Tabular: DirectQuery». — Документация SQL Server 2012—2022.
- Microsoft. «Composite models in Power BI Desktop». — Документация, 2022.
- Gartner. «Magic Quadrant for Analytics and Business Intelligence Platforms». — 2023.