舍入与平均
在 TGKML 脚本中可以:
- 将科目的值舍入到给定数量的有效数字;
- 计算给定表达式的平均值。
舍入¶
用于将科目的值舍入到给定数量的有效数字(小数位数)的函数是
Round(n)
其中 n 是指定要考虑的小数位数的整数。
因此,如果我们写
… := [C00000](Round(2));
则 C00000 科目的值被读取为舍入到两位小数。
另一方面,如果我们写
[LO].[X00000](Round(2)) := …;
则输出科目 X00000 的值被舍入到两位小数。
在输出中使用 Round(n) 函数时,舍入应用于包含未计算来源的负金额的最终结果。例如,如果我们将给出 1 的计算结果舍入到零位小数,而数据库中已包含金额为 0.1 且来源为其他的数据,我们将获得一条金额为 1(1 - 0.1 = 0.9 舍入为 1)且来源为计算的记录。因此数据库上的总计将为 1.1。
而在输入中使用 Round(n) 函数时,舍入仅应用于数据读取,在前面的示例中,我们将获得一条金额为 0.9(Round(1,0) - 0.1 = 1 - 0.1)且来源为计算的记录。数据库上的总计将为 1。
平均值¶
Tagetik 为用户提供两个不同的实用程序
- Avg
- AvgDomain
用于计算平均值。
Avg 实用程序
Avg(
将考虑指定维度获得的值除以对值有贡献的已设置元组数。
AvgDomain 实用程序
AvgDomain(
将考虑指定维度获得的值除以已设置且对值没有贡献的元组数。
以下内容可作为 Avg 和 AvgDomain 函数的输入维度规范输入:
- 一个或多个 Dim.Parent(
) 类型的规范:在这种情况下,根据 Parent 逻辑与指定层次结构节点相关的每个最低级元素,将被关联一个等于根据 Parent 逻辑与同一节点相关的最低级元素上存在的平均金额的金额; - 一个或多个 Dim.Ancestor(
, ) 类型的规范:在这种情况下,根据 Ancestor 逻辑与指定层次结构节点相关的每个最低级元素,将被关联一个等于根据 Ancestor 逻辑与同一节点相关的最低级元素上存在的平均金额的金额; - Time.PN:在这种情况下,n 元组的平均值被关联到 PN 时间区间上的每个 n 元组;
- Time.Scenario:n 元组的平均值被关联到当前场景上的每个 n 元组;
示例 1
假设我们有一个在自定义维度 1 上定义的层次结构的节点 01,元素 D01、D02、D03、D04 与之相关,以及一个在自定义维度 1 上定义的层次结构的节点 01,元素 D01、D02、D03、D04 与之相关,并且在这些元素上我们有以下值
| Dest1 | 金额 |
|---|---|
| D01 | 10 |
| D02 | 20 |
| D03 | 30 |
| D04 |
那么如果我们写
… := Avg ([C00000], Dest1.Parent([01]));
结果将为
| Dest1 | 金额 |
|---|---|
| D01 | 60/3 = 20 |
| D02 | 60/3 = 20 |
| D03 | 60/3 = 20 |
而如果我们写
… := AvgDomain ([C00000], Dest1.Parent([01]));
结果将为
| Dest1 | 金额 |
|---|---|
| D01 | 60/4 = 15 |
| D02 | 60/4 = 15 |
| D03 | 60/4 = 15 |
| D04 | 60/4 = 15 |
.