乘积运算符
当需要计算两个科目的乘积时,必须区分两种情况:
- 标识两个科目值的维度是同质的,即这两个科目在相同数量的维度上运算,在这种情况下我们称之为同质运算符。例如,假设我们在自定义维度 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:此科目为空,因为乘积没有给出任何结果。