SET EMPTYMEMBERSETS

English (Español a continuación)

This command can be included in the calculation script and determines the treatment that Essbase will give to those FIX that result in an empty set (the applied filter does not return any members).

  • It records a message in the log: “Expression […] evaluates to an empty set. [FIX STATEMENT] is ignored.

For example: suppose an outline with the following dimension “Markets”:

The FIX(@DESCENDANTS(Germany)) returns an empty set since Germany has no descendants.

  • Its syntax is correct so the calculation script is validated but when it is executed it does not return any member.

The “SET EMPTYMEMBERSETS” command presents 2 options:

a) ON; in those FIX that result in an empty set Essbase skips them, ignoring the instructions that are inside and continuing with the following instructions.

  • If inside the FIX there are other nested FIX, they are also ignored.

b) OFF; when a FIX determines an empty set Essbase ignores the filter and applies the calculation contained in it to all members of that dimension.

  • We may obtain a result that is not correct.
  • It’s the default option.

Suppose we apply the following calculation:

  • FIX(@DESCENDANTS(Germany))
    • “Sales_target” = 100;
  • ENDFIX

When Esbbase detects that it is an empty set, it ignores this filter in the FIX and applies the calculation to all the members of the «Markets» dimension, obtaining the following result:

To avoid this result you have to activate this command:

  • SET EMPTYMEMBERSETS ON;
  • FIX(@DESCENDANTS(Germany))
    • “Sales_target” = 100;
  • ENDFIX

The result we get is:

To apply this command the entire FIX must result in an empty set: if the FIX includes several filters and some of them do not determine an empty set then this command is not applied:

For example:

  • SET EMPTYMEMBERSETS ON;
  • FIX(@DESCENDANTS(Germany),@LIST(Mobiles,Tablets))
    • “Sales_target” = 100;
  • ENDFIX

In this case @DESCENDANTS(Germany) determines an empty set, while @LIST(Mobiles,Tablets) selects members of the “Products” dimension that do exist.

We get the following result:

To prevent this nested FIX must be used, leaving only the dimension on which the calculation pivots in a FIX:

  • SET EMPTYMEMBERSETS ON;
  • FIX(@DESCENDANTS(Germany))
    • FIX(@LIST(Mobiles,Tablets))
      • “Sales_target” = 100;
    • ENDFIX
  • ENDFIX

The order of the FIX does not affect:

  • SET EMPTYMEMBERSETS ON;
  • FIX(@LIST(Mobiles, Tablets))
    • FIX(@DESCENDANTS(Germany))
      • “Sales_target” = 100;
    • ENDFIX
  • ENDFIX

Therefore, when we apply this command and empty sets can be generated, we must use nested FIX.

Español

Este comando se incluye en el script de cálculo y determina el tratamiento que Essbase le va a dar a aquellos FIX que determinan un conjunto vacío (el filtro aplicado no devuelve ningún miembro).

  • Recoge en el log un mensaje: “Expression [ … ] evaluates to an empty set.  [FIX STATEMENT] is ignored.

Por ejemplo: supongamos un outline con la siguiente dimensión “Mercados”:

El FIX(@DESCENDANTS(Alemania)) genera un conjunto vacío ya que Alemania no tiene descendientes.

  • Su sintaxis es correcta por lo que el script de cálculo queda validado pero cuando se ejecuta no devuelve ningún miembro.

El comando “SET EMPTYMEMBERSETS” presenta 2 opciones:

a) ON; en aquellos FIX del cálculo que determinen un conjunto vacío Essbase los salta, ignorando las instrucciones que haya dentro y continuando con las siguientes instrucciones.

  • Si dentro del FIX hay otros FIX anidados estos también son ignorados.

b) OFF; cuando un FIX determina un conjunto vacío Essbase ignora el filtro y aplica el cálculo recogido en el FIX a todos los miembros de esa dimensión.

  • Podemos obtener un resultado que no es el que buscamos.
  • Es la opción por defecto.

Supongamos que aplicamos el siguiente cálculo:

  • FIX(@DESCENDANTS(Alemania))
    • “Obj_ventas” = 100;
  • ENDFIX

Esbbase al detectar que es un conjunto vacío ignora este filtro y aplica el cálculo a todos los miembros de la dimensión “Mercados”, obteniendo el siguiente resultado:

Para evitar este comportamiento hay que activar este comando:

  • SET EMPTYMEMBERSETS ON;
  • FIX(@DESCENDANTS(Alemania))
    • “Obj_ventas” = 100;
  • ENDFIX

El resultado que obtenemos es:

Para que Essbase aplique este comando todo el FIX debe ser un conjunto vacío: si el FIX incluye diversos filtros y algunos de ellos no determinan un conjunto vacío entonces no se aplica este comando:

Por ejemplo:

  • SET EMPTYMEMBERSETS ON;
  • FIX(@DESCENDANTS(Alemania),@LIST(Móviles,Tablets))
    • “Obj_ventas” = 100;
  • ENDFIX

En este caso @DESCENDANTS(Alemania) determina un conjunto vacío, mientras que @LIST(Móviles,Tablets) selecciona miembros de la dimensión “Productos” que sí existen.

Obtenemos el siguiente resultado:

Para evitar que ocurra esto hay que utilizar FIX anidados, dejando sólo en un FIX aquella dimensión sobre la que pivota el cálculo:

  • SET EMPTYMEMBERSETS ON;
  • FIX(@DESCENDANTS(Alemania))
    • FIX(@LIST(Móviles,Tablets))
      • “Obj_ventas” = 100;
    • ENDFIX
  • ENDFIX

El orden de los FIX no afecta:

  • SET EMPTYMEMBERSETS ON;
  • FIX(@LIST(Móviles,Tablets))
    • FIX(@DESCENDANTS(Alemania))
      • “Obj_ventas” = 100;
    • ENDFIX
  • ENDFIX

Por lo tanto, cuando aplicamos este comando y se pueden generar conjuntos vacíos hay que utilizar FIX anidados.