Administrar el ámbito y el contexto (MDX)

Se aplica a: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

En Microsoft SQL Server SQL Server Analysis Services, un script de expresiones multidimensionales (MDX) se puede aplicar a todo el cubo o a partes específicas del cubo, en puntos específicos dentro de la ejecución del script. El script MDX puede adoptar un enfoque en capas de los cálculos del cubo mediante el uso de pasos de cálculo.

Nota:

Para obtener más información sobre cómo los pasos de cálculo pueden afectar a los cálculos, vea Understanding Pass Order and Solve Order (MDX).

Para controlar el paso de cálculo, el ámbito y el contexto de un script MDX, se pueden usar específicamente la instrucción CACULATE, la función This y la instrucción SCOPE.

Usar la instrucción CALCULATE

La instrucción CALCULATE rellena cada celda del cubo con datos agregados. Por ejemplo, el script MDX predeterminado tiene una única instrucción CALCULATE al principio del script.

Para obtener más información sobre la sintaxis de la instrucción CALCULATE, vea CALCULATE Statement (MDX).

Nota:

Si el script contiene una instrucción SCOPE que incluya una instrucción CALCULATE, MDX evalúa la instrucción CALCULATE en el contexto del subcubo definido por la instrucción SCOPE, no en relación a todo el cubo.

Usar la función This

La función This permite recuperar el subcubo actual en un script MDX. La función This también se puede usar para establecer con rapidez los valores de las celdas del subcubo actual en una expresión MDX. Por lo general, la función This se usa en combinación con la instrucción SCOPE para cambiar el contenido de un subcubo específico durante un paso de cálculo determinado.

Nota:

Si el script contiene una instrucción SCOPE que incluya una función This , MDX evalúa la función This en el contexto del subcubo definido por la instrucción SCOPE, no en relación a todo el cubo.

Ejemplo de la función This

En el siguiente ejemplo de comando de script MDX se usa la función This para aumentar el valor de la medida Amount, en el grupo de medida Finance del cubo de ejemplo Adventure Works DW Multidimensional 2012, a un 10 % mayor para los elementos secundarios del miembro Redmond en la dimensión 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;  

Para obtener más información sobre la sintaxis de la función This , vea This (MDX).

Usar la instrucción SCOPE

La instrucción SCOPE define el subcubo actual que contiene otras expresiones e instrucciones MDX en el script MDX y especifica su ámbito. MDX evalúa estas otras expresiones e instrucciones MDX, incluida la función This y la instrucción CALCULATE, en el contexto del subcubo.

Las instrucciones SCOPE son dinámicas, pero no iterativas por naturaleza. Las instrucciones incluidas en una instrucción SCOPE se ejecutan una sola vez, pero el subcubo en sí puede determinarse dinámicamente. Por ejemplo, suponga que tiene un cubo denominado SampleCube. A continuación aplica la siguiente instrucción SCOPE al cubo SampleCube para definir un subcubo que defina a su vez el contexto como ALLMEMBERS en la dimensión Measures:

SCOPE([Measures].ALLMEMBERS);

THIS = [Measures].ALLMEMBERS.COUNT;

END SCOPE;

Las instrucciones y expresiones de esta instrucción SCOPE se ejecutan una vez.

A continuación, un usuario del negocio ejecuta la siguiente consulta MDX que incluye una medida, denominada ExistingMeasure, en el cubo SampleCube:

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

SELECT

[Measures].ALLMEMBERS ON COLUMNS,

[Customer].DEFAULTMEMBER ON ROWS

FROM

[SampleCube]

El conjunto de celdas que devuelve la consulta se parece al resultado que se muestra en la siguiente tabla.

[ExistingMeasure] [NewMeasure]
[Customer].[All] 2 2

Si examinamos el conjunto de celdas devuelto, veremos que el valor ExistingMeasure, incluido en la instrucción SCOPE del script MDX, se actualiza dinámicamente después de definir la medida NewMeasure.

Las instrucciones SCOPE pueden anidarse en otras instrucciones SCOPE. Sin embargo, dado que las instrucciones SCOPE no son iterativas, el objetivo principal de anidar este tipo de instrucciones radica en la posibilidad de subdividir todavía más un subcubo para tratamientos especiales.

Ejemplo de la instrucción SCOPE

En el siguiente ejemplo de script MDX se usa una instrucción SCOPE para establecer el valor de la medida Amount, en el grupo de medida Finance del cubo de ejemplo Adventure Works DW Multidimensional 2012, en un 10 % superior para los elementos secundarios del miembro Redmond en la dimensión Customer. No obstante, otra instrucción SCOPE cambia el subcubo de forma que incluya la medida Amount para los elementos secundarios del año 2002. Por último, la medida Amount se agrega solo a dicho subcubo, sin modificar los valores agregados de la medida Amount correspondientes a otros años.

/* 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;  

Para obtener más información sobre la sintaxis de la instrucción SCOPE, vea SCOPE Statement (MDX).

Consulte también

Referencia del lenguaje MDX (MDX)
Script MDX básico (MDX)
Aspectos básicos de las consultas MDX (Analysis Services)