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


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

Применимо к: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

В Microsoft SQL Server SQL Server Analysis Services скрипт многомерных выражений может применяться ко всему кубу или к определенным частям куба в определенных точках выполнения скрипта. В скриптах многомерных выражений используется многоуровневый подход к вычислениям в кубе при помощи этапов вычисления.

Примечание

Дополнительные сведения о том, как проходы вычислений могут повлиять на вычисления, см. в разделах Understanding Pass Order и Solve Order (Многомерные выражения).

Для управления этапами вычислений, областью и контекстом в скриптах многомерных выражений применяются инструкция CACULATE, функция This и инструкция SCOPE.

Инструкция CALCULATE

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

Дополнительные сведения о синтаксисе инструкции CALCULATE см. в разделе Calculate Statement (многомерные выражения).

Примечание

Если скрипт содержит инструкцию SCOPE, содержащую в себе инструкцию CALCULATE, в многомерных выражениях инструкция CALCULATE вычисляется в рамках контекста вложенного куба, определенного инструкцией SCOPE, а не для всего куба.

Функция This

Функция This позволяет обратиться к текущему вложенному кубу в рамках скрипта многомерных выражений. Функция This позволяет быстро заполнить ячейки в текущем вложенном кубе многомерным выражением. Функция This часто используется в сочетании с инструкцией SCOPE для изменения содержимого конкретного вложенного куба на определенном этапе вычислений.

Примечание

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

Пример функции This

В следующем примере команды скрипта многомерных выражений функция This используется для увеличения значения меры Amount в группе мер Finance примера куба Adventure Works DW Multidimensional 2012 до 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 Multidimensional 2012 на 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 (многомерные выражения).

См. также:

Справка по языку многомерных выражений (многомерные выражения)
Базовый скрипт многомерных выражений (многомерные выражения)
Основные принципы запросов многомерных выражений (службы Analysis Services)