BPC Script logic for Dummies, capítulo 4

script logic

¿Cómo puedo obtener el valor de la otra aplicación?
La respuesta simple es … ¡USE *LOOKUP / *ENDLOOKUP!

El ejemplo más simple es la conversión de moneda porque necesita leer el valor de la tasa de la aplicación de tasa para convertir

valores de moneda de la aplicación de finanzas.

 NOTA: *LOOKUP / *ENDLOOKUP también se puede usar para leer el valor de la aplicación actual.

Aquí está la sintaxis de *LOOKUP / *ENDLOOKUP 

La sintaxis es:

*LOOKUP {Application}
*DIM [{LookupID}:] {DimName} = «Value» | {CallingDimensionName} [. {Property}]
[*DIM …]
*ENDLOOKUP

{Application} es el nombre de la aplicación que recuperará el valor.

{DimensionName} es una dimensión en la aplicación de búsqueda.

{CallingDimensionName} es una dimensión en la aplicación actual.

{LookupID} es una variable opcional que contendrá el valor para que pueda usarlo en el script. Esto solo es necesario cuando se deben recuperar varios valores.

Ahora, hagámoslo paso a paso.

Aquí están nuestros requisitos para la conversión de moneda.
1. Debe obtener los valores de las tasas de la aplicación de tasas para la conversión de moneda (LC a USD y EUR).
2. La identificación de miembro de la dimensión RATE en la aplicación de tasa debe ser la misma que la propiedad RATETYPE de la dimensión de cuenta en la aplicación de finanzas.
3. La identificación de miembro de la dimensión RATEENTITY en la aplicación de tarifa debe ser «DEFAULT»
4. La regla de conversión de moneda es ‘DESTINATION CURRENCY / CURRENT CURRENCY’ 

Primero, debe definir * LOOKUP con el nombre de la aplicación.
*LOOKUP RATE

* ENDLOOKUP

 

En segundo lugar, especifique las dimensiones de la aplicación RATE con la declaración * DIM.
(Supongamos que la aplicación de tarifa tiene la dimensión RATEENTITY, INPUTCURRENCY, RATE, CATEGORY y TIME).

   *LOOKUP RATE
*DIM RATEENTITY 
     *DIM INPUTCURRENCY 
     *DIM RATE 
     *DIM CATEGORY 
     *DIM TIME
* ENDLOOKUP 

Tercero, asigne el valor de identificación de miembro de cada dimensión desde la aplicación actual (Finanzas) o use un valor fijo. Si necesita recuperar múltiples valores de acuerdo con diferentes valores de identificación de miembros de dimensiones específicas, haga copias de esa dimensión y asigne diferentes valores.

*LOOKUP RATE
*DIM RATEENTITY = «DEFAULT»       // Valor fijo
*DIM INPUTCURRENCY = «USD»        // Valor fijo
*DIM INPUTCURRENCY = «EUR»       // Valor fijo, copiar la misma dimensión para otro valor
*DIM INPUTCURRENCY = ENTITY.CURR // agregó uno más para la conversión de moneda como valor variable
*DIM RATE = ACCOUNT.RATETYPE      // Valor variable basado en la aplicación actual
*DIM CATEGORY
*DIM TIME
*ENDLOOKUP

Cuarto, coloque variables para múltiples valores de recuperación delante de cada nombre de dimensión duplicado.

   *LOOKUP RATE
*DIM RATEENTITY = «DEFAULT»
*DIM DESTCURR1: INPUTCURRENCY = «USD»
*DIM DESTCURR2: INPUTCURRENCY = «EUR»
*DIM SOURCECUR: INPUTCURRENCY = ENTITY.CURR
*DIM RATE = ACCOUNT.RATETYPE
*DIM TIME
* ENDLOOKUP

   Nota: Si desea obtener algún valor basado en dos o más dimensiones, debe usar el mismo nombre de variable cuando Dimensiones del mapa. Aquí hay un ejemplo.

         *LOOKUP OWNERSHIP
*DIM INTCO = «IC_NONE»
*DIM PARENT = «MYPARENT»

             *DIM PCON: ACCOUNTOWN = «PCON» // PCON se usa para ACCOUNTOWN
*DIM PCON: ENTITY = ENTITY // PCON se usa para ENTITY

             *DIM IC_PCON: ACCOUNTOWN = «PCON» // IC_PCON se usa aunque busque el mismo «PCON»
*DIM IC_PCON: ENTITY = INTCO.ENTITY // IC_PCON se usa para INTCO.ENTITY
*ENDLOOKUP

         Aunque la identificación del miembro de la dimensión ACCOUNTOWN es la misma, la variable debe definirse como una variable diferente porque la identificación del miembro de la dimensión ENTITY es diferente en la combinación. Si la propiedad ‘ENTITY’ de la dimensión INTCO tiene un valor I_FRANCE, arriba *LOOKUP seleccionará a continuación dos registros y cada variable tendrá un valor diferente.

             IC_NONE, MYPARENT, PCON, FRANCIA, 100 => PCON
IC_NONE, MYPARENT, PCON, I_FRANCE, 80 => IC_PCON

 

Por último, elimine los nombres de dimensión (TIME and CATEGORY>  que no tienen ningún valor fijo o valor variable porque se pasará como valor actual automáticamente. 

   *LOOKUP RATE
*DIM RATEENTITY = «DEFAULT»
*DIM SOURCECUR: INPUTCURRENCY = ENTITY.CURR
*DIM DESTCURR1: INPUTCURRENCY = «USD»
*DIM DESTCURR2: INPUTCURRENCY = «EUR»
*DIM RATE =  ACCOUNT
*ENDLOOKUP

Entonces, ¿cómo podemos usar estos valores? Puede usarlo usando LOOKUP (Variable) en su declaración * REC como se muestra a continuación

   * WHEN ACCOUNT.RATETYPE
*IS «AVG», «END»
*REC (FACTOR = LOOKUP (DESTCURR1) / LOOKUP (SOURCECURR), CURRENCY = «USD»)
*REC (FACTOR = LOOKUP (DESTCURR2) / LOOKUP (SOURCECURR) , MONEDA = «EUR»)
*ENDWHEN

   NOTA: Puede usar LOOKUP (variable) con la instrucción *WHEN y *IS

       Ej) *WEHN LOOKUP (PCON)           // como un valor de condición de cuando
*IS <= LOOKUP (IC_PCON)    // como un valor de IS
*REC (FACTOR = -1, PARENT = «MYPARENT», DATASRC = «ELIM» )
*ENDWHEN

Revisamos cómo definir la declaración *LOOKUP / *ENDLOOKUP y cómo usarla.

Ahora es el momento de descubrir cómo funciona en el motor de secuencias de comandos.

Supongamos que los siguientes registros están en la aplicación de velocidad y veamos qué sucederá durante la ejecución de la lógica del script.

RATEENTITY, INPUTCURRENCY, TASA, CATEGORÍA, HORA, DATOS FIRMADOS

DEFAULT, USD, AVG, ACTUAL, 2011.JAN, 1
DEFAULT, EUR, AVG, ACTUAL, 2011.JAN, 1.22
DEFAULT, CHF, AVG, ACTUAL, 2011.JAN, 0.91
DEFAULT, USD, END, ACTUAL, 2011.JAN , 1
POR DEFECTO, EUR, FIN, ACTUAL, 2011.JAN, 1.24
POR DEFECTO, CHF, FIN, ACTUAL, 2011.JAN, 0.93
RATCALC, USD, AVG, ACTUAL, 2011.JAN, 1
RATCALC, USD, AVG, ACTUAL, 2011 .JAN, 1

Aquí están sus registros actuales de solicitud de financiación que deben procesarse.

CUENTA, ENTIDAD, CATEGORÍA, TIEMPO, MONEDA,
INVENTARIO, SUIZA, ACTUAL, 2011.JAN, LC, 5000
INGRESOS, SUIZA, ACTUAL, 2011.JAN, LC, 1000

Como puede ver, no existe una relación entre la aplicación de finanzas y la aplicación de tasas. Sabemos que la moneda de Suiza es CHF, pero no hay información en cada registro de la tabla de hechos. Solo tiene valor LC (moneda local).

Entonces, ¿cómo puede la lógica del script encontrar el valor y calcularlo?

El punto clave es ‘ENTITY.CURR’, que lo usamos para asignar la dimensión como se muestra a continuación.

    *DIM SOURCECUR: INPUTCURRENCY = ENTITY.CURR

ENTITY.CURR significa el valor de propiedad ‘CURR’ de la dimensión ENTITY. Por lo tanto, Suiza, que es uno de los miembros de la dimensión Entidad, debe tener el valor ‘CHF’ en su propiedad ‘CURR’.

Lo mismo es para mapear la dimensión RATE de la aplicación de tasa como se muestra a continuación.
*DIM RATE = ACCOUNT.RATETYPE

Por lo tanto, el valor de la propiedad ‘RATETYPE’ de la cuenta INVENTORY and REVENUE debe tener el valor ‘AVG’ o ‘END’.

Por lo tanto, el motor de Script realizará los siguientes pasos para procesar el primer registro de la tabla de hechos.

1. Seleccione RATEENTITY = «DEFAULT»

2. Seleccione INPUTCURRENCY = «CHF» ( porque el valor actual de la propiedad ‘CURR’ del miembro de la entidad es ‘CHF’ )
O INPUTCURRENCY = «USD»
O INPUTCURRENCY = «EUR»

3. Seleccione RATE = «END» (porque el valor de la propiedad ‘RATETYPE’ del miembro de la cuenta corriente es ‘END’)

4. Seleccione CATEGORY = «ACTUAL» (No hay ninguna declaración, por lo que es el mismo que el valor de CATEGORY de la aplicación actual).

5. Seleccione TIME = «2011.JAN» (no hay ninguna declaración, por lo que es el mismo que el valor TIME de la aplicación actual).

Toda la selección anterior se combinará con la condición ‘AND’.

Por lo tanto, se seleccionarán los 3 registros a continuación y se asignará su valor de datos firmados a cada variable.

DEFAULT, USD, END, ACTUAL, 2011.JAN, 1 => DESTCURR1 será 1 
DEFAULT, EUR, END, ACTUAL, 2011.JAN, 1.24 => DESTCURR2 será 1.24 
DEFAULT, CHF, END, ACTUAL, 2011.JAN, 0.93 => SOURCECUR será 0.93

Después de que el motor de lógica de script ejecuta las siguientes declaraciones, generará 2 registros.

   * WHEN ACCOUNT.RATETYPE
*IS «AVG», «END»
* REC (FACTOR = LOOKUP (DESTCURR1) / LOOKUP (SOURCECURR), CURRENCY = «USD»)
* REC (FACTOR = LOOKUP (DESTCURR2) / LOOKUP (SOURCECURR) , MONEDA = «EUR»)
*ENDWHEN

CUENTA, ENTIDAD, CATEGORÍA, HORA, MONEDA,
INVENTARIO, SUIZA, ACTUAL, 2011.JAN, LC, 5000
INVENTARIO, SUIZA, ACTUAL, 2011.JAN, USD, 5376.34      // 5000 * (1 / 0.93)
INVENTARIO, SUIZA, ACTUAL, 2011.JAN, EUR, 6666.67      // 5000 * (1.24 / 0.93)

Para el segundo registro en la tabla de hechos, los 3 registros a continuación se seleccionarán de la tabla de hechos de la aplicación de tarifas porque

La cuenta de ingresos tiene «AVG» RATETYPE.

POR DEFECTO, USD, AVG, ACTUAL, 2011.JAN, 1
POR DEFECTO, EUR, AVG, ACTUAL, 2011.JAN, 1.22
POR DEFECTO, CHF, AVG, ACTUAL, 2011.JAN, 0.91

Después de que procese los registros de ‘INGRESOS’, habrá 6 registros en la tabla de hechos como se muestra a continuación.
(Se generarán 4 registros en total).

CUENTA, ENTIDAD, CATEGORÍA, HORA, MONEDA,
INVENTARIO DE DATOS FIRMADOS , SUIZA, ACTUAL, 2011.JAN, LC, 5000
INVENTARIO, SUIZA, ACTUAL, 2011.JAN, USD, 5376.34
INVENTARIO, SUIZA, ACTUAL, 2011.JAN, EUR, 6666.67
INGRESOS, SUIZA, ACTUAL, 2011.JAN, LC, 1000
INGRESOS, SUIZA, ACTUAL, 2011.JAN, USD, 1098.90      // 1000 * (1 / 0.91)
INGRESOS, SUIZA, ACTUAL, 2011.JAN, EUR, 1340.66      // 1000 * (1.22 / 0.91)

 Terminamos de aprender a usar la instrucción *LOOKUP / *ENDLOOKUP.

Aquí hay algunas preguntas y respuestas que recibí con frecuencia.

Pregunta 1: ¿Qué pasa si la aplicación de tasa no tiene el valor?
Entonces la conversión de moneda no sucederá.

Pregunta 2: No tengo ningún registro en la tabla de hechos de la aplicación actual. ¿Lo que sucederá?
La lógica del script siempre lee registros de la aplicación actual. Por lo tanto, si no hay registros en la tabla de hechos de la aplicación actual, no pasará nada.

Pregunta 3: ¿Podemos buscar el valor del miembro padre en lugar del miembro base (miembro hoja)?
La versión MS puede hacerlo con la instrucción * OLAPLOOKUP en lugar de * LOOKUP, pero la versión NW aún no lo tiene.

Fuente: https://blogs.sap.com/2011/08/12/bpc-script-logic-for-dummies-part-4/

BPC Script logic for Dummies, capitulo 1

BPC Script logic for Dummies, capitulo 2

BPC Script logic for Dummies, capítulo 3

BPC Script logic for Dummies, capítulo 5

 

 

4 comentarios

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.