首页 > 教程 > 报表模板中的主从关系

报表模板中的主从关系

时间:2024-04-09 | 来源: | 阅读:60

话题: 不用

系列文章: 《还在担心报表不好做?不用怕,试试这个方法》(一) 《还在担心报表不好做?不用怕,试试这个方法》(二) 概要 在上一篇文章《还在担心报表不好做?不用怕,试试这个方法》(二)中,小编介绍了模板语言中的的一些基本概念和用法,今天小编将继续为大家介绍如何不同字段间的父子关系,是如何在模板语言中

系列文章:

《还在担心报表不好做?不用怕,试试这个方法》(一)

《还在担心报表不好做?不用怕,试试这个方法》(二)

概要

在上一篇文章《还在担心报表不好做?不用怕,试试这个方法》(二)中,小编介绍了模板语言中的的一些基本概念和用法,今天小编将继续为大家介绍如何不同字段间的父子关系,是如何在模板语言中定义的。

首先重新回顾一下,上一次使用到的数据表。如下所示:

报表模板中的主从关系

可以看到,在数据表中,销售公司和员工两列数据拥有一个所属关系。

因此在某些情况下,我们可以将员工按照所属的公司关系进行分类,如下图所示:

报表模板中的主从关系

这样就实现了一个基于数据间的主从关系的显示布局。

数据中的主从关系

在数据表中,刚提到了销售公司与员工有一个所属关系的存在,即数据本身存在逻辑关系。员工列的数据隶属于某一个销售公司。

同时,商品和商品类型,也有一个逻辑关系,商品隶属于某一种商品类型。通常这种所属或隶属的关系,会被称为主从关系,或者父子关系。

为了方便理解,这里举一个例子,让您更好的理解这种包含,或者主从的关系。其本身更像是一种树形结构,也有另一种说法,来称呼这种关系,叫做“一对多”,1:N 的关系。

以国家为例,一个国家,有多个省,每个省有多个市,每个市又有多个区,每个区又有多个街道。显示出来就是:

国家 -> 省 -> 市 -> 区

这样一来,国家和省,一对多,省对市,一对多。对于 1:N 的关系,通常我们会将【1】这一方称之为父或者主,将【N】一方称之为子或者从。

至此,我们已经了解到概要中提到的数据表,其中有两个主从关系,即 公司:员工,类型:商品。

报表模板中的主从关系

介绍完数据中的主从关系之后,我们现在再看下面这个报表的图片,我们可以看到 A 列绑定的是 “公司” 字段, C 列绑定的是 “员工” 字段。同时,A 列会将相同的数据合并成为一个单元格。

报表模板中的主从关系

基于上一篇文章《还在担心报表不好做?不用怕,试试这个方法》(二)讲到的数据绑定,我们做一个如下的模板。

报表模板中的主从关系

生成的结果为:

报表模板中的主从关系

但是会发现这与期望的结果不同,A 列的数据虽然仅出现了一次,但是 A 列与 C 列数据间的关系丢失了,从行的角度看,数据是错误的。

因此为了适应数据内部的主从关系,我们可以使用 Context 属性 来实现,下面来介绍一下:

Context 属性

Context的概念是可以为一个单元格指定一个主单元格。Context 的简写是【C】,将模板改写如下图所示:

报表模板中的主从关系

这样生成的结果如下所示:

报表模板中的主从关系

可以看到,Context 属性为 A 列和 C 列构建了一种主从关系。在生成报表时,其遵循如下原则:

  1. 先扩展主单元格,后扩展从单元格。
  2. 主单元格扩展的时候,需要复制从单元格,并调整主从关系。
  3. 从单元格获取数据的时候要受主单元格的约束,扩展的时候要考虑调整主单元格的位置和大小。

隐式主从关系

在报表中,数据的主从关系非常普遍。因此,在数据绑定后,需要为单元格指定主从关系的情况会很多。因此为了使得模板看起来更简洁,易读。我们需要实现隐式主从关系的设计,也就是说当两个单元格左右相邻时,这两个单元格会自动产生主从关系,且左边为主,右边为从。比如我们对模板进行如下修改时:

报表模板中的主从关系

就会生成如下报表:

报表模板中的主从关系

Range 属性

前面介绍了Context 属性和隐式主从关系,这两个都是在主从单元格的角度指定主单元格。但是在某些场合,还是需要我们手工设置 Context,例如:

  1. 空单元格或常量单元格,由于本身没有数据,不能扩展,不能隐式的成为其它单元格的主单元格。
  2. 函数都是汇总函数,不具有扩展能力,也不能隐式成为其它单元格的主单元格。

这一步可以使用 Range 属性来解决这个问题。观察下面这个模板,除了总销量单元格,其它单元格都得显示设置 Context,因为它们左边的单元格用的函数,不具有扩展性,所以没有默认的主单元格。

报表模板中的主从关系

通过使用 Range 属性,则仅通过一个单元格来制定主从关系,模板修改后如下:

报表模板中的主从关系

Range 属性设置单元格时有以下规则:

  1. Range 的优先级是最低的,当有主从关系冲突时,Context 或者隐式主从关系优先级更高。
  2. 扩展方向相同的 Range 属性扩展,可以嵌套,但不能出现交叉。当出现多个 Range 作用于同一个单元格时,即嵌套的情况,单元格将受到最内部的 Range 属性影响。
  3. 不同扩展方向的 Range 则允许交叉,且能解决交叉报表的问题。

这样根据上面的规则,我们就可以使用 Range 简化模板,如下例子:

报表模板中的主从关系

通过为 A3 和 D1 设置 Range 属性,就可以轻松的给 B3,C3,D3,E3 指定了主单元格。

总结

本章主要对模板语言中数据和单元格之间主从关系进行讲解,本章的主要内容如下:

  • 数据中的主从关系
  • 报表模板中的主从关系
  • Context 属性
  • 隐式主从关系
  • Range 属性

下一期,小编将为大家介绍数据展开等其他设置是如何在模板中使用的。

扩展链接:

轻松构建低代码工作流程:简化繁琐任务的利器

数据驱动创新:以Java编程方式定制数据透视表

Java批量操作Excel文件实践

推荐

最新好玩手游

更多

手游风云榜

更多

资讯阅读

更多


湘ICP备2022002427号-10 湘公网安备:43070202000427号
© 2013~2024 haote.com 好特网