Управление областью и контекстом (многомерные выражения)
Применимо к: 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)