使用 IF 语句

  • IF 语句可用于成员公式中;但 FIX 语句不能。
  • IF 语句应在 FIX 语句内使用以减少要访问的块数。IF 语句会将 FIX 中的所有块放入内存中。
  • 尽可能在稀疏维上使用外部 FIX 语句,在密集维上使用内部 IF 语句。
  • 尽可能使用 ELSE 而非 NOT 与 ELSEIF 的组合,以避免在计算过程中对成员值进行不必要的分析。如非必要,不要使用 ELSE 语句。
  • 检查“计算成员块”选项,以确定是否可以使用没有动态计算相关性的稀疏成员。
  • 如有可能,对 IF 语句进行排序,大多数情况下会遇到块中的第一个 IF。如果适用,请在 IF 中使用 NOT 来确保这一点。

    请考虑以下脚本,其中假设 SalesYTDSample.BasicRatios 的子代(其中帐户时间是密集维)。

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

    在此示例中,12 个月中有 11 个月的数据满足 ELSE 条件,而只有 1 个月的数据满足 IF 条件。此外,SalesYTD 成员是在单元格模式下计算的,这意味着无论 IF 顺序如何都会先计算 January,因为它首先出现在大纲中。可以在 IF 语句中使用 NOT 来优化此脚本,如下例所示:

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