Режим DirectQuery в табличных моделях

Применимо к: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

В этой статье описывается режим DirectQuery для табличных моделей служб Analysis Services на уровнях совместимости 1200 и более поздних версий. Режим DirectQuery можно включить для моделей, которые вы разрабатываете в Visual Studio, или для табличных моделей, которые уже развернуты, можно изменить на режим DirectQuery с помощью SQL Server Management Studio (SSMS). Прежде чем выбирать режим DirectQuery, важно понимать преимущества и ограничения.

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

По умолчанию табличные модели используют кэш в памяти для хранения и запроса данных. Если табличные модели запрашивают данные, находящиеся в памяти, даже сложные запросы могут быть очень быстрыми. Однако существуют некоторые ограничения на использование кэшированных данных, например, очень большие наборы данных могут превышать доступную память, а обновление данных модели в оперативной памяти может требовать избыточного количества доступных ресурсов, если это необходимо часто.

DirectQuery преодолевает эти ограничения, а также использует функции RDBMS, что делает выполнение запросов более эффективным. С помощью DirectQuery:

  • Данные актуальны. Так как данные всегда запрашиваются в источнике данных, клиентские приложения отчетов всегда получают последние данные.

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

  • Наборы данных могут превышать емкость памяти серверного ресурса Analysis Services.

  • DirectQuery может воспользоваться преимуществами ускорения обработки запросов на стороне поставщика, например, теми, которые предоставляются индексами столбцов, оптимизированными для памяти.

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

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

Ограничения

Табличные модели в режиме DirectQuery имеют некоторые ограничения. Перед переключением режимов важно определить, перевешивают ли преимущества выполнения запросов на серверном сервере любые сокращения функциональных возможностей. Если изменить режим существующей модели в Visual Studio, конструктор табличных моделей уведомит вас о любых функциях модели, несовместимых с режимом DirectQuery. Необходимо учитывать следующие ограничения.

Функция Ограничение
Источники данных Модели DirectQuery могут использовать только данные из одной реляционной базы данных следующих типов: База данных SQL Azure, Azure Synapse Analytics, SQL Server, Oracle и Teradata.
Хранимые процедуры для работы с SQL Для моделей DirectQuery хранимые процедуры нельзя указать в инструкции SQL для определения таблиц.
Вычисляемые таблицы Вычисляемые таблицы не поддерживаются в моделях DirectQuery, но вычисляемые столбцы поддерживаются. При попытке преобразовать табличную модель, содержащую вычисляемую таблицу, возникнет ошибка, указывающая, что модель не может содержать вставленные данные.
Ограничения на запросы Ограничение строк по умолчанию — один миллион строк. Это ограничение можно увеличить, указав MaxIntermediateRowSize. Дополнительные сведения см. в разделе "Свойства DAX".
Формулы DAX При выполнении запроса к табличной модели в режиме DirectQuery служба Analysis Services преобразует формулы DAX и определения мер в инструкции SQL. Формулы DAX, содержащие элементы, которые не могут быть преобразованы в синтаксис SQL, возвращают ошибки проверки в модели.

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

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

Примечание. Некоторые формулы в модели могут проверяться при переключении модели в режим DirectQuery, но возвращают разные результаты при выполнении в кэше и реляционном хранилище данных. Это связано с тем, что вычисления в кэше используют семантику подсистемы аналитики в памяти, которая содержит функции, предназначенные для эмуляции поведения Excel, в то время как запросы к данным, хранящимся в реляционном источнике данных, используют семантику SQL.

Согласованность формул В некоторых случаях одна и та же формула может возвращать разные результаты в кэшированной модели по сравнению с моделью DirectQuery, которая использует только реляционное хранилище данных. Эти различия являются следствием семантических различий между подсистемой аналитики в памяти и источником данных.

Ограничения MDX Нет относительных имен объектов. Все имена объектов должны быть полностью квалифицированы.

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

В подзапросах MDX недопустимы кортежи с элементами из разных уровней.

Пользовательские иерархии не определены.

Отсутствие собственных запросов SQL (обычно службы Analysis Services поддерживают подмножество T-SQL, однако не поддерживают модели DirectQuery).

Подключение к источнику данных

При проектировании модели DirectQuery в Visual Studio подключение к источнику данных и выбор таблиц и полей для включения в модель совпадает с моделями в памяти.

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

Успешное импортирование DirectQuery

Если вы уже использовали get Data для импорта данных, но еще не включили режим DirectQuery, при этом кэш в памяти будет очищен.

Добавление примеров данных в проект модели DirectQuery

По умолчанию при использовании конструктора табличных моделей в Visual Studio (SSDT) для разработки проекта табличной модели DirectQuery база данных рабочей области модели не содержит никаких данных. Существует одна секция по умолчанию для каждой таблицы, и эта секция направляет все запросы к источнику данных. Поскольку DirectQuery был впервые представлен, конструктор табличных моделей включает функцию Установить как пример в менеджере разделов. Эта функция позволяет добавлять секцию копирования в таблицы, которые можно использовать для импорта небольшого количества примеров данных в базу данных рабочей области. Эта функция предназначена для проверки решений по моделированию без влияния на источник данных.

Это важно

В настоящее время функция Set as Sampleв конструкторе табличных моделей не поддерживается. Игнорируйте предупреждения Таблица <TableName> не содержит пример раздела; чтобы использовать данные в SSDT, добавьте пример раздела.

Развертывание моделей DirectQuery

Модели DirectQuery развертываются так же, как и модели импорта. Однако в отличие от моделей импорта, если модель DirectQuery содержит вычисляемые элементы, такие как вычисляемые столбцы или группы вычислений, после развертывания необходимо выполнить пересчет процесса во всех таблицах. Дополнительные сведения см. в разделе "Обработка базы данных, таблицы или раздела".

См. также

Включение режима DirectQuery в Visual Studio
Включение режима DirectQuery в SSMS
Определение секций в моделях DirectQueryТестирование модели в режиме DirectQuery
Источники данных, поддерживаемые в службах Azure Analysis Services
Источники данных, поддерживаемые в табличных моделях SQL Server Analysis Services 1400 и более поздних версий.