介绍

本文档是报表模型的数据模型部分,说明平台报表中涉及的报表数据相关

术语

名称

说明

数据源

数据源是与数据存储的连接。支持数据源适配

数据集

定义报表数据来源的一个二维表

参数

报表往往有参数,例如,日报表,当我们希望生成一张日报表时,首先需要向报表传递日期参数,然后报表才会根据我们传递进去的日期参数,生成该日的日报表。

当前单元格

在进行单元格计算时,写有表达式的单元格为当前单元格。条件表达式中有?单元格表达式都是以当前单元格为基准计算

目标单元格

表达式中返回单元格时,返回的单元格为目标单元格。条件表达式中单元格表达式都是以目标单元格为基准计算

参数

 

报表往往有参数,例如,日报表,当我们希望生成一张日报表时,首先需要向报表传递日期参数,然后报表才会根据我们传递进去的日期参数,生成该日的日报表。
参数有以下几个特征:
1、  参数有数据类型
2、  参数有缺省值
3、  参数有输入格式和最大宽度
参数可以在数据集和表达式中被引用,表达式中直接写参数名引用,

 

宏代表没有数据类型的一个字符串,在报表运算时将用宏值替换宏变量所占的位置。可以在报表中任何位置引用宏变量,如单元格值、表达式、数据集定义、单元格属性表达式中等,引用方法为%{宏变量名}

表达式计算阶段

表达式分为在扩展期间和分页期间计算,和页眉相关的表达式在分页阶段计算,如页码、页数等。系统会对自动判断表达式的计算阶段

操作符

符号

说明

左操作数

右操作数

运算结果

示例说明

:

单元格

单元格

List 集合

A1:D5 由A1和D5为两个对角点圈起的矩形中的单元格集合,可以使用在sum,max 等聚集函数中作参数

in

包含

数值
字符串

List 集合

布尔值

A1 in (1,2,3) 是否在集合中左右操作数均可为单值或数组,如  1 in A1{00}[] 表示1是否存在00格下A1的扩展格子的值列表中

to

整数

整数

List 集合

1 to 5表示数组,等同于[1,2,3,4,5]

.

对象成员

数据表

字段

字段值

RKD.RKDID表示表入库单的ID字段

?

参数表达式

单元格

 

当前单元格值

单元格条件过滤时,用参数表达式来获得当前单元格的值。

@

系统宏

 

 

 

@value表示当前单元格值,@row,@col表示当前单元格行列号,@DRow,@DCol表示设计期单元格行列,@pageIndex代表当前页码,@pageCount代表总页数

表示日期类型,@为字符串第一个子目,其余为日期字符串

日期

 

日期

'@2000-1-1':表示2000年1月1日

{}

选择条件表达式

字符串

 

 

C5{A5:1}层次坐标中的条件表达式
C5{A5:1}[]表示该层次坐标中的所有目标单元格,代表一个集合

[]

集合

过滤条件以及排序或者数组位置

 

 

[1,2,3,4]:表示一个元素为1,2,3,4 的数组
CKD.CLID[DJ>10]:表示材料出库单的单价大于10的CLID字段列表
CKD.CLID[DJ>10|CLMC]:表示材料出库单的单价大于10的CLID字段列表,列表根据材料名称排序 。只有数据集支持排序,单元格目前不支持。
CKD.CLID[|CLMC ACS;CLJG DESC]:表示材料出库单的所有CLID字段列表,列表根据材料名称顺序,材料价格倒序
A1[2]表示集合单元格A1中的第2 个元素。CKD.CLID[2]取出库单的第二行材料ID值
C5[C5>60][2]标识及格分数列表的第2个元素

&

取位置

主单元格

 

&A1

操作数必须为当前单元格的主格子,位置从1开始

%

引用参数

参数标识

 

参数数据类型

在元数据定义参数列表,%year表示外面传入的年份参数

集合函数

其他

表格运算示例

当前单元格

表达式

应用场景

备注

B1

A1+10

同级别单元格赋值,比如A1为表的一个字段,把B1设置成A1的值加10

A1/B1为同级单元格

 

&A1

位置:序号

A1为扩展单元格

 

ds1.id[type=B1]

数据级函数的选择条件,取type字段=B1的所有记录的ID字段

 

B2

avg(B1[B1<60])

条件表达式,求不及格的平均分

B1为成绩

C3

C2/sum(C2{00}[])

根坐标:占比运算

计算当前C2格占C2合计的百分比

 

Count(b2{00}[b2>$b2])+1

排名

B2为数值单元格

 

D2/D2{A2:+0}[(?c2-1)==C2 and ?b2=B2) or ((?b2-1)=B2 and ?c2=4 and C2=10)]

比上期

 

 

D2/D2{B2:-1,C2:+0}

比去年同期

 

 

C2+D2{-1}

累计金额

C2为合同金额,D2为累计金额

约束

页面宏

  1. 不能影响扩展过程:不能在集合表达式中使用

页统计

  1. 页统计表达式只统计单元格集合表达式

算法说明

单元格变量

  1. 如果没有设置左主格和上主格,先查找目标单元格和当前单元格共同的左主格l和上主格t
  2. 如果左主格的源格为目标单元格,则返回左主格l;如果上主格的源格为目标单元格,则返回上主格t
  3. 如果左主格的源格L为目标单元格的直接左主格,在l单元格的附属格中查找与目标单元格匹配的单元格c,如果单元格的上主格属于t,则返回单元格c;上主格按左主格方法查找
  4. 如果左主格源格L是目标单元格的间接左主格,在l单元格的附属格中查找是目标单元格的递归左主格的单元格c,然后把左主格设置为c再次调用步骤4直到满足条件3而调用3获取单元格值

单元格列表

  1. 查找目标单元格和当前单元格共同的左主格l和上主格t
  2. 如果左主格的源格为目标单元格,则返回左主格l;如果上主格的源格为目标单元格,则返回上主格t
  3. 如果左主格的源格L为目标单元格的直接左主格,在l单元格的附属格中查找与目标单元格匹配的单元格c,如果单元格不是扩展格,并且上主格属于t, 则返回单元格c,如果单元格c为扩展格,则查找c的ExtCells中的上主格属于t的单元格列表;如果没有符合条件的单元格,则按照3从上主格开始查找 并返回符合条件的单元格

如果左主格源格L是目标单元格的间接左主格,在l单元格的附属格中查找是目标单元格的递归左主格的单元格c,然后把左主格设置为c再次调用步骤4直到满足条件3而调用3获取单元格列表

更多内容:  报表引擎设计.pdf

欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ]

转载于:https://www.cnblogs.com/zhoujg/archive/2009/11/17/1604261.html

报表引擎 - 数据模型相关推荐

  1. 采用Excel作为设计器的开源中国式报表引擎:NopReport

    中国式报表是复杂结构报表的代名词,它泛指国内信息化领域经常出现的基于多源数据,采用行列交叉.多层级表头.自由分片合并等形式所展现的信息汇总报表. 为什么会存在"中国式报表"这一说法 ...

  2. 报表引擎API开发入门— EJB程序数据源

    2019独角兽企业重金招聘Python工程师标准>>> 我们前面讲了几个数据源,今天我们来讲一下EJB数据源,这篇讲完我们数据源这部分就讲完了.数据连接不需要直接访问数据库,而是使用 ...

  3. 基于NPOI的报表引擎——ExcelReport

    前言 其实现在说ExcelReport是报表引擎还为时尚早,但该组件我既然要决心维护下去,这便算是初衷吧! 1.现在,ExcelReport能为你做什么呢? 如果,你有导出数据到Excel的需求,Ex ...

  4. 报表引擎API开发入门—简单程序数据集

    小编最近接的项目是有关报表开发的,很想把这部分知识分享出来.希望大家能够支持我!不多说,马上进入我们今天的话题. API基本知识 小编最近项目所做的是关于一个报表软件-FineReport报表开发的一 ...

  5. 如何设计一个报表引擎

    编者按:流程的执行离不开报表数据,而报表引擎是处理报表数据的关键,那么如何设计一个报表引擎呢?它的应用场景有哪些? 报表引擎 重要变革 在报表历史上,有两次重要变革,第一次革命,针对进入中国市场的外国 ...

  6. 如何开发一款报表引擎(一) 框架梳理

    最近大佬跟我说,你来开发一款报表引擎,不要多复杂,只要实现这些功能就行:当时我内心惶恐,因为光是理解这个引擎我就觉得挺费劲,毕竟跟我之前开发的东西不太一样,但是这件事情大佬发话了,那就是要想办法去倒腾 ...

  7. 创业第22天,竞价助手嵌入jfreechart报表引擎

    创业第22天,竞价助手嵌入jfreechart报表引擎, 竞价助手具备了商业报表展现能力.

  8. springboot2.x集成ureport2.2.9搭建报表引擎

    springboot2.x集成ureport2.2.9搭建报表引擎 1.创建springboot项目,修改pom.xml添加相关依赖 2.增加src/main/resources/context.pr ...

  9. 报表引擎 - 报表应用思路

    OpenExpressApp计划之内包括一个报表引擎OpenReport.2006年时在公司负责研究并实现了一个报表引擎,写了几篇博文(<交叉表的报表设计>.<研究润乾报表的实现&g ...

最新文章

  1. linux的周期计划任务叫atd,linux计划任务
  2. 常用函数(字符和字符串)
  3. 深度学习(00)——GPU版本的TensorFlow
  4. Android - 模块添加与编译
  5. TCP/IP源码分析
  6. flink sql运用入门
  7. Tableau系列软件概况
  8. c++基础(上) 听课流水账
  9. 天池风控算法大赛来了!
  10. lumion计算机丢失string,Lumion计算机丢失string
  11. mac无法安装dmg文件,报无可装载系统错误
  12. 基于A*算法的迷宫游戏
  13. Unity3D中,鼠标控制相机视角并且跟随玩家的几种方法(第三人称)的学习整理
  14. Linux Kernel Development读书笔记
  15. 安卓Android系统超级终端命令行大全
  16. 通过淘宝商品ID和sku ID 获取到淘宝商品SKU信息接口,可获取sku价格,sku销量,sku图片及sku库存,SKU尺寸体积接口等参数
  17. 神经网络基础学习小记
  18. python自动收取蚂蚁森林能量_通过测试工具自动收取蚂蚁森林能量
  19. 计算机网络知识汇总(超详细)
  20. java获取队列长度_关注Java线程池的任务队列长度

热门文章

  1. cop2000计算机组成原理,COP2000计算机组成原理实验系统
  2. C语言面试高频问题:自己代码实现字符串相关的常用API
  3. STM32端口复用和端口重映射
  4. 单列多行转单行单列合并oracle_oracle中多行转单行的两种方法
  5. thinkphp省略php,ThinkPHP的截取字符串函数无法显示省略号的解决方法
  6. final 在 java 中有什么作用?
  7. vscode浏览器打开html
  8. 软件:9款超级实用的办公软件,值得收藏!
  9. 硬件编程:77条STM32知识汇总
  10. 学编程一定要掌握的186个关键单词!