首页 > 其他分享 >还在担心报表不好做?不用怕,试试这个方法(三)

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

时间:2024-04-09 09:12:19浏览次数:18  
标签:报表 试试 单元格 不用 Range 主从关系 Context 模板

系列文章:

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

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

概要

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

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

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

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

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

数据中的主从关系

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

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

为了方便理解,这里举一个例子,让您更好的理解这种包含,或者主从的关系。其本身更像是一种树形结构,也有另一种说法,来称呼这种关系,叫做“一对多”,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文件实践

标签:报表,试试,单元格,不用,Range,主从关系,Context,模板
From: https://www.cnblogs.com/powertoolsteam/p/18118686

相关文章

  • 课堂测试试卷—数据同步练习
    数据结构分析:(1)京津冀三省的2015年度的科技成果数据原始表,为Access数据库,;(2)要求将三省的科技成果数据汇总到同一表中(要求结果表为MySql数据表);(3)三个原始数据表结构不一致,要求结果表中包括所有的字段,表达意思相同或相似的字段要进行合并,不允许丢失字段(若只有本表独有字段,在结果......
  • 尚硅谷大数据项目之电商数仓(5可视化报表)V5
    第1章Superset入门1.1Superset概述ApacheSuperset是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接各种数据源,包括很多现代的大数据分析引擎,拥有丰富的图表展示形式,并且支持自定义仪表盘。1.2环境说明本课程使用的服务器操作系统为CentOS7,Superset对接的数据源......
  • 浮点数比较,但是不用 eps
    License:CCBY-SA4.0乘法把所有数扩大\(10^n\)倍然后当成整数做,可能要用到__int128.(最后输出答案别忘了除回来)缺点就是除法可能还是会爆精度,并且不支持开根之类的操作。模法突发奇想想到的一种方法.大概思想就是同时记录浮点数和它对某个数取模后的值.classNumber{......
  • windows 系统的 cmd 命令窗口不是很好用,可以试试 Cmder 工具包
    windows系统的cmd命令窗口不是很好用,可以试试Cmder工具包一、常规操作1、在运行框中快速启动Cmder将cmder.exe文件所在目录加载环境变量PATH中。2、把cmser加载鼠标右键中方法一:以管理员身份运行Cmder  ->输入  cmder/registerall  。方......
  • JimuReport 积木报表 v1.7.4 正式版本发布,免费的 JAVA 报表工具
    项目介绍一款免费的数据可视化报表,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等!Web版报表设计器,类似于excel操作风格,通过拖拽完成报表设计。秉承“简单、易用、专业”的产品理念,极大的降低报表开发难度、缩短开......
  • 7款免费开源报表工具,free report
    https://www.youtube.com/watch?v=fBgsh8qabDsEclipseBirt(推荐,Eclipse比较出名)JsreportJesperReport用过,感觉一般HeilicalInsightKNIMEMetabase目前在用,使用比较简单,做BI分析可以,制作有特殊格式要求的打印单据不太可行,比如发票订单之类的Knowage......
  • 直播平台制作,优化内存占用不妨试试轻量级数据架构
    直播平台制作,优化内存占用不妨试试轻量级数据架构使用轻量级数据结构在直播平台制作中选择数据结构时,考虑使用轻量级的数据结构,如ArrayList替代Vector,以及StringBuilder替代String拼接。能够在保证功能的前提下,减小内存占用。以下是一些使用轻量级数据结构的方法:1、使用......
  • 不用ul列表标签,用nav标签做出简洁导航栏
    本人想开设一个minecraft服务器,正想着为我的游戏服务器写一个网页,加上今天上完web课有所感想写了这篇博客。在大学的web教材当中,都是用ul标签来做导航来(这么说是因为我们的教材就是教我们用ul标签来做而且不怎么好看),那么今天阿征教大家如何不用列表也能做出导航栏。效果正......
  • 如何优雅的查看方法耗时,不用写一行代码!这个插件支持的太多了
    前言没错,又是CoolRequest插件,这次引来一个重大更新,可以统计任意方法耗时,先上个图。另外,这是此次更新的功能。什么是CoolRequestCoolRequest是一个IDEA中的接口调试插件,除了可以发起基本的HTTP请求之外,还提供了强大的反射调用能力,可以绕过拦截器,这点广受网友的好评,当然伴......
  • AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
    StableDiffusion模型,已经成为AI行业从传统深度学习时代走向AIGC时代的标志性里程碑。越来越多的开发者借助stable-diffusion-webui(以下简称SDWebUI)能力进行AI绘画领域创业或者业务上新,获得高流量及商业价值,但是面对多客户、高并发的复杂场景,使用原生StableDiffusio......