Definir asignaciones con ámbito mediante comandos de script
En Analysis Services, los scripts de expresiones multidimensionales (MDX) se pueden aplicar a todo el cubo, o bien a secciones determinadas del mismo, en puntos específicos de la ejecución del script. Ya conoce algo sobre el comando de script predeterminado, la instrucción CALCULATE, que llena las celdas del cubo con datos agregados según el ámbito predeterminado.
El ámbito predeterminado es todo el cubo pero, tal como se dijo en el tema anterior, puede usar la instrucción SCOPE para definir un ámbito más limitado, conocido como subcubo y, a continuación, aplicar un script MDX sólo a dicho espacio determinado del cubo. La instrucción SCOPE define el ámbito de todas las instrucciones y expresiones MDX dentro del script de cálculo hasta que el ámbito actual finalice o vuelva a definirse. La instrucción THIS se utiliza entonces para aplicar una expresión MDX al ámbito actual. Puede utilizar la instrucción BACK_COLOR para especificar un color de celda de fondo para las celdas del ámbito actual que le ayude durante la depuración.
En las tareas de este tema, utilizará las instrucciones SCOPE y THIS para definir cuotas de venta para cada trimestre fiscal del año fiscal 2005. A continuación, podrá asignar cuotas de venta al nivel Mes de todos los años fiscales del cubo. También aprenderá a utilizar los puntos de interrupción para que le ayuden a depurar el script de cálculo.
Revisar las asignaciones de cuota de importe de venta por tiempo y empleado
Para revisar las asignaciones de cuota de importe de venta por tiempo y empleado
Abra el Diseñador de cubos para el cubo Analysis Services Tutorial y, a continuación, haga clic en la ficha Explorador.
Quite todas las jerarquías y medidas del panel Datos y quite todos los miembros de la dimensión del panel Filtro.
Agregue la medida Sales Amount Quota del grupo de medida Sales Quotas al área de datos del panel Datos.
Agregue la jerarquía definida por el usuario Fiscal Date de la dimensión Date al área de columna.
Agregue la jerarquía de atributo Employee Name de la dimensión Employee al área de fila.
Observe que no se han definido valores de cuota de venta para el año fiscal 2005.
En el área de columna, haga clic en el botón de flecha situado junto a Fiscal Year, desactive las casillas que aparecen al lado de FY 2002 y FY 2003 y, a continuación, haga clic en Aceptar.
En área de la columna, expanda FY 2004, H2 FY 2004 y, a continuación, expanda Q4 FY 2004.
Observe que la cuota de importe de venta para cada mes fiscal del trimestre fiscal es la misma que la cuota de importe de venta para el trimestre fiscal. Esto se debe a que la granularidad de la dimensión de tiempo del grupo de medida Sales Quota es el nivel de trimestre, tal como se abordó en la lección 5.
La siguiente imagen muestra la cuota de venta para cada empleado que tenga una cuota de venta para cada mes del cuarto trimestre del año fiscal 2004.
.gif)
Definir el ámbito para el cálculo de cuota de importe de venta (Sales Amount Quota) para el año fiscal 2005
En esta tarea, revisará el ámbito actual, lo modificará y, a continuación, definirá un cálculo que determine los valores de cuota de importe de venta para el año fiscal 2005 según los valores para el año fiscal 2004.
Para definir el ámbito para el cálculo de cuota de importe de venta (Sales Amount Quota) para el año fiscal 2005
Seleccione la ficha Cálculos y, a continuación, seleccione Vista de formulario en la barra de herramientas.
En el panel Organizador de scripts, seleccione Large Resellers y, a continuación, haga clic en el botón Nuevo comando de script en la barra de herramientas de la ficha Cálculos.
Observe que aparece un script vacío en el panel Expresiones de cálculo y que este comando de scripts aparece con un título en blanco del panel Organizador de scripts.
En el panel Expresiones de cálculo, escriba la siguiente instrucción:
/* Changing Scope to All or Default Member */ SCOPE (ROOT())Esta instrucción SCOPE cambia el ámbito del cubo al miembro All o predeterminado para todos los atributos del cubo.
Haga clic en Nuevo comando de scripts en la barra de herramientas de la ficha Cálculos y, a continuación, escriba la siguiente instrucción en el panel Expresiones de cálculo:
/* Defining the cube scope for the sales amount quotas for FY2005 */ SCOPE ()Observe que aparece una línea serpenteante roja debajo del paréntesis final para indicarle que tiene que definir un conjunto de miembros dentro del paréntesis para la instrucción SCOPE. A continuación, agregará la medida Sales Amount Quota a la instrucción SCOPE para incluir esta medida dentro del ámbito.
En la ficha Metadatos del panel Herramientas de cálculo, expanda Medidas, Sales Quotas y, a continuación, arrastre la medida Sales Amount Quota al paréntesis para la instrucción SCOPE en el panel Expresiones de cálculo.
Observe que la línea serpenteante roja desaparece. A continuación, agregará el miembro de dimensión FY 2005 a la instrucción SCOPE para agregar este miembro de dimensión de tiempo al ámbito actual.
En la ficha Metadatos del panel Herramientas de cálculo, expanda la dimensión Date, expanda Fiscal, Fiscal Date, Fiscal Year y, a continuación, arrastre FY 2005 a la instrucción SCOPE en el panel Expresiones de cálculo inmediatamente después del miembro [Sales Amount Quota] del conjunto que esté definiendo.
Observe la línea serpenteante roja debajo de la parte [Date] de este nuevo miembro del conjunto. Esta línea le informa de que existe un error de sintaxis inmediatamente anterior a este miembro de dimensión, porque es necesaria una coma entre cada miembro del conjunto dentro de la instrucción SCOPE.
Agregue la coma necesaria antes de la parte [Date] del miembro FY 2005 de la dimensión Date.
Observe que la línea serpenteante roja inicial desaparece. A continuación, agregará los miembros de la jerarquía definida por el usuario Employees de la dimensión Employee a la instrucción SCOPE para agregar estos miembros al ámbito actual.
En la ficha Metadatos del panel Herramientas de cálculo, expanda la dimensión Employee y, a continuación, arrastre la jerarquía definida por el usuario Employees a la instrucción SCOPE del panel Expresiones de cálculo inmediatamente después del miembro [Date].[Fiscal Date].[Fiscal Year].&[2005] del conjunto que está definiendo.
Observe la línea serpenteante roja situada debajo de la parte [Employee] de este nuevo miembro del conjunto, para indicar que se necesita una coma entre cada miembro del conjunto dentro de la instrucción SCOPE.
Agregue la coma necesaria antes de la parte [Employee] del nuevo miembro.
Observe que la línea serpenteante ha desaparecido.
Al final del miembro [Employee].[Employees] de este conjunto de la instrucción SCOPE, agregue la siguiente cláusula para completar la definición de este tercer miembro del conjunto:
.MembersEsta cláusula especifica que todos los miembros de la jerarquía Employees de la dimensión Employee deberían incluirse en el ámbito del cubo actual.
Compruebe que la instrucción SCOPE completa coincide con el siguiente script:
SCOPE ([Measures].[Sales Amount Quota],[Date].[Fiscal Date].[Fiscal Year].&[2005], [Employee].[Employees].Members)Acaba de finalizar la definición de ámbito que define el subcubo al que aplicará una expresión MDX para calcular el importe de cuota de ventas para el año fiscal 2005.
En la barra de herramientas de la ficha Cálculos, haga clic en Vista de script y revise los comandos de script recientemente agregados.
Observe que cada comando de script aparece tal como lo escribió en el panel Expresiones de cálculo pero con un punto y coma agregado al final de cada uno de ellos. Observe también que Analysis Services ha insertado un comentario delante de cada comando de script para ayudar a entender cada comando por separado.
Definir y probar el nuevo cálculo de cuota de ventas para el año fiscal 2005
En esta tarea, agregará un nuevo comando de script de cálculo que calcula el importe de cuota de venta para el año fiscal 2005 de todos los miembros de la dimensión Employee. Sin embargo, en lugar de agregar el comando de script a la vista Formulario, agregará el comando de script directamente a la vista Script. En la vista Script, asegúrese de agregar un punto y coma entre cada comando de script.
Para definir y probar el nuevo cálculo de cuota de venta para el año fiscal 2005
En la vista Script, escriba las siguientes instrucciones en una nueva línea al final del script de cálculo:
/* Applying a calculation to the subcube */ THIS = [Date].[Fiscal Date].[Fiscal Year].&[2004] * 1.25;La instrucción THIS asigna un nuevo valor a la medida Sales Amount Quota en la intersección del miembro Employee y el miembro FY 2005 del subcubo. El nuevo valor se basa en el valor que existe para la intersección del miembro Employee y la medida Sales Amount Quota del año fiscal 2004 multiplicado por 1,25.
En el panel Expresiones de cálculo, haga clic en el margen situado a la izquierda de la instrucción THIS para establecer un punto de interrupción.
Observe que aparece un punto rojo en ese margen y que la instrucción se resalta en rojo. Al ejecutar este proyecto en modo de depuración, los cambios en el proyecto aparecerán en la instancia de Analysis Services, se procesará el cubo y el script de cálculo se ejecutará hasta que se encuentre el punto de interrupción. A continuación, puede completar los scripts restantes una a una. Si no establece un punto de interrupción y ejecuta el proyecto en modo de depuración, el script de cálculo se interrumpirá en la instrucción del primer script, la instrucción CALCULATE.
En el menú Depurar, haga clic en Iniciar depuración. O bien,presione F5 en el teclado.
El proyecto se implementa y procesa, y el script de cálculo se ejecuta hasta que se encuentra el punto de interrupción.
Oculte todas las ventanas acopladas para proporcionar un área mayor para ver el panel Tabla dinámica que aparece al final de la ficha Cálculos.
El panel Tabla dinámica le ayudará durante la depuración.
En el panel Tabla dinámica, agregue la medida Sales Amount Quota al área de datos, agregue la jerarquía definida por el usuario Fiscal Date al área de columna y, a continuación, agregue la jerarquía de atributo Employee Name de la dimensión Employee al área de fila. Desplácese hasta el final de la tabla dinámica y revise los empleados que tengan asignadas cuotas de venta.
Observe que el miembro FY 2005 del nivel Fiscal Year para la medida Sales Amount Quota de cada empleado no contiene ningún valor en el área de datos para la medida Sales Amount Quota. De manera predeterminada, las celdas vacías aparecen en el panel Tabla dinámica cuando está en modo de depuración.
Pulse F10 para ejecutar la instrucción THIS y calcular la cuota de venta para el año fiscal 2005.
Observe que ahora se han calculado las celdas del panel Tabla dinámica en la intersección de la medida Sales Amount Quota, el miembro de dimensión FY 2005 y el miembro Employee Name. Observe también que las celdas afectadas por la instrucción THIS están resaltadas en amarillo. Existe un icono en la barra de herramientas para habilitar o deshabilitar el resaltado de las celdas modificadas. De forma predeterminada, las celdas modificadas se resaltan.
En el panel Tabla dinámica, desactive las casillas para quitar FY 2002, FY 2003 y FY 2004 del área de columna.
Haga clic con el botón secundario en cualquier parte del área de datos y, a continuación, haga clic en Mostrar celdas vacías para quitar la marca de verificación situada junto a esta opción y ocultar todas las celdas vacías (esta opción también está disponible en la barra de herramientas de la ficha Cálculos). Esto hará más fácil ver a todos los empleados que tengan valores de cuota de importe de venta.
En el panel Tabla dinámica, intente expandir FY 2005 en el área de columna.
Observe que no puede expandir FY 2005 porque los valores para el miembro H1 FY 2005 en la intersección de la medida Sales Amount Quota y la jerarquía de atributo Employee Name no se han calculado (porque estaban fuera del ámbito actual).
Para ver las celdas vacías de los valores para miembros H1 FY 2005, haga clic en cualquier parte del panel Tabla dinámica y, a continuación, haga clic en Mostrar celdas vacías en la barra de herramientas de la ficha Cálculos para mostrar todas las celdas vacías.
En el menú Depurar, haga clic en Detener depuración o pulse Mayús-F5 en el teclado.
Quite el punto de interrupción del script de cálculo; para ello, haga clic en el punto rojo del margen izquierdo.
Asignar cuotas de importe de venta a los semestres y trimestres del año fiscal 2005
En este procedimiento, se modifica el ámbito para incluir los miembros de semestre fiscal de Fiscal Year 2005 en lugar del miembro Fiscal Year 2005, y se asigna posteriormente la mitad del valor de la cuota de importe de venta para el año fiscal 2005 (Fiscal Year 2005) a cada semestre del año fiscal 2005 (Fiscal Year 2005). A continuación, modificará el ámbito para incluir los miembros de trimestre fiscal de Fiscal Year 2005 en lugar del miembro Fiscal Year 2005 y asignará una cuarta parte del valor de cuota de importe de venta para el año fiscal 2005 (Fiscal Year 2005) a cada trimestre del año fiscal 2005 (Fiscal Year 2005). Para completar la tarea, probará estas asignaciones.
Para asignar cuotas de importe de venta a los semestres y trimestres del año fiscal 2005
En la vista Script del panel Expresiones de cálculo, escriba la siguiente instrucción en una nueva línea al final del script de cálculo:
/* Allocation of Sales Amount Quota to the 2005 Fiscal Semesters */ SCOPE ( [Date].[Fiscal Semester].[Fiscal Semester].Members );Esta instrucción SCOPE es una instrucción SCOPE anidada porque no aparece ninguna instrucción END SCOPE entre esta instrucción SCOPE y la instrucción SCOPE anterior. Cuando una instrucción SCOPE está anidada, la instrucción SCOPE anidada hereda el ámbito primario para aquellos atributos cuyo ámbito no se haya vuelto a definir. La instrucción SCOPE anterior no modifica directamente la medida Sales Amount Quota, la jerarquía definida por el usuario Employees ni la jerarquía definida por el usuario Fiscal Date. En su lugar, agrega cada miembro de la jerarquía de atributo Fiscal Semester a la definición del subcubo mediante la función Members. Para obtener más información, vea Members (Set) (MDX). Como resultado de la instrucción SCOPE anidada, el espacio del cubo incluye ahora a todos los miembros que estén en la intersección del miembro Employee y la medida Sales Amount Quota de cualquier semestre fiscal de Fiscal Year 2005. Observe que actualmente sólo hay un semestre fiscal en Fiscal Year 2005 en el cubo.
En el panel Expresiones de cálculo, escriba la siguiente instrucción en una nueva línea al final del script de cálculo:
THIS = [Date].[Fiscal Date].CurrentMember.Parent / 2;Esta instrucción asigna a cada semestre fiscal en el espacio del cubo definido el valor calculado para el trimestre fiscal. La función CurrentMember.Parent se utiliza para asignar a cada miembro la mitad del valor de su primario. Para obtener más información, vea CurrentMember (MDX) y Parent (MDX).
En el panel Expresiones de cálculo, escriba la siguiente instrucción en una nueva línea al final del script de cálculo:
/* Allocation of Sales Amount Quota to the 2005 Fiscal Quarters */ SCOPE ( [Date].[Fiscal Quarter].[Fiscal Quarter].Members );Esta instrucción SCOPE también es una instrucción SCOPE anidada porque no aparece ninguna instrucción END SCOPE entre esta instrucción SCOPE y la instrucción SCOPE anterior. La instrucción SCOPE anterior no modifica directamente la medida Sales Amount Quota, la jerarquía definida por el usuario Employees ni la jerarquía definida por el usuario Fiscal Date. En su lugar, agrega cada miembro de la jerarquía de atributo Fiscal Quarter a la definición del subcubo mediante la función Members. Como resultado, el espacio del cubo incluye ahora a todos los miembros que estén en la intersección del miembro Employee y la medida Sales Amount Quota de cualquier trimestre fiscal del año fiscal 2005. Observe que actualmente sólo hay un trimestre fiscal en Fiscal Year 2005 en el cubo.
En el panel Expresiones de cálculo, escriba la siguiente instrucción en una nueva línea al final del script de cálculo:
THIS = [Date].[Fiscal Date].CurrentMember.Parent / 2;Esta instrucción asigna a cada trimestre fiscal en el espacio del cubo definido el valor calculado para el trimestre fiscal. La función CurrentMember.Parent se utiliza para asignar a cada miembro la mitad del valor de su primario.
En el panel Expresiones de cálculo, haga clic en el margen situado junto a la instrucción SCOPE para establecer un punto de interrupción y, a continuación, pulse F5 en el teclado.
El script de cálculo se ejecuta hasta que se encuentra el punto de interrupción.
Haga clic en cualquier parte del área de datos del panel Tabla dinámica y, a continuación, en Mostrar celdas vacías en la barra de herramientas de la ficha Cálculos para ocultar las celdas vacías.
Observe que el panel de datos se llena con las mismas medidas y jerarquías que utilizaba el depurador en el último paso a través, y que se ha calculado el valor para el miembro H1 FY 2005, la mitad del valor de su primario, como aparece en la siguiente imagen.
Por último, observe que el valor para cada miembro de FY 2005 se vuelve a calcular en la agregación de sus miembros, que en este caso es el primer semestre fiscal del año fiscal. El valor del miembro Fiscal Year 2005 se ve afectado por el cálculo del miembro Fiscal Semester 2005 porque cada script se ejecuta como paso independiente. Para fijar un valor existente de modo que no se vea afectado por las instrucciones posteriores en el script de cálculo, utilice la instrucción FREEZE. Para obtener más información, vea Instrucción FREEZE (MDX).
.gif)
En el área de columna, expanda H1 FY 2005.
Observe que el valor para el miembro Q1 FY 2005 todavía no se ha calculado.
Haga clic en cualquier parte del área de datos del panel Tabla dinámica y, a continuación, en Mostrar celdas vacías en la barra de herramientas de la ficha Cálculos.
En el área de columna, expanda Q1 FY 2005.
Observe que no hay ningún valor asignado a los dos meses del primer trimestre del año fiscal 2005 (Fiscal Year 2005) porque estos miembros ya no están en el ámbito del subcubo actual (hasta que se ejecuten las dos instrucciones finales del script). La dimensión de tiempo del cubo Analysis Services Tutorial sólo contiene los dos primeros meses de Fiscal Year 2005. En consecuencia, no existe ningún miembro Q2 FY 2005.
Pulse F10 para ejecutar la instrucción SCOPE y, a continuación, presione F10 de nuevo para ejecutar la instrucción final en el script de cálculo, que aplica el cálculo al subcubo actual.
Observe que se calcula el valor para el miembro Q1 FY 2005, y que se vuelve a calcular el valor de H1 FY 2005 y los valores de miembro FY2005 (como la agregación de sus miembros secundarios), como se indica en la siguiente imagen. Observe también que no se calcula el valor para cada mes fiscal del año fiscal 2005 (julio y agosto de 2005). En el siguiente procedimiento, asignará los valores adecuados a cada trimestre.
.gif)
En el menú Depuración, haga clic en Detener depuración o presione Mayús-F5 en el teclado.
Quite el punto de interrupción del script de cálculo.
Asignar cuotas de venta a meses
En este procedimiento, modificará el ámbito para incluir el nivel del mes fiscal en todos los años fiscales (las instrucciones del ámbito anterior limitaban los cálculos al año fiscal 2005 únicamente). A continuación, asignará una tercera parte del valor del trimestre fiscal para la cuota de venta de cada empleado a cada mes fiscal.
Para asignar cuotas de venta a meses
En el panel Expresiones de cálculo, agregue las siguiente instrucciones en una nueva línea al final del script de cálculo:
/* Allocate Quotas to Months */ SCOPE ( [Date].[Fiscal Date].[Month Name].Members );Esta instrucción SCOPE es otra instrucción de ámbito anidada que modifica el espacio del cubo en el que se aplicará una expresión MDX para asignar las cuotas de venta a cada mes fiscal según el valor de cada trimestre fiscal. Esta instrucción SCOPE es parecida a la instrucción SCOPE anidada anterior, pero observe que el ámbito de la jerarquía definida por el usuario Fiscal Date se vuelve a definir. Por lo tanto, los miembros del espacio del cubo incluirán ahora todos los miembros Fiscal Month de la dimensión Date en lugar de únicamente los miembros Fiscal Month de Fiscal Year 2005.
[!NOTA]
Compare esta modificación del ámbito del cubo con la modificación del ámbito del cubo del procedimiento anterior para asegurarse de entender la diferencia entre las dos instrucciones de cambio de ámbito.
En el panel Expresiones de cálculo, agregue las siguiente instrucciones en una nueva línea al final del script de cálculo:
THIS = [Date].[Fiscal Date].CurrentMember.Parent / 3;Esta instrucción asigna a cada miembro Month de la jerarquía Fiscal Date una tercera parte del valor de su primario (nivel de trimestre). Este cálculo se aplicará a todos los meses fiscales del cubo.
En el panel Expresiones de cálculo, haga clic en el margen situado a la izquierda de la instrucción THIS final para establecer un punto de interrupción y, a continuación, pulse F5 en el teclado.
Revise los valores para julio de 2004 y agosto de 2004.
Observe que actualmente no se ha calculado ningún valor para julio de 2004 ni para agosto de 2004.
Haga clic con el botón secundario en el panel Datos y, a continuación, haga clic en Mostrar celdas vacías para mostrar sólo las celdas que tienen valores.
De esta forma podrá ver más fácilmente cómo se aplica la instrucción final en el script de cálculo.
Presione F10 para ejecutar la instrucción final.
Observe que el valor Sales Amount Quota para cada empleado de cada mes fiscal se calcula en un valor que es igual a una tercera parte de su valor primario.
En el área de columna, quite FY 2005 y, a continuación, agregue Q4 FY 2004.
Expanda FY 2004, expanda H2 FY 2004 y, a continuación, Q4 FY 2004.
Observe que el valor para cada mes fiscal es igual que el valor total para el trimestre fiscal.
En el menú Depurar, haga clic en Detener depuración.
Quite el punto de interrupción del script de cálculo.
En la barra de herramientas, haga clic en Guardar todo.