Управление областью и контекстом (MDX)

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

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

Замечание

Дополнительные сведения о том, как проходы вычислений могут влиять на расчеты, см. в разделе "Общие сведения о порядке проходов и порядка решения (многомерные выражения)".

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

Использование инструкции CALCULATE

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

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

Замечание

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

Использование этой функции

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

Замечание

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

Пример этой функции

В следующем примере команды скрипта многомерных выражений используется функция This для увеличения значения меры "Сумма" в группе мер "Финансы" многомерного куба Adventure Works DW Multidimensional 2012 на 10% выше для потомков участника Redmond в измерении клиентов:

/* 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 (MDX).

Использование заявления SCOPE

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

Оператор SCOPE является динамическим, но не итеративным в природе. Операторы, содержащиеся в инструкции SCOPE, выполняются один раз, но сам подкуб может определяться динамически. Например, у вас есть куб с именем SampleCube. В кубе SampleCube применяется следующая инструкция SCOPE, чтобы определить подкуб, который задает контекст как ALLMEMBERS в рамках измерения Measures:

SCOPE([Measures].ALLMEMBERS);

THIS = [Measures].ALLMEMBERS.COUNT;

END SCOPE;

Операторы и выражения в этой инструкции SCOPE выполняются один раз.

Теперь корпоративный пользователь выполняет следующий MDX-запрос для куба SampleCube, включающий одну меру под названием ExistingMeasure.

WITH MEMBER [Measures].[NewMeasure] AS '1'

SELECT

[Measures].ALLMEMBERS ON COLUMNS,

[Customer].DEFAULTMEMBER ON ROWS

FROM

[SampleCube]

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

[ТекущаяМера] [NewMeasure]
[Клиент]. [Все] 2 2

Глядя на возвращаемый набор ячеек, обратите внимание, как значение ExistingMeasure, включенное в оператор SCOPE в MDX-скрипте, динамически обновляется вслед за определением меры NewMeasure.

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

Пример инструкции SCOPE

В следующем примере скрипта MDX используется инструкция SCOPE, чтобы задать значение меры "Сумма" в группе мер Finance в многомерном кубе Adventure Works DW 2012 на 10% выше для дочерних элементов члена Redmond в измерении Customer. Однако другая инструкция SCOPE изменяет подкубку, чтобы включить меру "Сумма" для дочерних элементов календарного года 2002 года. Наконец, мера "Сумма" затем агрегируется только для этого подкуба, оставляя агрегированные значения для меры "Сумма" в других календарных годах без изменений.

/* 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 (MDX).

См. также

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