BPC Script logic for Dummies, capítulo 3

script logic

 Concepto básico de escritura y declaración *REC

Como vimos en mi primera publicación, la declaración *REC se usa para escribir datos.
Debe tener en cuenta que *REC creará registros basados ​​en los registros del ámbito.

Por ejemplo, si su registro de ámbito es el mismo que el siguiente.

<Registro de alcance>

EXTSALES, 2011.JAN, ACTUAL, USA, 10000

y su declaración de *REC está abajo.


*REC
(FACTOR = 0.9, ACCOUNT = «DISCOUNTED_EXTSALES», CATEGORY = «BUDGET»)

Entonces su registro generado será

<Registro generado> 
DISCOUNTED_EXTSALES, 2011.JAN, BUDGET, USA, 9000

¿Qué sucede si su registro de ámbito no es uno solo, sino un registro múltiple?

<Registro de alcance >

EXTSALES, 2011.JAN, ACTUAL, EE. UU, 10000 
EXTSALES, 2011.JAN, ACTUAL, COREA, 3000 
EXTSALES, 2011.JAN, ACTUAL, CANADÁ, 5000

Entonces tus registros generados serán

<Registro generado> 
DISCOUNTED_EXTSALES, 2011.JAN, BUDGET, EE. UU, 9000 
DISCOUNTED_EXTSALES, 2011.JAN, BUDGET, KOREA, 2700 
DISCOUNTED_EXTSALES, 2011.JAN, BUDGET, CANADA, 4500

 Como puede ver, cambiamos el valor de la cuenta, el valor de la categoría y el valor de los datos con signo (o el valor de medición) mediante la instrucción *REC; la otra dimensión que no se especifica en la declaración *REC será la misma que la de los datos de alcance, por lo que 2011.JAN y cada país (entidad) no se cambiarán.

Gramática de la instrucción *REC.

 Aquí está la gramática de la instrucción *REC. Puede usar FACTOR o EXPRESIÓN para varios cálculos para el valor de datos con signo (o valor de medición).  Y especifique el nombre de la dimensión y el miembro para cambiar su valor. 

   *REC ([FACTOR | EXPRESSION] = {Expresión} [, {dim1} = {miembro}, {dim2} =?)

¿Cuál es la diferencia entre FACTOR y EXPRESIÓN?

El FACTOR es un factor (multiplicación) por el cual la cantidad recuperada se multiplica. Aquí hay un ejemplo:

<Registro de alcance >

EXTSALES, 2011.JAN, ACTUAL, 10000

*REC (FACTOR = 6/2)

<Registro generado>

EXTSALES, 2011.JAN, ACTUAL, 30000

¿Qué pasa si quieres sumar o dividir? entonces deberías utilizar la expresión. La EXPRESIÓN es cualquier fórmula que dará como resultado el nuevo valor a publicar. La fórmula puede incluir operadores aritméticos regulares, valores fijos y la palabra clave de lógica de secuencia de comandos % VALOR%, esto representa el valor recuperado original del registro de ámbito. Aquí hay un ejemplo:

<Registro de alcance >

EXTSALES, 2011.JAN, ACTUAL, 10000

*REC (EXPRESIÓN =% VALOR% + 5000)

<Registro generado>
EXTSALES, 2011.JAN, ACTUAL, 15000

Ahora tenemos las cosas básicas de la declaración * REC, pero puede hacer las siguientes preguntas

«Hay algunos con ámbito de datos y que necesitan hacer cálculos diferentes en función de cada miembro de la dimensión específica.»
«Necesito copiar un valor a múltiples destinos»
«¿Cómo puedo obtener el valor de la otra aplicación?»
«Quiero use algún valor de otros registros para calcular el resultado «
«¿Puedo usar un valor de propiedad para calcular el resultado? «

«La lógica del script puede manejar los requisitos anteriores»


Explicaré la primera pregunta en esta publicación y haré otras en la próxima publicación.

«Hay algunos datos de alcance y necesito hacer algunos cálculos basados ​​en cada miembro de dimensión específico».
Sí. Es por eso que DEBES usar la instrucción *REC con * WHEN ~ * IS ~ * ELSE ~ * ENDWHEN.

Supongamos que desea crear valores de previsión de salario y colocarlos en la categoría de previsión en función de los valores salariales reales del país de enero de 2011.

Necesitamos aumentar el 10% para EEUU, El 5% para Canadá y el 3% para otros países. Asumamos que la dimensión ENTITY tiene información de país. Para hacer esto, es necesario que el alcance primero:

*XDIM_MEMBERSET ACCT = SALARIO

*XDIM_MEMBERSET TIME = 2011.JAN
* XDIM_MEMBERSET CATEGORY = ACTUAL


Ahora necesitas escribir las sentencias * REC

   * REC (FACTOR = 1.1, CATEGORY = «PRONÓSTICO») // 10%
* REC (FACTOR = 1.05, CATEGORY = «PRONÓSTICO») // 5%
* REC (FACTOR = 1.03, CATEGORY = «PRONÓSTICO») // 3 %

Finalmente, debe especificar una condición de cada instrucción *REC. Para hacer esto, DEBE usar la instrucción * WHEN ~ * IS ~ * ELSE ~ ENDWHEN.

Primero, escriba *WHEN y *ENDWHEN fuera de la sentencia *REC

     *WHEN
* REC (FACTOR = 1.1, CATEGORÍA = «PRONÓSTICO») // 10%
* REC (FACTOR = 1.05, CATEGORÍA = «PRONÓSTICO») // 5%
* REC (FACTOR = 1.03, CATEGORÍA = «PRONÓSTICO») / / 3%

     *ENDWHEN

       NOTA: no es necesario utilizar la sangría del código en la lógica del script, pero me gustaría recomendar su uso para una mejor legibilidad.

Segundo, escriba un nombre de dimensión que desee comparar junto a *WHEN.
En este ejemplo, será dimensión ENTIDAD.

      *WHEN ENTITY
* REC (FACTOR = 1.1, CATEGORÍA = «PRONÓSTICO») // 10%
* REC (FACTOR = 1.05, CATEGORÍA = «PRONÓSTICO») // 5%
* REC (FACTOR = 1.03, CATEGORÍA = «PRONÓSTICO») // 3%

     *ENDWHEN

Tercero, coloque la instrucción *IS encima de cada instrucción *REC y la instrucción *ELSE sobre la última instrucción *REC. Necesitamos dos sentencias *IS y   *ELSE porque hay dos condiciones y otras se calcularán como una condición.

      *WHEN ENTITY
*IS
*REC (FACTOR = 1.1, CATEGORÍA = «PRONÓSTICO») // 10%
  *IS
* REC (FACTOR = 1.05, CATEGORÍA = «PRONÓSTICO») // 5%

            *ELSE
* REC (FACTOR = 1.03, CATEGORY = «PRONÓSTICO») // 3%
*ENDWHEN

Cuarto, ponga cada valor de condición al lado de *IS


*WHEN ENTITY
*IS EEUU
*REC (FACTOR = 1.1, CATEGORÍA = «PRONÓSTICO») // 10%
*IS CANADA
*REC (FACTOR = 1.05, CATEGORÍA = «PRONÓSTICO») // 5%
*ELSE 
                  *REC (FACTOR = 1.03, CATEGORÍA = «PRONÓSTICO») // 3%

      *ENDWHEN

Cuarto, ponga *COMMIT al final del script para que el motor lógico pueda publicar datos en la base de datos.

así que la versión final debería ser la misma que la del código siguiente.

*XDIM_MEMBERSET ACCT = SALARIO

*XDIM_MEMBERSET TIME = 2011.JAN
*XDIM_MEMBERSET CATEGORY = ACTUAL

      *WHEN ENTITY
*IS EEUU
*REC (FACTOR = 1.1, CATEGORÍA = «PRONÓSTICO») // 10%
*IS CANADA
*REC (FACTOR = 1.05, CATEGORÍA = «PRONÓSTICO») // 5%
*ELSE 
*REC (FACTOR = 1.03, CATEGORY = «PRONÓSTICO») // 3%
*ENDWHEN 
*COMMIT

Nota 1: Puede usar un valor de condición múltiple como *IS VALUE_A, VALUE_B
Nota 2: Puede usar>, <= con valor numérico con la instrucción *IS, ejemplo *IS > 4; por defecto es igual (=), por lo que estará bien, aunque no lo especifique.
Nota 3: no se puede usar AND, OR y NOT con *IS 
Nota 4: (doble comilla) no es obligatorio para comparar el valor de cadena con la instrucción *IS. 
Nota 5: * La instrucción WHEN se puede anidar. Por ejemplo,

               *WHEN xxx
*IS «A»
*REC (…)
*REC (…)
*IS «B»
*REC (…)
*WHEN yyy
*IS «C», «D», «E»
*REC (…)
*ELSE
*REC (…)
*ENDWHEN 
*ENDWHEN

Nota 6: Puede usar el valor de una propiedad con la declaración *IS. Ejemplo: *IS Intco.Entity

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

BPC Script logic for Dummies, capitulo 2

BPC Script logic for Dummies, capitulo 1

BPC Script logic for Dummies, capítulo 4

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 )

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.