Utilisation des instructions IF

  • Une instruction IF peut être utilisée dans une formule de membre ; ce n'est pas le cas d'une instruction FIX.
  • Une instruction IF doit être utilisée dans des instructions FIX pour réduire le nombre de blocs auxquels il faut accéder. L'instruction IF met tous les blocs de l'instruction FIX dans la mémoire.
  • Lorsque cela est possible, utilisez des instructions FIX externes sur les dimensions dispersées et des instructions IF internes sur les dimensions denses.
  • Utilisez une instruction ELSE au lieu d'une combinaison d'instructions NOT et ELSEIF lorsque cela est possible pour éviter une analyse inutile des valeurs de membre pendant le calcul. N'utilisez pas d'instruction ELSE si elle n'est pas requise.
  • Vérifiez le choix du bloc de membre de calcul pour déterminer si vous pouvez utiliser un membre dispersé sans dépendances de calcul dynamique.
  • Si possible, ordonnez les instructions IF où le plus grand nombre de cas correspond à la première instruction IF dans le bloc. Utilisez NOT dans l'instruction IF à cette fin, le cas échéant.

    Considérez le script suivant, qui suppose que SalesYTD est un enfant de Ratios dans Sample.Basic (où Comptes et Temps sont des dimensions denses).

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

    Dans cet exemple, alors que 11/12e des données répondent à la condition ELSE, seulement 1/12e des données répond à la condition IF. De plus, le membre SalesYTD est calculé en mode cellule, ce qui signifie que Jan est calculé en premier quel que soit l'ordre de l'instruction IF car il apparaît en premier dans l'outline. Vous pouvez optimiser ce script en utilisant NOT dans l'instruction IF comme illustré dans l'exemple suivant :

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