Поделиться через


Построение именованных наборов в многомерных выражениях

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

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

Именованный набор можно определить в одном из следующих контекстов:

  • Контекст запроса.    Чтобы создать именованный набор, который определен как часть запроса многомерных выражений, с областью, ограниченной этим запросом, используется ключевое слово WITH. Затем именованный набор можно использовать внутри инструкции MDX SELECT. При таком подходе именованный набор, созданный с использованием ключевого слова WITH, может быть изменен без изменений в инструкции SELECT.

    Дополнительные сведения об использовании ключевого слова WITH для создания именованных наборов см. в разделе Создание именованных наборов с областью действия запроса (многомерные выражения).

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

    Дополнительные сведения об использовании инструкции CREATE SET для создания именованных наборов см. в разделе Создание именованных наборов с областью действия сеанса (многомерные выражения).

  • Глобальный контекст. Чтобы создать именованный набор, область которого шире контекста сеанса пользователя, т. е. набор со сроком действия выполняющегося экземпляра, в сценарии многомерных выражений по умолчанию следует использовать инструкцию CREATE SET. Дополнительные сведения см. в разделе Базовый сценарий многомерных выражений (многомерные выражения). Именованный набор, определенный с помощью инструкции CREATE SET в сценарии многомерных выражений по умолчанию, доступен всем пользователям во всех запросах многомерных выражений в любом сеансе.

Содержимое именованных наборов вычисляется в момент создания (STATIC) или в любое время, когда они используются в запросе (DYNAMIC). Синтаксис инструкции CREATE SET [STATIC|DYNAMIC] определяет время вычисления набора. Дополнительные сведения см. в разделе Инструкция CREATE SET (многомерные выражения)Инструкция CREATE SET (многомерные выражения). По умолчанию наборы создаются как STATIC, если в инструкции создания не указано ни одно из этих ключевых слов.

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

  • Вычисляемые элементы

  • Динамические именованные наборы.

  • Ключевые индикаторы производительности (KPI).

  • Правосторонние выражения (RHS) в выражении присваивания.

  • Условное выражение для вычисления ячейки.

  • Выражение значения для вычисления ячейки.

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

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

Поскольку динамические наборы не вычисляются во время выполнения команды CREATE SET, создается ссылка на все объекты (статические и динамические), от которых зависит динамический набор. Поэтому никакой объект, на который имеются ссылки, нельзя удалить, пока не удален сам динамический набор. Например, если динамический набор создан в сеансе, который ссылается на вычисляемый элемент сеанса, этот вычисляемый элемент нельзя удалять, пока существует именованный динамический набор.

Разрешение динамических именованных наборов

В любой момент может существовать до трех версий динамического набора:

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

  • Одна в области сеанса, используемый в вычислениях сеанса.

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

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

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