乘积运算符

当需要计算两个科目的乘积时,必须区分两种情况:

  • 标识两个科目值的维度是同质的,即这两个科目在相同数量的维度上运算,在这种情况下我们称之为同质运算符。例如,假设我们在自定义维度 1 上管理成本中心,在自定义维度 2 上管理产品,我们可以将产品收入值计算为价格 [A] 与销售数量 [B] 的乘积。在这种情况下,两个运算符是同质的,因为科目 A 的值和科目 B 的值都是考虑自定义维度 1 和 2 的所有元素读取的;
  • 标识两个科目值的维度不是同质的,即这两个科目不在相同数量的维度上运算,在这种情况下我们称之为非同质运算符。例如,假设我们在自定义维度 1 上管理成本中心,在自定义维度 2 上管理产品,我们可以将产品收入值计算为通用价格(通用产品 GEN 的价格)[A](Dest2[GEN]) 与销售数量 [B] 的乘积。在这种情况下,两个运算符不是同质的,因为科目 A 的值是考虑自定义维度 1 的所有元素读取的,而自定义维度 2 固定为 GEN,科目 B 的值是考虑自定义维度 1 和 2 的所有元素读取的。

在存在同质运算符的情况下,乘积具有“标准”行为,即乘积在维度完全相互对应的值之间执行。

示例 1

假设我们在三个自定义维度上收集数据:成本中心、产品和部门,并且我们想要将产品销售收入的値计算为每个产品的价格与销售数量的乘积。

我们可以编写以下 TGKML 脚本:

[LO].[50010] := [90020] * [90010]

其中:

  • [LO] = 目标多维数据集(原始金额)
  • [50010] = 要计算的科目(收入 - 产品)
  • [90020] = 包含产品平均价格的输入科目
  • [90010]= 包含销售数量的输入产品

输入科目 90020

Account Custdi1 Custdi2 Custdi3 Amount
90020 D11 D21 D31 20
90020 D11 D22 D32 30

输入科目 90010

Account custdi1 Custdi2 Custdi3 Amount
90010 D11 D21 D31 4
90010 D11 D21 D32 5
90010 D12 D22 D31 6

输出科目 50010

Account Custdi1 Custdi2 Custdi3 Amount
50010 D11 D21 D31 20 * 4 = 80

示例 2

假设我们必须计算

[LO].[50010] := [90020](Dest2.[GEN]) * [90010]

其中:

  • [LO] = 目标多维数据集(原始金额)
  • [50010] = 要计算的科目(收入 - 产品)
  • [90020] = 包含产品平均价格的输入科目
  • Dest2.[GEN] = 存储产品平均价格的自定义维度 2 的元素
  • [90010]= 包含销售数量的输入科目

输入科目 90020

Account Custdi1 Custdi2 Amount
90020 D11 GEN 2
90020 D12 GEN 3
90020 D12 D22 4

输入科目 90010

Account Custdi1 Custdi2 Amount
90010 D11 D21 6
90010 D11 D22 7
90010 D12 D21 8
90010 D12 D22 9
90010 D13 D21 10

输出科目 50010

Account Custdi1 Custdi2 Amount
50010 D11 D21 2 * 6 = 12
50010 D11 D22 2 * 7 = 14
50010 D12 D21 3 * 8 = 24
50010 D12 D22 3 * 9 = 27

示例 3

假设我们必须计算

[LO].[50010](Dest2.Filter([D21],[D22])) := [90020] *[90010]

其中:

  • [LO] = 目标多维数据集(原始金额)
  • [50010] = 要计算的科目(收入 - 产品)
  • [90020] = 包含产品平均价格的输入科目
  • Dest2.Filter([D21],[D22]) = 对自定义维度 2 的元素 D21 和 D22 的过滤器
  • [90010]= 包含销售数量的输入科目

输入科目 90010

Account custdi1 Custdi2 Custdi3 Amount
90010 D11 D21 D31 20
90010 D11 D22 D32 30
90010 D12 D22 D31 40
90010 D11 D23 D32 50
90010 D12 D23 D31 60

输入金额 90020

Account custdi1 custdi2 custdi3 Amount
90020 D11 D21 D31 4
90020 D11 D22 D32 5
90020 D12 D22 D31 6
90020 D11 D23 D32 5
90020 D12 D23 D31 6

输出科目 50010

Account custdi1 custdi2 custdi3 Amount
50010 D11 D21 D31 20 * 4 = 80
90020 D11 D22 D32 30 * 5 = 150
90020 D12 D22 D31 40 * 6 = 240

示例 4

假设我们必须计算

[LO].[X0000] := [C0000](Dest1.[D12]) *[D0000]

输入科目 C0000

Account custdi1 custdi2 amount
C0000 D11 D21 50
C0000 D12 D22 30

输入科目 D0000

Account custdi1 custdi2 amount
D0000 D11 D21 10
D0000 D11 D22 20
D0000 D12 D22 5

输出科目 X0000

Account custdi1 custdi2 amount
X0000 D11 D22 30 * 20 = 600
X0000 D12 D22 30 * 5 = 150

示例 5

假设我们必须计算

[LO].[X0000] := [C0000](Dest1.[D12]) *[D0000](Dest2.[D22])

输入科目 C0000

Account custdi1 custdi2 amount
C0000 D11 D21 50
C0000 D12 D21 40
C0000 D12 D22 30

输入科目 D0000

Account custdi1 custdi2 amount
D0000 D11 D21 10
D0000 D11 D22 20
D0000 D12 D22 5

输出科目 X0000

Account custdi1 custdi2 amount
X0000 D11 D21 40 * 20 = 800
X0000 D12 D21 40 * 5 = 200
X0000 D11 D22 30 * 20 = 600
X0000 D12 D22 30 * 5 = 150

示例 5

假设我们必须计算

[LO].[X0000] := [C0000](Dest1.[D11]) *[D0000](Dest1.[D12])

输入科目 C0000

Account custdi1 custdi2 amount
C0000 D11 D21 50
C0000 D12 D21 40
C0000 D12 D22 30

输入科目 D0000

Account custdi1 custdi2 amount
D0000 D11 D21 10
D0000 D11 D22 20
D0000 D12 D22 5

输出科目 X0000:此科目为空,因为乘积没有给出任何结果。