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

news2024/10/7 4:30:58

系列文章:

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

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

概要

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

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

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

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

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

数据中的主从关系

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1574007.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python爬虫学习第十五天-------ajax的get和post请求

嗨嗨嗨!兄弟姐妹大家好哇!今天我们来学习ajax的get和post请求 一、了解ajax Ajax(Asynchronous JavaScript and XML)是一种在 Web 开发中用于创建交互式网页应用程序的技术。通过 Ajax,网页可以在不重新加载整个页面…

C语言——#define的使用

#define定义常量 基本语法 #define name stuff //(#define)(变量名)(定义的数值) 这里记得,是不加分号的 定义常量(这里 就要涉及我们经常说的宏定义) 定义常量的使…

langchain 学习笔记-FunctionCalling三种方式

ChatGPT 基于海量的训练数据生成答案,所以它无法回答训练数据中没有的信息或搜索信息 。人们希望 ChatGPT 具有对话以外的各种功能,例如“我想管理我的待办事项列表”。 函数调用是对此类请求的响应。 通过使用函数调用,ChatGPT 现在可以在生…

牛客 2024春招冲刺题单 ONT98 牛牛猜节点【中等 斐波那契数列 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/6a3dfb5be4544381908529dc678ca6dd 思路 斐波那契数列参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规…

Nestjs中使用MQTT

准备工作,首先就得硬件的小伙伴自己吧硬件部分配置好,成功连通云端,并成功推送数据。然后就是服务器装好Nestjs 。做好这些准备工作就可以开始了!!! 然后直接开始工作: 一、安装 # 直接安装最…

Spring boot框架Rouyi Cloud入门之token

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…

Android Glide配置AppGlideModule定制化线程池,Kotlin(1)

Android Glide配置AppGlideModule定制化线程池,Kotlin(1) plugins {id org.jetbrains.kotlin.kapt }implementation com.github.bumptech.glide:glide:4.16.0kapt com.github.bumptech.glide:compiler:4.16.0 import android.content.Context…

布局图纸电子管理系统,布局图纸电子管理系统哪个好?

布局图纸电子管理系统是一个涉及多个步骤和策略的过程,旨在优化图纸的存储、检索、共享和安全性。下面是一个可能的布局图纸电子管理系统的框架和关键要素: 一、需求分析 明确电子管理系统的具体需求,包括用户群体、功能模块、安全性要求等。…

竞赛 交通目标检测-行人车辆检测流量计数 - 竞赛

文章目录 0 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 毕业设计…

NzN的数据结构--实现双向链表

上一章中,我们学习了链表中的单链表,那今天我们来学习另一种比较常见的链表--双向链表!! 目录 一、双向链表的结构 二、 双向链表的实现 1. 双向链表的初始化和销毁 2. 双向链表的打印 3. 双向链表的头插/尾插 4. 双向链表的…

java内存模型和线程

java内存模型 一个服务端需要同时对多个客户端提供服务,就是并法的具体场景。 衡量一个服务性能的好坏,每秒实务处理数(Transactions Per Second,TPS)是重要指标,它代表一秒内服务端平均能响应的请求总数。 硬件的效率和一致性 …

汇川PLC学习Day4:电机参数和气缸控制参数

汇川PLC学习Day4:伺服电机参数和气缸控制参数 一、伺服电机参数二、气缸参数1. 输入IO映射(1)输入IO映射(2) 输入IO触摸屏标签显示映射 2. 输出IO映射(1)输出IO映射(2) …

java中的正则表达式和异常

正则表达式: 作用一:用来校验数据格式是否合法 作用二:在文本中查找满足要求的内容 不用正则表达式:检验QQ号是否合法,要求全部是数字,长度在6-20,不能以0开头 public class test {public stat…

Python爬虫-爬取药膳食谱数据

🎈 博主:一只程序猿子 🎈 博客主页:一只程序猿子 博客主页 🎈 个人介绍:爱好(bushi)编程! 🎈 创作不易:喜欢的话麻烦您点个👍和⭐! 🎈…

顺序表的应用之通讯录

学习了顺序表之后,我们也得知道它的实际用途吧!所以,我们今天来学习一下通讯录的实现。 typedef struct personInfo SLDataType; contact.h #define NAME_MAX 20 #define GENDER_MAX 20 #define GTEL_MAX 20 #define ADDR_MAX 100 #include&…

post请求爬虫入门程序

<!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version> </dependency><!-- 爬虫需…

复现ChatGLM-6B

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 项目代码https://github.com/THUDM/ChatGLM-6B 权重开放:…

VMware Workstation Pro 全屏模型隐藏上方命令栏

点击命令栏左侧的小图标&#xff0c;可以隐藏或固定命令栏。 如果要取消白线&#xff0c;参考&#xff1a; 虚拟机全屏后隐藏vmware菜单栏的问题

【KLEE】使用Docker安装KLEE KLEE的简单使用 KLEE的约束文件

本文架构 零、前言一、KLEE简介二、Docker安装KLEE1. 使用apt安装docker2.拉取klee镜像3.使用git 拉取klee源码4.安装klee镜像5. 运行镜像 三、试用KLEE的examples1.查看并了解待测文件examples/get_sign/get_sign.c2.KLEE进行符号测试的基本步骤编译成LLVM位码文件使用KLEE进行…

爬取微博热搜榜

需求&#xff1a; 利用python和xpath爬取微博热搜榜 步骤&#xff1a; 爬虫的步骤 获取网页数据-》分析网页数据-》提取网页数据。 1&#xff0c;首先获取微博热搜数据。 热搜主页为 https://s.weibo.com/top/summary?caterealtimehot 打开收&#xff0c;按F12获取网页源…