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


Управление областью и контекстом (многомерные выражения)

В службах Microsoft SQL Server Службы Analysis 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 (многомерные выражения).