1. 概述编辑
层次坐标入门视频:层次坐标
层次坐标进阶视频:层次坐标进阶
1.1 概念
层次坐标是实现复杂报表的一个重要概念。在进行报表设计时,如果涉及到扩展单元格的计算,就需要使用层次坐标来表示单元格扩展后的表格位置,进而方便运算公式的书写,进行 动态格间运算 。
因此层次坐标是进行动态格间运算的基础。
层次坐标有两种类型,分别是「相对层次坐标」和「绝对层次坐标」。
1.2 应用场景
2. 相对层次坐标编辑
许多时候,报表设计者并不知道目标单元格的具体位置,仅仅知道目标单元格相对于当前单元格的位移,因此给出了位移坐标。
2.1 概念说明
相对位移坐标是用来描述目标单元格和当前单元格之间的位置关系的表达式,概念图如下图所示:
说明:
Cellx | 表示需要返回结果的单元格 |
Celly | 表示位移时参考的单元格 |
z | 代表相对位移的位置 注:相对后移需要使用“-”符号,相对前移需要使用“+”符号。 |
Cellx[Celly:-z] | 记录位移前 Celly 和 Cellx 的对应关系,记为关系1,当Celly完成-z个位置的位移后,按照‘关系1’返回对应的Cellx。 |
2.2 公式说明
Cellx | 指目标单元格,是 Lk,Lk-1...L1;Tk,Tk-1...T1 的附属格。 |
Lk | 指某个目标单元格 Cellx 的左父格,Lk 的次序是从远到近的,也就是从离当前格最远的左父格开始,也可以理解为从最高级别的分组格开始。 |
lk | 指左父格 LK 扩展后的次序,即扩展后的第几个单元格,如果不指定 lk 或 lk 为 0,则表示为当前表达式所在单元格所属的当前左父格 LK。 |
Tk | 指某个目标单元格 Cellx 的上父格,Tk 的次序也是从远到近的,也就是从离当前格最远的上父格开始,也可以理解为从最高级别的分组格开始。 |
tk | 指上父格 Tk 扩展后的次序,即扩展后的第几个单元格,如果不指定 tk 或 tk 为 0,则表示为当前表达式所在单元格所属的当前上父格 TK。 |
注1:如果只有左父格没有上父格,分号可以省略,即Cellx[Lk:±lk,LK-1:±lk-1,......,L1:±l1]。
注2:如果只有上父格没有左父格,分号不能省略,即Cellx[;Tk:±tk,Tk-1:±tk-1......,T1:±t1]。
注3:当相对引用小于-1,即-2,-3,-4,...等时,扩展数据可能出现循环相对。必要时需要用其他条件进行过滤。
2.3 示例
2.3.1 示例一
1)使用内置数据 S产品 数据创建如下图所示的报表:
2)此时在 C2、D2 单元格插入公式 A2[A2:-1]、B2[B2:-1],如下图所示:
得到的结果如下图所示:
公式说明:
A2[A2:-1] | 返回以 A2 单元格为父格的上一个 A2 单元格纵向扩展的数值。 |
B2[B2:-1] | 返回以 B2 单元格为父格的上一个 B2 单元格纵向扩展的数值。 |
2.3.2 示例二
1)使用内置数据 STSCORE 数据创建如下图所示的报表:
2)此时在 B3 单元格和 B4 单元格分别插入公式 B2[;B1:-1] 和 B2[;B1:+1],如下图所示:
得到的结果如下图所示:
公式说明:
B2 | 表示需要返回结果的单元格 |
B1 | 需要返回结果的单元格的父格,进行位移需要参考的单元格 若该单元格有父格,则需要从最高级别的分组为基准从头开始计算 |
-1 | 相对后移一位,返回前一位单元格上的数据 |
B2[;B1:-1] | B3 单元格返回以 B1 单元格为父格的上一个 B2 单元格纵向扩展的数值。 示例中为 4013、4004、3984、4011 |
B2[;B1:+1] | B4 单元格返回以 B1 单元格为父格的下一个 B2 单元格纵向扩展的数值。 示例中为4004、3984、4011、4029 |
3. 绝对层次坐标编辑
在进行报表设计时,单元格尚未扩展,但是其它单元格的计算表达式可能需要此单元格扩展后某个数据的精确位置,这时就需要使用绝对层次坐标精确表达该数据的位置。
3.1 概念说明
层次坐标概念图如下图所示:
注:反向获取第 z 个数即取倒数第 z 个数。
说明:
Cellx | 表示需要返回结果的单元格 |
Celly | 表示获取位置时参考的单元格 |
z | 表示选择获取的位置 取倒数第几个数则用!-,例如获取最后一个数,则使用!-1表示 |
Cellx[Celly:z] | 返回 Celly 扩展出来的第 z 个值对应的 Cellx 值 |
3.2 公式说明
绝对层次坐标就是通过绝对位置来精确定位扩展后的单元格,定位规则如下:
公式说明:
Cellx | 指目标单元格,是 Lk,Lk-1...L1;Tk,Tk-1...T1 的附属格。 |
Lk | 指某个目标单元格 Cellx 的左父格,Lk 的次序是从远到近的,也就是从离当前格最远的左父格开始,也可以理解为从最高级别的分组格开始。 |
lk | 指左父格 LK 扩展后的次序,即扩展后的第几个单元格,如果不指定 lk 或 lk 为 0,则表示为当前表达式所在单元格所属的当前左父格 LK。 |
tk | 指上父格 Tk 扩展后的次序,即扩展后的第几个单元格,如果不指定 tk 或 tk 为 0,则表示为当前表达式所在单元格所属的当前上父格 TK。 |
注1:如果只有左父格没有上父格,分号可以省略,即 Cellx[Lk:lk,LK-1:lk-1,......,L1:l1]。
注2:如果只有上父格没有左父格,分号不能省略,即 Cellx[;Tk:tk,Tk-1:tk-1......,T1:t1]。
3.3 示例
3.3.1 示例一
1)使用内置数据 S产品 数据创建如下图所示的报表:
2)此时在 B5\B6\B7 单元格插入公式 A2[A2:2]、B2[A2:!-2]、B2[A2:2.B2:1],如下图所示:
得到效果如下图所示:
公式说明:
A2[A2:2] | 返回 A2 列第二个数值对应的 A2 单元格数值 示例中为 2 |
B2[A2:!-2] | 返回A2列的倒数第二个数值对应的 B2 单元格数值 示例中为酱油、海鲜粉、胡椒粉 |
B2[A2:2,B2:1] | 返回同时满足 A2的第二个位置、B2的第一个位置对应的 B2 单元格数值 示例中为盐 |
3.3.2 示例二
1)使用内置数据 STSCORE 数据创建如下图所示的报表:
2)此时在 A3 单元格插入公式 B2[;B1:3]、B2[;B1:!-2],如下图所示:
得到结果如下图所示:
公式说明:
B2[;B1:3] | 返回 B1 行的第三个数值对应的 B2 单元格数值 示例中为 3984 |
B2[;B1:!-2] | 返回 B1 行的倒数第二个数值对应的 B2 单元格数值 示例中为 4001 |
4. 层次坐标常用公式编辑
表达式 | 效果 | 示例 | 图示 |
---|---|---|---|
Cellx[!0] | 获取单元格 Cellx 扩展出来的所有值 | A1[!0] | |
Cellx[!0]{条件表达式} | 根据条件表达式获取单元格 Cellx 扩展出来的部分值 | A1[!0]{A1!=3} | |
&Cellx | 获取单元格 Cellx 扩展后每个值对应的位置 | &A1 | |
$Cellx | 获取单元格 Cellx 扩展后对应位置上的值 | $A1 |
注:A1 单元格纵向扩展,B1单元格跟随 A1单元格纵向扩展。
5. 层次坐标的应用编辑
层次坐标的具体应用参见文档:动态格间运算。