Uso de Instruções IF

  • A instrução IF pode ser usada na fórmula do membro; a FIX, não.
  • A instrução IF deve ser usada dentro das instruções FIX para reduzir o número de blocos que deverão ser acessados. A instrução IF traz todos os blocos existentes na instrução FIX para a memória.
  • Quando possível, use instruções FIX externas em dimensões esparsas e instruções IF internas em dimensões densas.
  • Quando possível, use ELSE, em vez de uma combinação de NOT e ELSEIF, para evitar uma análise desnecessária dos valores de membros durante o cálculo. Não use uma instrução ELSE caso ela não seja obrigatória.
  • Analise a opção de Bloco de Membro de Cálculo para determinar se é possível usar um membro esparso sem dependências de cálculo dinâmico.
  • Ordene as instruções IF, quando possível, quando o maior número de casos atingir a primeira instrução IF no bloco. Use NOT dentro da instrução IF para garantir isso, se aplicável.

    Considere o script de cálculo a seguir, que pressupõe que SalesYTD seja um filho de Ratios em Sample.Basic (onde Contas e Tempo são dimensões densas).

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

    Neste exemplo, embora 11/12 avos dos dados atenda à condição ELSE, apenas 1/12 avos do dados atende à condição IF. Além disso, o membro SalesYTD é calculado no modo Célula, o que significa que o mês de janeiro, como aparece primeiro no outline, é calculado primeiro, independentemente da ordem da instrução IF. Você pode otimizar esse script usando NOT na instrução IF, como é mostrado no exemplo a seguir:

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