Режим DirectQuery в табличных моделях
Применимо к: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
В этой статье описывается режим DirectQuery для табличных моделей служб Analysis Services с уровнями совместимости 1200 и выше. Режим DirectQuery можно включить для моделей, разрабатываемых в Visual Studio, или для уже развернутых табличных моделей с помощью SQL Server Management Studio (SSMS). Прежде чем выбирать режим DirectQuery, важно понимать преимущества и ограничения.
Преимущества
По умолчанию табличные модели используют кэш в памяти для хранения данных и отправки запросов к данным. Когда табличные модели запрашивают данные, находящиеся в памяти, даже сложные запросы могут выполняться очень быстро. Однако существуют некоторые ограничения на использование кэшированных данных, например, очень большие наборы данных могут превышать объем доступной памяти, а обработка (обновление) данных модели в памяти может требовать чрезмерного объема доступных ресурсов, если это необходимо часто.
Режим DirectQuery обходит эти ограничения, а также применяет функции реляционных СУБД, что позволяет повысить эффективность выполнения запросов. Ниже приведены преимущества режима DirectQuery.
Данные актуальны. Так как данные всегда запрашиваются в источнике данных, клиентские приложения отчетов всегда получают последние данные.
Нет дополнительных затрат на управление необходимостью поддерживать отдельную копию данных (в кэше в памяти). Обработка (обновление) данных модели не требуется. Изменения данных базового источника могут быть сразу же отражены в запросах к модели данных.
Наборы данных могут быть больше, чем объем памяти ресурса сервера служб Analysis Services.
DirectQuery может воспользоваться преимуществами ускорения запросов на стороне поставщика, например за счет индексов столбцов, оптимизированных для памяти.
Безопасность может обеспечиваться серверной базой данных-источником с помощью функций безопасности на уровне строк из базы данных (кроме того, можно использовать правила безопасности на уровне строк, определенные в модели с помощью DAX).
Если модель содержит сложные формулы, которым могут потребоваться несколько запросов, службы Analysis Services могут выполнять оптимизацию для того, чтобы план запроса к серверной базе данных был как можно более эффективным.
Ограничения
Табличные модели в режиме DirectQuery имеют некоторые ограничения. Перед изменением режима обязательно определите, превышают ли преимущества выполнения запросов на внутреннем сервере проблемы, связанные со снижением функциональных возможностей. Если изменить режим существующей модели в Visual Studio, конструктор табличных моделей уведомит вас о любых функциях модели, несовместимых с режимом DirectQuery. Не забывайте о следующих ограничениях:
Компонент | Ограничение |
---|---|
Источники данных | Модели DirectQuery могут использовать данные только из одной реляционной базы данных следующих типов: Azure SQL Database, 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, которая использует только реляционное хранилище данных. Эти различия являются следствием семантических различий между подсистемой аналитики в памяти и источником данных. |
Ограничения для многомерных выражений | Нельзя использовать относительные имена объектов. Необходимо указывать полные имена. Нельзя изменять инструкции многомерных выражений для области сеанса (именованные наборы, вычисляемые элементы, вычисляемые ячейки, визуальные итоги, элементы по умолчанию и т. д.), но можно использовать конструкции области запросов, такие как предложение WITH. Отсутствуют кортежи с элементами различных уровней в предложениях подзапроса выборки многомерных выражений. Отсутствуют пользовательские иерархии. Отсутствуют собственные SQL-запросы (как правило, службы Analysis Services поддерживают подмножество T-SQL, но не для моделей DirectQuery). |
Подключение к источнику данных
При проектировании модели DirectQuery в Visual Studio подключение к источнику данных и выбор таблиц и полей для включения в модель во многом совпадает с моделями в памяти.
Если вы уже включили DirectQuery, но еще не подключились к источнику данных, можно использовать мастер получения данных (или мастер импорта данных для устаревших источников данных поставщика), чтобы подключиться к источнику данных, выбрать таблицы и поля и т. д. Разницу вы заметите по окончании — данные не будут импортированы в кэш в памяти.
Если вы уже использовали получение данных для импорта данных, но еще не включили режим 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 и более поздних версий.