层次坐标概述

编辑
  • 文档创建者:文档助手1
  • 浏览次数:28442次
  • 编辑次数:15次
  • 最近更新:Wendy123456 于 2019-07-12
  • 1. 描述

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

    关于层次坐标的其他方面的细化可以参考以下的文档的介绍:

    环比排名逐层累计循环引用跨层累计比较

    本文对层次坐标中的绝对层次坐标相对层次坐标进行详细介绍(采用对比方式进行,以便大家能够更好的观察数据的变化)

    2.相对层次坐标

    能够获取上一行,上一列,下一列等与当前位置有一定偏移的位置上的值。使用过程中,向上第 n 行需要加“-”符号,向下第 n 行需要使用“+”符号。

    EX:如果在 B1 单元格获取当前行 A1 单元格(A1 单元格是纵向拓展的)扩展的上一个数据,在 B1 单元格中写入如下公式:=A1[A1:-1]

    以上为单一纵向的拓展的相对,多层次的拓展的引用类似。

    注:当中括号“[]”内的数字为负数时,则引用相对层次坐标。

    2.1 总结

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

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

    说明:

    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]。

    注3:当相对引用小于-1,即-2,-3,-4,...等时,会感觉会对拓展出来的数据进行循环的相对。必要时需要用其他条件进行过滤。

    2.2 示例

    2.21 示例一

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

    7.png

    2.22 示例二

    在 A1 单元格中插入公式=range(2,3),B1 单元格中插入公式=range(4,6),C1 单元格中插入公式=A1*B1,D1 单元格中插入公式=C1[B1:-1],效果如下所示:

    9.png

    3.绝对层次坐标

    用于获取扩展后某一位置上的值。使用过程中,坐标为负数时,需要加“!”符号。

    EX:如果在 B1 单元格获取当前行 A1 单元格(A1 单元格是纵向拓展的)扩展的(所有数据中)上一个(倒数第一个)数据,在 B1 单元格中写入如下公式:=A1[A1:!-1]

    EX:如果在 B1 单元格获取当前行 A1 单元格(A1 单元格是纵向拓展的)扩展的(所有数据中)第二个数据,在 B1 单元格中写入如下公式:=A1[A1:2]

    以上为单一纵向的拓展的相对,多层次的拓展的引用类似。

    注:当中括号“[]”内的数字为正数,或为负数且带“!”时,则引用绝对层次坐标。

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

    8.png

    3.22 示例二

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


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

    下面示例中,A1 单元格所插入的公式都为:=range(5)

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

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

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

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

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

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

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

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

    4.4 获取单元格扩展的位置

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

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

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

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


    附件列表


    主题: 报表设计
    标签: 暂无标签 编辑/添加标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]