Управление областью и контекстом (многомерные выражения)
В службах MicrosoftSQL ServerAnalysis Services сценарии многомерных выражений могут распространяться на весь куб или на его отдельные участки в особых точках при выполнении сценария. В сценариях многомерных выражений используется многоуровневый подход к вычислениям в кубе при помощи этапов вычисления.
![]() |
---|
Дополнительные сведения о влиянии этапов вычисления на сами вычисления см. в разделе Основные сведения о порядке этапов и порядке вычисления (многомерные выражения). |
Для управления этапами вычислений, областью и контекстом в сценариях многомерных выражений, применяются инструкция CACULATE, функция This и инструкция SCOPE.
Инструкция CALCULATE
Инструкция CALCULATE заполняет каждую ячейку в кубе статистическими данными. Например, сценарий многомерных выражений по умолчанию содержит одну инструкцию CALCULATE в начале.
Дополнительные сведения о синтаксисе инструкции CALCULATE см. в разделе Инструкция CALCULATE (многомерные выражения).
![]() |
---|
Если сценарий содержит инструкцию SCOPE, содержащую в себе инструкцию CALCULATE, в многомерных выражениях инструкция CALCULATE вычисляется в рамках контекста вложенного куба, определенного инструкцией SCOPE, а не для всего куба. |
Функция This
Функция This позволяет обратиться к текущему вложенному кубу в рамках сценария многомерных выражений. Функция This позволяет быстро заполнить ячейки в текущем вложенном кубе многомерным выражением. Функция This часто используется в сочетании с инструкцией SCOPE для изменения содержимого конкретного вложенного куба на определенном этапе вычислений.
![]() |
---|
Если в сценарии присутствует инструкция SCOPE, содержащая функцию This, в многомерных выражениях функция This вычисляется в рамках контекста вложенного куба, определенного инструкцией SCOPE, а не для всего куба. |
Пример функции This
В следующем примере команд сценария многомерных выражений функция This используется для увеличения значения меры Amount в группе мер Finance образца куба Adventure Works DW на 10% для потомков элемента Redmond в измерении Customer.
/* This SCOPE statement defines the current subcube */
SCOPE([Customer].&[Redmond].MEMBERS,
[Measures].[Amount], *);
/* This expression sets the value of the Amount measure */
THIS = [Measures].[Amount] * 1.1;
END SCOPE;
Дополнительные сведения о синтаксисе функции This см. в разделе This (многомерные выражения).
Инструкция SCOPE
Инструкция SCOPE определяет текущий вложенный куб, содержащий другие выражения и инструкции многомерных выражений и определяющий для них область в рамках сценария многомерных выражений. В многомерных выражениях эти другие выражения и многомерные инструкции, включая функцию This и инструкцию CALCULATE, вычисляются в контексте данного вложенного куба.
Инструкция SCOPE является динамической, но по своей природе она не итеративна. Инструкции, содержащиеся в инструкции SCOPE, выполняются один раз, но сам вложенный куб может определяться динамически. Пусть, например, создан куб SampleCube. К кубу SampleCube можно обратиться со следующей инструкцией SCOPE для определения вложенного куба, определяющего контекст, аналогичный ALLMEMBERS в измерении Measures.
SCOPE([Measures].ALLMEMBERS);
THIS = [Measures].ALLMEMBERS.COUNT;
END SCOPE;
Эти инструкции и выражения в инструкции SCOPE выполняются лишь один раз.
Пусть теперь пользователь обращается со следующим запросом многомерных выражений, содержащим одну меру ExistingMeasure, к кубу SampleCube.
WITH MEMBER [Measures].[NewMeasure] AS '1'
SELECT
[Measures].ALLMEMBERS ON COLUMNS,
[Customer].DEFAULTMEMBER ON ROWS
FROM
[SampleCube]
Возвращенный этим запросом набор ячеек примерно соответствует выводу, приведенному в следующей таблице.
[ExistingMeasure] |
[NewMeasure] |
|
---|---|---|
[Customer].[All] |
2 |
2 |
Обратите внимание, что в возвращаемом наборе ячеек значение ExistingMeasure, включенное в инструкцию SCOPE в данном сценарии многомерных выражений, динамически обновляется после определения меры NewMeasure.
Инструкция SCOPE может быть вложена в другую инструкцию SCOPE. Однако, поскольку инструкция SCOPE не является итеративной, главное назначение вложенных инструкций SCOPE — дальнейшее подразделение вложенного куба для последующей обработки.
Пример инструкции SCOPE
В следующем примере сценария многомерных выражений инструкция SCOPE используется для увеличения значения меры Amount в группе мер Finance образца куба Adventure Works DW на 10% для потомков элемента Redmond в измерении Customer. Однако этот вложенный куб далее изменяется следующей инструкцией SCOPE так, чтобы он включал в себя меру Amount для потомков 2002 календарного года. Затем мера Amount обрабатывается только для этого вложенного куба, оставляя статистические значения для меры Amount в других календарных годах без изменений.
/* Calculate the entire cube first. */
CALCULATE;
/* This SCOPE statement defines the current subcube */
SCOPE([Customer].&[Redmond].MEMBERS,
[Measures].[Amount], *);
/* This expression sets the value of the Amount measure */
THIS = [Measures].[Amount] * 1.1;
END SCOPE;
Дополнительные сведения о синтаксисе инструкции SCOPE см. в разделе Инструкция SCOPE (многомерные выражения).