Секции и режим DirectQuery (табличные службы SSAS)
В этом разделе объясняется использование секций в моделях DirectQuery. Дополнительные общие сведения о секциях в табличных моделях см. в разделе Секции (табличные службы SSAS).
Инструкции по изменению используемой секции или просмотру сведений о секции см. в разделе Изменение секции DirectQuery (табличные службы SSAS).
Использование секций в режиме Direct Query
Для каждой таблицы следует указать одну секцию, которая будет использоваться в качестве источника данных DirectQuery. Если есть несколько секций, при переводе модели в режим DirectQuery по умолчанию первая секция, которая была создана в таблице, будет отмечена как секция DirectQuery. Ее можно будет изменить позже с помощью диспетчера секций в среде SQL Server Data Tools (SSDT).
Почему в режиме DirectQuery разрешена только одна секция?
В табличных моделях, таких как OLAP-модели, секции таблицы определяются с помощью SQL-запросов. Разработчик, создающий определение секции, должен следить за тем, чтобы секции не пересекались. Службы Analysis Services не проверяют принадлежность записей к одной или нескольким секциям.
Секции в кэшированной табличной модели ведут себя одинаково. При использовании модели, находящейся в памяти во время доступа к кэшу, DAX-формулы вычисляются для каждой секции, а результаты объединяются. Тем не менее, когда табличная модель работает в режиме DirectQuery, невозможно выполнить вычисление для нескольких секций, объединить результаты и преобразовать их в одну инструкцию SQL для отправки в реляционное хранилище данных. Это может привести к неприемлемой потере производительности, а также к потенциально неточным результатам после их объединения.
В силу этого для запросов, которые получают ответы в режиме DirectQuery, сервер использует одну секцию, которая была отмечена как первичная секция для доступа в режиме DirectQuery, которая называется Секция DirectQuery. SQL-запрос, указанный в определении этой секции, определяет полный набор данных, которые могут быть использованы для ответа на запросы в режиме DirectQuery.
Если явно определенных секций нет, ядро просто создает SQL-запрос для всего реляционного источника данных, выполняет операции на основе наборов, определяемые DAX-формулой, и возвращает результаты запроса.
Если в таблице имеется несколько секций и одна из их выбрана в качестве секции DirectQuery, все остальные секции автоматически отмечаются для использования только в памяти.
Секции в кэшированных моделях и в моделях DirectQuery
Во время настройки секции DirectQuery следует указать параметры обработки для секции.
Для секции DirectQuery есть два параметра обработки. Чтобы задать это свойство, воспользуйтесь Диспетчером секций в SQL Server Data Tools (SSDT) или Среда SQL Server Management Studio и выберите свойство Параметр обработки. В следующей таблице перечислены значения этого свойства и описан результат применения каждого значения при объединении со свойством DirectQueryUsage в строке подключения.
Свойство DirectQueryUsage |
Свойство Параметр обработки |
Примечания |
---|---|---|
DirectQuery |
Никогда не обрабатывать эту секцию |
Когда модель использует только DirectQuery, обработка не требуется. В гибридных моделях можно настроить секцию DirectQuery так, чтобы она никогда не обрабатывалась. Например, если выполняется работа с большим набором данных, при этом нет необходимости добавлять все результаты в кэш, можно указать, чтобы секция DirectQuery включала объединение результатов для всех других секций в таблице и не обрабатывала объединение. Это не касается запросов к реляционному источнику, а запросы к кэшированным данным будут содержать объединенные данные из других секций. |
InMemory с DirectQuery |
Разрешить обработку секции |
Если модель использует гибридный режим, то для запросов в памяти и запросов к реляционному источнику данных следует использовать одну и ту же секцию. |