• 报表引擎 - 数据模型


    介绍

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

    术语

    名称

    说明

    数据源

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

    数据集

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

    参数

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

    当前单元格

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

    目标单元格

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

    参数

      

    报表往往有参数,例如,日报表,当我们希望生成一张日报表时,首先需要向报表传递日期参数,然后报表才会根据我们传递进去的日期参数,生成该日的日报表。
    参数有以下几个特征:
    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/ ]

  • 相关阅读:
    4KB对齐
    小甲鱼PE详解之区块表(节表)和区块(节)(PE详解04)
    策略设计模式与c语言中的函数指针
    包装类类值传第
    java的 clone方法
    ubuntu中maven建的web项目不能将project facet设置为 dynamic web module 3.0
    maven 笔记
    eclipse中xml文件不能自动提示的解决办法
    oracle merge into 的例子
    oracle 常用sql
  • 原文地址:https://www.cnblogs.com/zhoujg/p/1604261.html
Copyright © 2020-2023  润新知