Uso de sentencias IF

  • Se pueden usar sentencias IF en las fórmulas de miembros; FIX no.
  • La sentencia IF se debe usar en sentencias FIX para reducir el número de bloques a los que se va a acceder. La sentencia IF incorpora en la memoria todos los bloques de FIX.
  • Cuando sea posible, use sentencias FIX externas en dimensiones ligeras y sentencias IF internas en dimensiones densas.
  • Use ELSE en lugar de una combinación de NOT y ELSEIF siempre que sea posible para evitar un análisis innecesario de valores de miembro durante el cálculo. No use una sentencia ELSE si no es necesario.
  • Revise la opción de bloque de miembros de cálculo para determinar si puede usar un miembro ligero sin dependencias de cálculo dinámico.
  • Ordene las sentencias IF, si es posible, cuando el mayor número de casos encuentre el primer IF en el bloque. Utilice NOT en la sentencia IF para asegurarse de esto si corresponde.

    Tenga en cuenta el siguiente script, que asume que SalesYTD es un hijo de Ratios en Sample.Basic (donde Accounts y Time son dimensiones densas).

    SET UPDATECALC OFF;
    "SalesYTD"(
    IF(@ismbr("Jan"))
        "SalesYTD" = "Sales";
    Else
        "SalesYTD"="Sales" + @prior("SalesYTD");
    Endif)

    En este ejemplo, si bien la 11/12ª de los datos cumplen la condición ELSE, solo la 1/12ª parte de los datos cumplen la condición IF. Además, el miembro SalesYTD se calcula en modo de celda, lo que significa que January, como aparece el primero en el esquema, se calcula en primer lugar con independencia del orden de IF. Puede optimizar este script usando NOT en la sentencia IF como se muestra en el siguiente ejemplo:

    SET UPDATECALC OFF;
    "SalesYTD"(
    IF(NOT(@ismbr("Jan")))
        "SalesYTD" = "Sales" + @prior("SalesYTD");
    Else
        "SalesYTD"="Sales";
    Endif)