IF 构造

IF 指令允许根据逻辑条件执行不同的计算。在这种情况下,要使用的语法为

… := if then else end;

例如,我们可以编写:

[LO].[X00000] := if [C00000] == 0 then [D00000] else [E00000] end;

通常,IF 指令的结果为:

  • 为真时,为
  • 为假时,为

从技术上讲,为了对 IF 表达式求值,系统会执行以下运算

* + *

在某些情况下,这可能给出错误结果。有关更多详细信息,请参阅 BOUND 函数的高级用法

语法 * 是一种替代方式,用于获取 为真的值之间的所有组合。

IF 指令可以嵌套,并且 ELSE 条件可以省略。

示例 1

[LO].@CONDITION := [C00000] == 10;

[LO].[X00000] := @CONDITION * [D00000](Dest1.[D16]);

此外,假设数据库中有以下数据。

科目 C00000

Entity Account Scenario Category CustDim1 CustDim2 Period Amount
A00 C00000 2013BDG $AMOUNT D11 D21 01 10
A00 C00000 2013BDG $AMOUNT D12 D21 01 10
A00 C00000 2013BDG $AMOUNT D13 D21 01 30
A00 C00000 2013BDG $AMOUNT D14 D21 01 50
A00 C00000 2013BDG $AMOUNT D15 D21 01 10

科目 D00000

Entity Account Scenario Category CustDim1 CustDim2 Period Amount
A00 D00000 2013BDG $AMOUNT D16 D21 01 20

在对 @CONDITION 求值时,系统会为科目 C00000 的每条现有记录生成一条记录,在条件成立处赋值为 1,否则为 0。我们将得到以下值:

Entity CustDim1 CustDim2 Amount
A00 D11 D21 1
A00 D12 D21 1
A00 D13 D21 0
A00 D14 D21 0
A00 D15 D21 1

我们脚本的结果将为:

Entity Account Scenario Category CustDim1 CustDim2 Period Amount
A00 X00000 2013BDG $AMOUNT D11 D21 01 20*1
A00 X00000 2013BDG $AMOUNT D12 D21 01 20 *1
A00 X00000 2013BDG $AMOUNT D15 D21 01 20*1

示例 2

[LO].@CONDITION := Dest1 <> “xxx”;

[LO].[X00000] := @CONDITION * [D00000](Dest1.[GEN]);

这是使用 IF 条件在给定维度(在此例中为自定义维度 1)上展开科目的另一种方式。系统通过对自定义维度 1 中代码不同于 xxx 的每个元素创建记录列表来对 @CONDITION 求值。如果代码为 xxx 的记录不存在,则意味着我们应打开与自定义维度 1 元素数量相同的、金额为 1 的记录。