介绍
本文档是报表模型的数据模型部分,说明平台报表中涉及的报表数据相关
术语
名称 |
说明 |
数据源 |
数据源是与数据存储的连接。支持数据源适配 |
数据集 |
定义报表数据来源的一个二维表 |
参数 |
报表往往有参数,例如,日报表,当我们希望生成一张日报表时,首先需要向报表传递日期参数,然后报表才会根据我们传递进去的日期参数,生成该日的日报表。 |
当前单元格 |
在进行单元格计算时,写有表达式的单元格为当前单元格。条件表达式中有?单元格表达式都是以当前单元格为基准计算 |
目标单元格 |
表达式中返回单元格时,返回的单元格为目标单元格。条件表达式中单元格表达式都是以目标单元格为基准计算 |
参数
|
报表往往有参数,例如,日报表,当我们希望生成一张日报表时,首先需要向报表传递日期参数,然后报表才会根据我们传递进去的日期参数,生成该日的日报表。 |
宏
|
宏代表没有数据类型的一个字符串,在报表运算时将用宏值替换宏变量所占的位置。可以在报表中任何位置引用宏变量,如单元格值、表达式、数据集定义、单元格属性表达式中等,引用方法为%{宏变量名} |
表达式计算阶段 |
表达式分为在扩展期间和分页期间计算,和页眉相关的表达式在分页阶段计算,如页码、页数等。系统会对自动判断表达式的计算阶段 |
操作符
符号 |
说明 |
左操作数 |
右操作数 |
运算结果 |
示例说明 |
: |
到 |
单元格 |
单元格 |
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}层次坐标中的条件表达式 |
[] |
集合 |
过滤条件以及排序或者数组位置 |
|
|
[1,2,3,4]:表示一个元素为1,2,3,4 的数组 |
& |
取位置 |
主单元格 |
|
&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为累计金额 |
约束
页面宏
- 不能影响扩展过程:不能在集合表达式中使用
页统计
- 页统计表达式只统计单元格集合表达式
算法说明
单元格变量
- 如果没有设置左主格和上主格,先查找目标单元格和当前单元格共同的左主格l和上主格t
- 如果左主格的源格为目标单元格,则返回左主格l;如果上主格的源格为目标单元格,则返回上主格t
- 如果左主格的源格L为目标单元格的直接左主格,在l单元格的附属格中查找与目标单元格匹配的单元格c,如果单元格的上主格属于t,则返回单元格c;上主格按左主格方法查找
- 如果左主格源格L是目标单元格的间接左主格,在l单元格的附属格中查找是目标单元格的递归左主格的单元格c,然后把左主格设置为c再次调用步骤4直到满足条件3而调用3获取单元格值
单元格列表
- 查找目标单元格和当前单元格共同的左主格l和上主格t
- 如果左主格的源格为目标单元格,则返回左主格l;如果上主格的源格为目标单元格,则返回上主格t
- 如果左主格的源格L为目标单元格的直接左主格,在l单元格的附属格中查找与目标单元格匹配的单元格c,如果单元格不是扩展格,并且上主格属于t, 则返回单元格c,如果单元格c为扩展格,则查找c的ExtCells中的上主格属于t的单元格列表;如果没有符合条件的单元格,则按照3从上主格开始查找 并返回符合条件的单元格
如果左主格源格L是目标单元格的间接左主格,在l单元格的附属格中查找是目标单元格的递归左主格的单元格c,然后把左主格设置为c再次调用步骤4直到满足条件3而调用3获取单元格列表
更多内容: 报表引擎设计.pdf
欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ]