Mejores prácticas para diseñar reglas de negocio

Las reglas escritas de forma incorrecta tienen un efecto importante en todos los aspectos de una aplicación. A continuación se detallan algunas prácticas recomendadas para diseñar las reglas de negocio. Con las siguientes recomendaciones de mejores prácticas se pueden obtener importantes mejoras en el rendimiento.

Siga estas directrices clave de diseño para las reglas de negocio.

10 mejores prácticas principales para las reglas

Siga estas recomendaciones de mejores prácticas al diseñar las reglas de negocio. Estas directrices pueden generar una importante mejora del rendimiento, ya que las reglas escritas de forma incorrecta tienen un efecto importante en todos los aspectos de una aplicación.

  1. Siga estas directrices para los comandos SET:

    • Al principio de la regla, no utilice SET CREATEBLOCKONEQ ON ni SET CREATENONMISSINGBLK ON.
    • No utilice comandos administrativos como este en las reglas de usuarios finales, ya que en ellos es necesario realizar una reestructuración.
      SET CLEARBLOCK
                        EMPTY 
    • Evite o pruebe las reglas con SET CALCTASKDIMS. (Oracle Essbase suele llevar a cabo esto de forma automática.)
    • La regla Copia de datos debe incluir lo siguiente para evitar que se copien bloques vacíos en la sentencia FIX.
      SET COPYMISSINGBLOCK
                        OFF 
  2. Para crear bloques se debe utilizar la asignación de miembros ligeros o Datacopy. Las funciones @createblockoneq y @createblock se deben usar como último recurso en una sentencia FIX limitada.

  3. Evite referencias a miembros que falten en una sentencia Fix (por ejemplo, en la regla Copia de datos). De esta forma se puede desperdiciar tiempo de procesamiento y aumentar la contención, además de crear bloques innecesarios para todos los niveles de las dimensiones que faltan.

  4. Elimine el cálculo paralelo en las reglas de negocio asociadas a los formularios. Solo se debe utilizar Calc Parallel o Fix Parallel con reglas administrativas o de lotes.

  5. No cree ceros innecesarios, ya que esto provoca una explosión de bloque y datos. Revise con atención la lógica de negocio y agregue las condiciones If necesarias para buscar los ceros. Convierta los ceros en valores #missing.

  6. Elimine varias pasadas en los mismos bloques; en lugar de esto, defina un fix externo adecuado y realice las entradas y salidas necesarias. Combine sentencias If en lugar de utilizar y reutilizar If en las mismas intersecciones.

  7. Evite utilizar referencias entre dimensiones en la parte izquierda de una ecuación. Esto afecta al rendimiento.

  8. Agregue las dimensiones en el orden de creación desde aquellas con más bloques a aquellas otras con menos bloques en el script, por ejemplo, Agg (1ª dimensión con más bloques, 2ª dimensión con más bloques, 3ª dimensión con más bloques). Agg es un método más rápido que Calc Dim y es el mecanismo preferido para la agregación. La agregación con @ancestors en reglas de usuarios finales hasta el principio de la dimensión puede generar contención de bloques.

  9. Utilice peticiones de datos en tiempo de ejecución en lugar de crear varias reglas con la misma lógica subyacente. Más reglas equivale a más mantenimiento.

  10. Utilice plantillas para desglosar y reutilizar la lógica de negocio. Sin embargo, las plantillas no deberían ser reglas que funcionan perfectamente con Fix y EndFix. Una regla en la que se combinen varias plantillas debe tener un Fix externo adecuado y realizar entradas y salidas de partes más pequeñas según sea necesario.

Adición de lógica de negocio mediante cálculos

Para incorporar su lógica de negocio en la aplicación, puede crear cálculos mediante Calculation Manager. Esto permite crear, validar, desplegar y administrar cálculos sofisticados que solucionan problemas empresariales.

Las reglas de negocio y los conjuntos de reglas suelen crearse para lo siguiente:

  • Realizar modelos de ingresos

  • Realizar modelos de gastos

  • Calcular KPI

  • Realizar asignaciones

Calculation Manager incluye los objetos siguientes:

  • Reglas: contienen componentes y plantillas

  • Componentes: ayudan a crear reglas

  • Conjuntos de reglas: contienen reglas que se pueden calcular de forma simultánea o secuencial

  • Plantillas: incluya plantillas del sistema que realicen cálculos, así como plantillas personalizadas que puedan diseñar los administradores.

  • Componentes: ayudan a crear reglas.

Para obtener más información sobre la creación de cálculos, consulte las directrices de Diseño con Calculation Manager para Oracle Enterprise Performance Management Cloud.

Creación de agregaciones

Las agregaciones acumulan la aplicación en miembros de nivel de resumen de la dimensión, como Entidad o cualquier otra dimensión ligera.

Calculation Manager incluye plantillas que le ayudan a crear agregaciones. A continuación se muestran algunas sugerencias de uso de las plantillas.

Definir el punto de vista

Si el punto de vista está definido, la regla solo se ejecutará para los miembros seleccionados. El uso de una petición de datos en tiempo de ejecución para las dimensiones permite a los usuarios especificar valores miembro de esas dimensiones al iniciar la regla. De este modo, los usuarios pueden iniciar la regla varias veces para diferentes años, escenarios y versiones sin tener que modificar la regla en Calculation Manager.

Configuración habitual:

  • Agregación densa completa: complete esta sección si los valores padre de las dimensiones densa no se han definido en cálculo dinámico. Normalmente, este separador se deja vacío.

  • Agregación ligera completa: seleccione la dimensión ligera que es necesario agregar. El orden de las dimensiones seleccionadas no es relevante.

  • Agregación de dimensión parcial (densa): complete esta sección si los valores padre de la dimensión densa no se han definido en cálculo dinámico. Normalmente, este separador se deja vacío.

  • Agregue los datos hasta la moneda local: no

  • Agregue los valores que faltan en la base de datos: sí

  • Optimice el cálculo en la dimensión ligera: desactivado

  • Seleccione un valor de la caché de la calculadora: valor predeterminado

  • ¿Desea activar el modo de depuración para este asistente?: asistente para depuración activado o asistente para depuración desactivado. Seleccione Asistente para depuración ACTIVADO si desea ver un script generado para mostrar selecciones para algunas peticiones de datos en tiempo de diseño en esta plantilla.

Mejores prácticas:

  • Utilice las peticiones de datos en tiempo de ejecución para miembros como Entidad, Escenario y Versión. Esto permite que la regla sea dinámica y se ejecute según la entrada del usuario.

  • Normalmente, las dimensiones densas como Cuenta y Periodo no necesitan agregarse. Si este es el caso, puede definir los miembros padre en cálculo dinámico. Sin embargo, si tiene fórmulas de miembro en dimensiones densas y no están definidas en cálculo dinámico, será necesaria una regla de dimensión de cálculo.

Creación de cálculos detallados

Puede utilizar Calculation Manager para crear, validar, desplegar y administrar cálculos que solucionen problemas empresariales.

Existen tres tipos de objetos que se pueden calcular en Calculation Manager:

  • Conjuntos de reglas: contienen reglas que se pueden calcular de forma simultánea o secuencial

  • Reglas: contienen componentes y plantillas

  • Componentes: contienen componentes de fórmula, componentes de script, componentes de condición, componentes de rango y componentes de bucle fijo.

Mejores prácticas:

  • Como primer paso para crear reglas, asegúrese de entender la lógica de negocio y las entidades o departamentos a los que se aplica la regla. Por ejemplo, debe conocer las cuentas implicadas en la regla.

  • Asegúrese de que conoce las cuentas de origen y de destino.

  • Una vez que comprenda bien los controladores del cálculo, utilice el componente o plantilla de objeto correctos para crear la regla. Los componentes y plantillas facilitan la selección de miembros como ayuda para desplegar las reglas.

  • Utilizar las peticiones de datos en tiempo de ejecución para miembros como Entity, Scenario y Version permite que las reglas sean dinámicas y se ejecuten según los datos que introduzca el usuario.

Diagnóstico de Calculation Manager

Ejecute los errores y las advertencias antes de desplegar las reglas. Proporciona información útil, entre otra:

  • El número de pasadas en la base de datos.
  • Las advertencias necesarias.
  • Información sobre el número de bloques y dimensiones y si faltan dimensiones.
  • Las reglas que se deben optimizar.
  • Si cualquiera de los componentes en la parte derecha de la ecuación contiene un cero, el miembro derivado será 0. Tras la agregación, hay numerosos 0.
  • Para solucionar este problema, incluya una sentencia if que indique if (<q>Earned Premium</q><>0). De esta forma, los ceros no tendrán tanta importancia en la aplicación.

Ejemplo de problemas y soluciones con las reglas

Ejemplo 1: Regla que realiza varias pasadas en la base de datos

La siguiente regla realiza 10 pasadas en la base de datos para los años y el periodo, la moneda y las cuentas.

Regla de ejemplo: varias pasadas en la base de datos

Ejemplo 2: Regla que realiza solo una pasada en la base de datos

La siguiente regla solo realiza una pasada en la base de datos. Esto supone una reducción importante en el total de celdas afectadas.

Regla revisada: una sola pasada en la base de datos

Ejemplo 3: Regla con la que se copian y crean ceros

En esta regla, si cualquiera de los componentes de la parte derecha de la ecuación contiene un 0, el miembro derivado será 0. Tras la agregación, habrá muchos ceros. Para solucionar este problema, incluya una sentencia if que indique if ("Earned Premium"<>0). De esta forma, los ceros no tendrían tanta importancia en la aplicación.

Ejemplo de una regla que permite copiar y crear 0

Ejemplo 4: Eliminación de ceros de cubos de BSO

Con la siguiente fórmula se genera el valor original, o bien, si es 0, cambiará a #missing.

"DenseMbr" = "DenseMbr" * "DenseMbr"/"DenseMbr";

"SparseMbr" = "SparseMbr" * "SparseMbr"/"SparseMbr";

Para solucionar esto, cree una regla donde se utilice la fórmula. Utilice una dimensión ligera que tenga el menor número posible de miembros (como Year, Scenario o Version), ya que se debe realizar el cálculo para cada uno de los miembros.

Fix(idescendants(Entity),@levmbrs(Accounts,0),@levmbrs(Period,0),@idescendants(Custom dimensions),
@levmbrs(Years,0),@levmbrs(Versions))
Actual=Actual*Actual/Actual;
   Fix("Actual")
      CLEARBLOCK EMPTY:
   Endfix
Endfix

Recuerde llevar a cabo una reestructuración tras esto, ya que, de lo contrario, los bloques vacíos no se suprimirán.