Режим DirectQuery (табличные службы SSAS)

Службы Analysis Services позволяют создавать табличные модели и отчеты, которые получают данные и агрегаты напрямую из системы реляционных баз данных, используя режим DirectQuery. К преимуществам использования режима DirectQuery обычно относят возможность запросить очень большие наборы данных, которые не помещаются в памяти, и обновлять данные в реальном времени.

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

Разделы данной темы:

  • Обзор режима DirectQuery

  • Создание моделей для использования в режиме DirectQuery

    • Источники данных для моделей DirectQuery

    • Ограничения проверки и проектирования для режима DirectQuery

    • Совместимость формул

    • Подключение к моделям DirectQuery

    • Безопасность

  • Свойства DirectQuery

  • Связанные темы и задачи

Обзор режима DirectQuery

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

  • Данные не обновляются при изменении исходных данных. Необходимо обработать модель для внедрения обновлений в данные.

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

Напротив, табличная модель в режиме DirectQuery использует данные, хранящиеся в базе данных SQL Server или в хранилище данных Хранилище SQL Server PDW. Во время разработки все данные или небольшая часть данных импортируются в кэш и модель строится как обычно. Когда модель будет готова к развертыванию, необходимо изменить режим работы на DirectQuery. После изменения режима работы все запросы к модели будут использовать указанный реляционный источник данных (SQL Server или Хранилище SQL Server PDW), а не кэшированные данные.

При создании отчетов или запросов к модели используется DAX, но запросы DAX преобразуются службами Analysis Services в эквивалентные инструкции Transact-SQL для заданного реляционного источника данных.

У развертывания модели с использованием режима DirectQuery есть много преимуществ.

  • Для наборов данных, которые не помещаются в памяти на сервере служб Analysis Services, можно настроить модель.

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

  • DirectQuery может воспользоваться ускорением запросов на стороне поставщика, например за счет оптимизированных для памяти индексов столбцов xVelocity. Индексы columnstore xVelocity предоставляются как в SQL Server 2012, так и в Хранилище SQL Server PDW в целях повышения производительности DirectQuery.

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

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

Проектирование моделей для использования в режиме DirectQuery

Все табличные модели создаются с помощью конструктора моделей в среде SQL Server Data Tools (SSDT), и по умолчанию модель всегда создается в памяти. Это означает, что при работе с данными, которые не помещаются в памяти, следует планировать работу на меньшем подмножестве данных во время разработки и обращаться к общему источнику данных только после развертывания модели. Существует несколько способов работы с меньшим подмножеством данных.

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

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

  • Добавьте секции к таблицам, чтобы управлять количеством данных, которые необходимо обрабатывать одновременно.

Когда нужно переключиться в режим DirectQuery, достаточно изменить свойство, которое включает режим DirectQuery. Дополнительные сведения см. в разделе Включить режим разработки DirectQuery (табличные службы SSAS).

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

  • Источники данных. Модели DirectQuery могут использовать данные только одного реляционного источника данных. Источник может быть экземпляром SQL Server или экземпляром Хранилище SQL Server PDW. После того как для модели включен режим DirectQuery, в конструкторе модели нельзя использовать другие типы данных, включая таблицы, добавленные путем копирования и вставки. Все остальные параметры импорта отключены. Кроме того, включенные в запрос таблицы должны быть частью указанного источника данных. Дополнительные сведения см. в разделе Источники данных.

  • Поддержка вычисляемых столбцов. Вычисляемые столбцы для моделей DirectQuery не поддерживаются. Однако можно создавать меры и ключевые индикаторы производительности для работы с наборами данных. Дополнительные сведения см. в разделе, посвященном проверке.

  • Ограниченное использование DAX-функций. Некоторые DAX-функции нельзя использовать в режиме DirectQuery, поэтому их необходимо заменить другими функциями или создать значения с использованием производных столбцов в источнике данных. Конструктор моделей во время разработки обеспечивает проверку ошибок, возникающих при создании формул, несовместимых с режимом DirectQuery. Дополнительные сведения см. в следующих разделах: Проверка.

  • Совместимость формул. В некоторых известных случаях одна и та же формула может возвращать разные результаты в кэшированной или гибридной модели по сравнению с моделью DirectQuery, которая использует только реляционное хранилище данных. Эти отличия являются следствием семантических отличий между подсистемой аналитики в памяти xVelocity (VertiPaq) и SQL Server. Дополнительные сведения об этих различиях см. в разделе: Совместимость формул.

  • Безопасность. В зависимости от способа развертывания модели используются различные методы обеспечения ее безопасности. Безопасность кэшированных данных для табличных моделей обеспечивается с помощью модели безопасности экземпляра служб Analysis Services. Безопасность моделей DirectQuery обеспечивается с помощью ролей, однако, кроме того, можно использовать модель безопасности, определенную в реляционном хранилище данных. Модель может быть настроена таким образом, чтобы пользователи, открывающие отчет, созданный только на основе модели DirectQuery, видели только те данные, которые им разрешено видеть согласно разрешениям в SQL Server. Дополнительные сведения см. в разделе: Безопасность.

  • Клиентские ограничения. Когда модель используется в режиме DirectQuery, к ней можно обращаться только с помощью DAX-запросов. Многомерные выражения нельзя использовать для создания запросов. Это означает, что использовать клиент сводных таблиц и диаграмм Excel нельзя, поскольку в Excel используются многомерные выражения.

    Тем не менее можно создавать запросы для модели DirectQuery в среде Среда SQL Server Management Studio при использовании табличного запроса DAX в составе инструкции XMLA Execute. Дополнительные сведения см. в разделе Справочник по синтаксису запроса DAX.

После разрешения всех вопросов проектирования и тестирования модели можно переходить к ее развертыванию. На данный момент пользователь может сам определить предпочтительный метод ответа на запросы к модели. Разрешить пользователям доступ к кэшу или всегда использовать только реляционный источник данных?

При развертывании модели в гибридном режиме кэш по-прежнему доступен и может быть использован для запросов. Гибридный режим предоставляет множество вариантов.

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

  • Можно также настроить секции в кэше таким образом, чтобы первичная секция, используемая для режима DirectQuery, никогда не обрабатывалась и всегда ссылалась на реляционный источник. Есть много способов использования секций для оптимизации проектирования моделей и составления отчетов. Дополнительные сведения см. в разделе Секции и режим DirectQuery (табличные службы SSAS).

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

Источники данных для моделей DirectQuery

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

Если планируется использовать модель в режиме DirectQuery, то нужно, чтобы все данные для составления отчетов хранились в указанном источнике данных. Если данные, необходимые для моделирования, недоступны в указанном источнике, можно использовать службы Integration Services или другие средства хранения данных, чтобы импортировать данные в базу данных или хранилище данных, которые служат источником данных DirectQuery.

Ограничения проверки и проектирования для режима DirectQuery

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

ПредупреждениеВнимание!

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

Чтобы просмотреть и устранить ошибки проверки, откройте Список ошибок в SQL Server Data Tools. Критические ошибки, блокирующие использование режима DirectQuery, отображаются на вкладке Ошибки. Эти ошибки необходимо устранить перед переходом в режим DirectQuery. Ошибки проверки, которые трудно разрешить, обычно связаны с формулами, неподдерживаемыми в режиме DirectQuery. Обзор ошибок, связанных с формулами и вычисляемыми столбцами, см. в разделе Совместимость формул.

Ниже приводятся другие рекомендации, о которых следует помнить при создании модели для доступа в режиме DirectQuery.

  • В режиме Только DirectQuery результаты в отчете могут отличаться в зависимости от контекста безопасности пользователя, который просматривает результаты. Чтобы убедиться, чтобы пользователи получают необходимые результаты, следует протестировать модели с различными учетными данными.

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

Совместимость формул для моделей DirectQuery

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

  • Вычисляемые столбцы не поддерживаются в табличных моделях со включенным режимом DirectQuery и в гибридных моделях. Если для модели требуются вычисляемые столбцы, попробуйте преобразовать их в производные столбцы путем использования Transact-SQL в определении импорта.

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

  • Не все функции поддерживаются. Поскольку службы Analysis Services преобразуют все DAX-формулы и определения мер в инструкции SQL при отправке запросов к модели DirectQuery, формула, содержащая элементы, которые не могут быть преобразованы в Transact-SQL, вызовет ошибку проверки модели. Например, не поддерживаются функции логики операций со временем. Даже поддерживаемые функции, например статистические функции, могут вести себя по-другому. Полный список проблем с совместимостью см. в разделе Совместимость формул в режиме DirectQuery.

  • Некоторые формулы в модели могут проходить проверку при переводе модели в режим DirectQuery, но при этом возвращать другие результаты при обращении к кэшу по сравнению с обращением к реляционному хранилищу данных. Это происходит, потому что вычисления для кэша используют семантику подсистемы аналитики в памяти xVelocity (VertiPaq), которая содержит многие функции, предназначенные для моделирования поведения Excel, в то время как запросы к данным, хранимым в реляционном хранилище данных, всегда используют семантику SQL Server. Список DAX-функций, которые могут возвращать разные результаты при развертывании модели в режиме реального времени, см. в разделе Совместимость формул в режиме DirectQuery.

Подключение к моделям DirectQuery

Клиенты, использующие для отчетов язык многомерных выражений, не могут подключаться к моделям, использующим режим DirectQuery. Если вы попытаетесь создать запрос многомерных выражений к модели DirectQuery, будет возвращена ошибка, сообщающая, что куб не найден или не обработан. Запросы для моделей DirectQuery можно создавать с помощью Power View, DAX-формул или запросов XMLA. Дополнительные сведения о том, как выполнять нерегламентированные запросы к табличным моделям, см. в разделе Доступ к данным табличной модели.

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

Безопасность в режиме DirectQuery

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

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

  • Пользователи, просматривающие одну модель или отчет, могут видеть разные данные, в зависимости от контекста безопасности пользователей.

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

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

  • Если модели отчета требуется безопасность, для этого есть две возможности: использовать роли служб Analysis Services либо задать в источнике данных разрешения доступа на уровне строк. Безопасность в реляционном источнике данных используется для управления доступом к таблицам, при этом безопасность уровня столбцов не поддерживается. Таким образом, если пользователи одного региона не имеют разрешения просматривать результаты продаж из других регионов, отчет, который включает меру на основе таблицы «Продажи», будет возвращать пустые ячейки или ошибку.

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

  • По умолчанию
    Использует учетные данные, заданные в мастере импорта для подключения к источнику данных. Это может быть определенный пользователь Windows или учетная запись службы.

  • ImpersonateCurrentUser
    Использует для подключения к источнику данных учетные данные текущего пользователя.

Дополнительные сведения о задании этих свойств см. в разделе Сценарии развертывания DirectQuery (табличные службы SSAS).

Свойства DirectQuery

В следующей таблице перечислены свойства, которые можно задать в среде SQL Server Data Tools и Среда SQL Server Management Studio, чтобы включить режим DirectQuery и управлять источником данных, используемым для запросов к модели.

Имя свойства

Описание

Свойство DirectQueryMode

Это свойство позволяет использовать режим DirectQuery в конструкторе моделей. Чтобы изменить другие свойства DirectQuery, этому свойству следует задать значение On.

Дополнительные сведения см. в разделе Включить режим разработки DirectQuery (табличные службы SSAS).

Свойство QueryMode

Это свойство указывает метод запроса по умолчанию для модели DirectQuery. Это свойство задается в конструкторе моделей при развертывании модели, однако позже его можно переопределить.

Свойство может принимать следующие значения.

  • DirectQuery. Указывает, что все запросы к модели должны использовать только реляционный источник данных.

  • DirectQuery с функцией In-Memory. Указывает, что по умолчанию запросы должны получать ответ из реляционного источника, если иное не указано в строке подключения клиента.

  • In-Memory. Указывает, что запросы должны получать ответ только из кэша.

  • In-Memory с DirectQuery. Указывает, что по умолчанию запросы должны получать ответ из кэша, если иное не указано в строке подключения.

Дополнительные сведения см. в разделе Установка или изменение предпочтительного метода подключения для DirectQuery.

Свойство DirectQueryMode

После развертывания модели предпочтительный источник данных запросов для модели DirectQuery можно изменить, задав свойство в среде Среда SQL Server Management Studio

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

  • InMemory. Запросы могут использовать только кэш.

  • DirectQuerywithInMemory. По умолчанию запросы используют реляционный источник данных, если иное не указано в строке подключения клиента.

  • InMemorywithDirectQuery. По умолчанию запросы используют кэш, если иное не указано в строке подключения клиента.

  • (DirectQuery. Запросы используют только реляционный источник данных.

Дополнительные сведения см. в разделе Установка или изменение предпочтительного метода подключения для DirectQuery.

Свойство «Параметры олицетворения»

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

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

Олицетворение не может использоваться, когда модель находится только в памяти. Параметр ImpersonateCurrentUser недействителен, если модель не использует режим DirectQuery.

Помимо этого, если модель включает секции, следует выбрать одну секцию для использования в качестве источника для запросов в режиме DirectQuery. Дополнительные сведения см. в разделеСекции и режим DirectQuery (табличные службы SSAS).

Связанные темы и задачи

Раздел

Описание

Секции и режим DirectQuery (табличные службы SSAS)

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

Совместимость формул в режиме DirectQuery

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

Включить режим разработки DirectQuery (табличные службы SSAS)

Описывает, как можно изменить среду времени разработки так, чтобы обеспечить использование режима DirectQuery.

Изменение секции DirectQuery (табличные службы SSAS)

Описывает, как изменить секцию DirectQuery.

Установка или изменение предпочтительного метода подключения для DirectQuery

Описывает, как задать или изменить метод соединения для моделей, настроенных для DirectQuery.

Сценарии развертывания DirectQuery (табличные службы SSAS)

Описывает сценарии развертывания DirectQuery.

Настройка доступа в памяти или доступа DirectQuery для шаблона базы данных табличной модели

Описывает некоторые распространенные конфигурации DirectQuery.

Очистка кэша служб Analysis Services

Объясняет, как очистить кэш табличной модели.

См. также

Основные понятия

Секции (табличные службы SSAS)

Проекты табличной модели (табличные службы SSAS)

Анализ в Excel (табличные службы SSAS)