历史版本13 :层次坐标概念 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 描述编辑

层次坐标是实现复杂报表的一个重要功能。

在进行模板设计时,单元格尚未进行扩展,但是有些时候需要获取扩展后的单元格并进行计算。例如:A1 单元格扩展成 A1-A5,如果某个单元格的值希望对扩展后的 A2 和 A3 进行求和,在扩展前,表达式很难描述这样的关系,而对于扩展后单元格的唯一性的定义,就是单元格的层次坐标

2.相对层次坐标编辑

2.1 总结

报表中,常常需计算同期比、比上期之类的与时间相关的运算。而这些运算往往需用到下一行的数据减上一行数据,后一列数据减前一列数据等等。这种涉及到行间、列间的运算,称为位移运算,这种位移运算是通过相对层次坐标来表示的。

相对层次坐标定位规则如下:
222

说明:

Cellx:指目标单元格,是 Lk,Lk-1...L1;Tk,Tk-1...T1 的附属格。

Lk:指某个目标单元格 Cellx 的左父格,Lk 的次序是从远到近的,也就是从离当前格最远的左父格开始,也可以理解为从最高级别的分组格开始。

Tk:指某个目标单元格 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]。

2.2 示例

2.21 示例一

在 A1,B1,C1,D1单元格中分别插入公式,公式具体值及效果如下所示:

9.png

2.22 示例二

在 A1 单元格中插入公式:range(5);在 B1 单元格中插入公式:A1[A1:-1],根据绝对层次坐标可知,B1 单元格也可以直接使用层次坐标公式:HIERARCHY(A1),其效果如下所示:

7.png

3.绝对层次坐标编辑

3.1 总结

某些报表中,可能需要对扩展后的单元格精确定位,然后参与运算,如上比较例子。然而在单元格扩展前,单元格会扩展出多少格子及格子所在的位置,在扩展前很难描述。因此,FineReport 中通过层次坐标的概念来对扩展后的单元格进行唯一性定义。

绝对层次坐标就是通过绝对位置来精确定位扩展后的单元格,定位规则如下:

说明:

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.2 示例

3.21 示例一

在 A1,B1,C1 单元格中分别插入公式,具体公式及效果如下图所示:


3.22 示例二

 在 A1 单元格中插入公式 range(5);在 B1 单元格中插入公式 A1[A1:3],该公式作用是获取 A1 扩展后第三个单元格的值。其效果如下所示:

8.png

4. 层次坐标的使用及效果编辑

4.1 获取单元格扩展出来的所有值

如想获取单元格扩展出的所有值,可以使用=Cell[!0]来获取,如获取 A1 单元格所有扩展出的值,就可以在B1单元格中输入=A1[!0],其效果如下所示:
222

4.2 获取扩展单元格中满足条件的值

如想获取扩展单元格满足条件的值,可以使用=Cell[!0]{条件}获取,如获取 A1 单元格扩展出的不为 3 的值,则在 B1 单元格中输入=A1[!0]{A1!=3},其效果如下所示:
222

具体的应用可查看 条件汇总 章节。

4.3 获取单元格扩展出的最后一个值

想获取单元格扩展出的最后一个值,可以通过使用=Cell[Cell:!-1]获取,如获取 A1 单元格扩展出的最后一个值,则在 B1 单元格中输入=A1[A1:!-1],其效果如下所示:
222

具体的应用可查看 跨层累计 章节。

4.4 获取单元格扩展的位置

想获取单元格扩展后每个单元格的位置,可以通过使用=&Cell获取,如获取 A1 单元格扩展出每个值的位置,则在 B1 单元格中输入=&A1,其效果如下所示:
222

具体的使用可查看 序号 章节。

注:层次坐标在启用行式引擎报表中会失效。

动态格间运算在线视频请查看【动态格间运算】