Administrar el ámbito y el contexto (MDX)
En Microsoft SQL Server Analysis Services, los scripts de expresiones multidimensionales (MDX) se pueden aplicar a todo el cubo o bien, a fragmentos determinados del mismo, en puntos específicos de la ejecución del script. Las secuencias de comandos MDX pueden 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 acerca del impacto que tienen los pasos de cálculo en los cálculos, vea Descripción de orden de paso y orden de resolución (MDX).
Para controlar el paso de cálculo, el ámbito y el contexto de una secuencia de comandos 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, la secuencia de comandos MDX predeterminada tiene una única instrucción CALCULATE al principio de la secuencia de comandos.
Para obtener más información acerca de la sintaxis de la instrucción CALCULATE, vea Instrucción CALCULATE (MDX).
Nota
Si la secuencia de comandos 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 una secuencia de comandos 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 la secuencia de comandos 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 una secuencia de comandos MDX, se utiliza la función This para aumentar el valor de la medida Amount (en el grupo de medida Finance del cubo de ejemplo de Adventure Works DW) en un 10% para los elementos secundarios del miembro Redmond de 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 acerca de 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 la secuencia de comandos 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 de la secuencia de comandos 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 del comando de secuencia de comandos MDX se utiliza la instrucción SCOPE para aumentar el valor de la medida Amount (en el grupo de medida Finance del cubo de ejemplo de Adventure Works DW) en un 10% para los elementos secundarios del miembro Redmond de 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 acerca de la sintaxis de la instrucción SCOPE, vea Instrucción SCOPE (MDX).
Vea también