Sie sind auf Seite 1von 56

Script Logic

Noviembre 2012

Qu es Script Logic?
Lenguaje de scripting que permite realizar clculos
a nivel de miembros base de dimensin.
Puede ser ejecutado:
De forma manual
De forma automtica, incluyendo el script en el
Default.lcg del modelo.
Despus de un Jornal de envo de datos usando
el Default.lcg o el Journal.lcg si lo hubiera.

Sintaxis: MDX
MDX solo deber ser utilizado solo cuando se utilicen
en miembros de dimensin que estn limitadas a
ratios o bien cuentas de anlisis donde la frmula
tenga que aplicarse a todos los niveles de las
dimensiones del cubo.
Ejemplos: Abs(<numericexpression>),
Ascendants(<member>), <level>.Members

Sintaxis: SQL
Se ejecuta directamente en la tabla de hechos
haciendo que la consulta se realice de forma ms
eficiente que MDX.

Scope / Entrada

Scope
El scope ser el conjunto de dimensiones y
miembros de las mismas SOBRE las que se
ejecutar el script.
En el caso de ejecutarlo manualmente el scope se
en las propiedades del script estableciendo las
dimensiones sobre las que se preguntar al
usuario.

Scope: ejecucin manual

Scope: ejecucin manual

Scope: ejecucin manual

Scope: automtico
En el caso de ser una ejecucin automtica (default
journal), el entorno vendr dado por la ejecucin:
los datos modificados y el contexto en el que se
ejecuta .

Scope: automtico

Scope en el script
Una vez en la ejecucin del script podemos limitar /
ampliar el scope mediante varias instrucciones:
*XDIM_MEMBERSET
*XDIM_ADDMEMBERSET
*XDIM_FILTER

Scope en el script: *XDIM_MEMBERSET


Esta instruccin sobreescribe el scope recibido
estableciendo sobre que miembros de una
dimensin se ejecuta el script

Scope en el script: *XDIM_MEMBERSET

Scope en el script: *XDIM_ADDMEMBERSET


Aade miembros a una determinada dimensin

Scope en el script: *XDIM_MEMBERSET

Scope en el script: *XDIM_FILTERMEMBERSET


Filtra el scope pudiendo determinar una propiedad
de una dimensin.

Scope en el script: *XDIM_MEMBERSET

Scope en el script: Scope ms complejos


Estas instrucciones son ampliables utilizndolos
conjuntamente con otras instrucciones permitiendo
reducir la granularidad o aplicar filtros ms
complejos.
Una de las ms potentes es *SELECT

Scope en el script: *SELECT


Select permite crear una lisa de miembros
estableciendo una serie de condiciones.
Permite establecer estos miembros como el Scope.

Scope en el script: *SELECT

Ejecucin

Ejecucin
Seleccionar qu se ejecutar sobre qu miembros y
de que forma se cambia el registro seleccionado:
*WHEN
*ELSE
*REC
EXPRESSION

FACTOR
*COMMIT
*FOR / *NEXT

Ejecucin: *WHEN *IF


Limita la actuacin sobre ciertos registros dentro del
scope segn alguna condicin
Sintaxis:
*WHEN {Dimensin}
*IS {Miembro},{Miembro}

*ENDWHEN

Ejecucin: *WHEN *IF

Ejecucin: *WHEN *IF

Ejecucin: *ELSE
Es un aadido a *WHEN *IS. Hace que en caso de
no cumplirse la condicin de la instruccin *WHEN
se ejecuten las instrucciones que aparecen en la
instruccin *ELSE
Sintaxis:
*IS {Miembro},{Miembro}

*ELSE

*ENDWHEN

Ejecucin: *ELSE

Ejecucin: *ELSE

Ejecucin: *REC
La instruccin *REC permite grabar el registro que
estamos tratando o bien crear uno nuevo
El registro tendr las propiedades dependiendo del
scope sobre el que se est ejecutando el script as
como las condiciones del *WHEN que lo anteponga.

Ejecucin: *ELSE

Ejecucin: *REC
Podemos modificar el registro que se est
escribiendo por ejemplo cambiando el miembro de
la dimensin en la que se escribe.
Sintaxis
*REC([FACTOR]/[EXPRESION], DIMENSION =
MIEMBRO,)

Ejecucin: *ELSE

Ejecucin: *REC(EXPRESSION=)
Con este parmetro establecemos la expresin
matemtica con la que modificaremos o crearemos
el registro.

Ejecucin: *REC(FACTOR=)
Si tan solo queremos aplicar un factor al valor del
registro obtenido podemos usar el parmetro
FACTOR.

Ejecucin: *FOR *NEXT


Esta instruccin permite recorrer un listado de
miembros.
Sintaxis
*FOR {lista de miembros}

*NEXT
Para establecer la lista de miembros lo podemos hacer
indicando esos miembros o mediante la instruccin
*SELECT

Ejecucin: *FOR *NEXT

Acceso a otros modelos /


aplicaciones

Acceso a otros modelos / aplicaciones


Instruccin de lectura:
*LOOKUP *ENDLOOKUP

Instruccin de escritura
*DESTINATION_APP

Acceso a otros modelos / aplicaciones: *LOOKUP


Esta instruccin permite acceder a registros que
estn fuera del scope actual e incluso a otra
aplicacin.

Acceso a otros modelos / aplicaciones: *LOOKUP

Acceso a otros modelos / aplicaciones: *DESTINATION_APP


Permite escribir los resultados de los clculos en
una aplicacin diferente.
La sintaxis es:
*DESTINATION_APP = {nombre aplicacin}
*SKIP_DIM= {nombre dimensin}[,{nombre dimensin},]
*ADD_DIM {nombre dimensin}={valor}[,{nombre
dimensin}={valor},]
*RENAME_DIM {nombre dimensin}={valor}[,{nombre
dimensin}={valor},]

Best Practices

Best Practices
Estas reglas muestran la forma de desarrollar script
logics intentando que su impacto sea el menor en el
tiempo de ejecucin.

Best Practices: acotar al mximo el disparo de clculos


Intentar que los clculos solo se ejecuten cuando
deben:
Supongamos que queremos obtener el precio de
coste de un producto. Tenemos que multiplicar las
unidades por el precio. Sin embargo debemos tener
en cuenta que por ejemplo ese producto se
vendiera solo a partir de este ao, aunque su precio
estaba establecido desde hace 10. En este caso
ser mas eficiente realizar el clculo sobre las
unidades.

Best Practices: acotar al mximo el disparo de clculos

Best Practices: Intentar no usar MDX


Usar MDX aporta peor rendimiento que SQL por lo
que solo se debe usar cuando la funcin sea
insustituible por otra de SQL.

Best Practices: Cargar solo los datos requeridos (SCOPE)


Intentar acotar el mximo el scope ya que la lgica
se ejecuta para cada registro cargado (aunque
realmente posteriormente no se utilice)

Best Practices: Mantener la estructura lgica compacta

*WHEN ACCOUNT
*IS A
*REC(ACCOUNT=X)
*ENDWHEN
*WHEN ACCOUNT
*IS B
*REC(ACCOUNT=X)
*ENDWHEN
*WHEN ACCOUNT
*IS C
*REC(ACCOUNT=Y)
*ENDWHEN
*WHEN ACCOUNT
*IS D
*REC(ACCOUNT=Y)
*ENDWHEN

*WHEN ACCOUNT
*IS A
*REC(ACCOUNT=X)
*IS B
*REC(ACCOUNT=X)
*IS C
*REC(ACCOUNT=Y)
*IS D
*REC(ACCOUNT=Y)
*ENDWHEN

*WHEN ACCOUNT
*IS A,B
*REC(ACCOUNT=X)
*IS C,D
*REC(ACCOUNT=Y)
*ENDWHEN

Best Practices: Minimizar el nmero de Commits


Minimizar el nmero de Commits.
Sin embargo a veces nos hace incumplir la norma
Cargar en memoria solo los datos requeridos.
Como regla general aporta ms minimizar el
nmero de commits que limitar el scope de entrada.

Best Practices: Minimizar el nmero de Commits.

Best Practices: Cantidad de clculos


Cuidar la cantidad de clculos que se deben hacer
en tiempo real. Sobre todo los script logic que se
ejecutan cuando se piden datos de BPC hacia
excel.
En este caso es mejor establecer que ese clculo
se ejecute de forma manual o de forma
programada.

Best Practices: Revisar ficheros de log


Estos ficheros informan de los registros que se han
consultado y los que se han escrito realmente. De
esta forma que observando estos logs podremos
optimizar el cdigo.

Best Practices: Disminuir actualizaciones / refrescos


Evitar refrescar despus de mandar a excel.
Contemplar realizar los clculos de formularios de
entrada mediante frmulas Excel. De esta forma
cada vez que se introduzca un valor desde Excel no
se tendr que ejecutar el script logic.

Best Practices: Test de Extres


Llevar a cabo Test de Extress probando los Script
Logic en un entorno semejante al utilizado en
produccin. Un script logic que puede parecer ligero
en desarrollo puede llegar a ser un cuello de botella
en el entorno real.

Fin

Das könnte Ihnen auch gefallen