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