数据集单元格

2021-10-10 Guide
  • 开发人员
  • 报表
About 15 min

# 数据集

数据集是报表展示数据的来源,一般情况,定义好数据集后,在数据集对应的字段上点击即可在目标单元格上添加对应的数据绑定信息,然后在其属性面板设置聚合方式、迭代方向等。

数据集单元格填入之后,支持修改相应配置

  • 数据展开方式
    • 默认向下纵向展开
    • 向右横向展开
    • 不展开(多值不展开会把所有值用逗号连接填入到一个单元格)
  • 数据集配置
    • 聚合方式
    • 排序方式
    • 数据过滤
    • 数据映射
  • 格式化
  • 配置条件属性

# 数据展开

  • 分组向下展开

    输出结果

规则: 父子格数据限定

子格如果与父格属于相同数据集,子格的数据会被父格限制

数据集单元格运算过程

DEPARTMENT_ID = 1 对应的子格B1单元格group聚合运算:
首先利用父格DEPARTMENT_ID = 1限定出所有部门ID为1的数据行,如果有配置数据过滤则先对明细数据进行过滤运算,然后对EDUCATION_LEVELgroup分组运算

  • 分组向右展开

    输出结果

  • 分组不展开

# 过滤条件

请牢记

数据集的过滤条件作用于聚合计算之前对应的明细数据,非计算之后的结果数据, 从sql的角度理解,相当于where过滤,而非having过滤, 下面用一个案例解释


配置计算不同学历的人数统计,未添加任何过滤条件结果如下:

利用数据绑定明细数据的特性,我们可以对B3单元格做如下的过滤

统计男性生日在1940之前或者女性生日在1950之后, 对于数据集的明细数据每一条都能获取到所有其他属性值,所以虽然B3单元格选定的属性为FULL_NAME,但是在过滤中任然可以使用其他属性过滤

# 明细数据过滤

明细数据过滤

如果对于数据集统计格B3配置过滤条件,当前值大于200, 侧输出为全部0
因为此时的当前值>200实际执行的是,当前绑定的属性 employee.FULL_NAME > 200

子格过滤完没有数据,父格还会显示吗?

从上面的例子中还能看出,就算是子格数据被全部过滤, 父格依旧会输出,因为父格带动子格,就算是子格没有值,父格会输出自己的值

# 明细数据属性与属性比较

过滤条件配置中右值(比较值)支持属性表达式#.属性名,用于配置数据集中两个不同属性的比较,如下图所示,统计进入指标之前,需要过滤的点击数 > 进入数的脏数据,然后进行汇总

# 怎么实现汇总值过滤

怎么实现汇总值过滤,或者给特殊的值设定颜色或不显示呢?

可以通过配置单元格条件属性,这里属性条件左值设置为表达式,表达式内容为#,这样就可以获取单元格的值,并且做出判断

#号表达式为当前单元格的内容

  • 设置满足条件的单元格属性前景色(字体颜色)为蓝色,作用范围当前行,效果如下
  • 设置满足条件的单元格属性整行行高为0,则整行不输出

# 数据映射

配置数据字典,如employee数据集中只有部门ID,需要把ID映射为部门名称可以通过配置数据映射

  • 简单映射

    输出结果

  • 数据集映射

输出结果

# 数据关联(可跨源)

当我们有多个数据集单元格,单元格之间有父子格关系,如下图设计器所示

A1: dept.group(DEPARTMENT_DESCRIPTION)
B1: employee.group(EDUCATION_LEVEL)

按照父子格数据限制原理

子格如果与父格属于相同数据集,子格的数据会被父格限制,
但是上面的父子格数据集不同, 不对子格做任何过滤的情况下B2展开数据不受限制, 因为没有形成关联条件

可以看到每次展开的内容是完全一模一样的, 如下:

不过,我们还是可以利用父子格迭代带动子格原理,对B1单元格设定过滤条件,让两个不同的数据集形成关联
来试试吧,我们对B1单元格设定过滤条件, B1单元格对应的部门属性DEPARTMENT_ID(也就是在employee表中的部门ID), 在表达式dept.select(DEPARTMENT_ID)集合中, 实现两个数据集的关联

多值使用集合中,唯一值使用等于

输出结果如下:

性能警告

数据集关联运算常用于异构数据源之间的关联,如果两个数据集都是同一个数据库建议在数据库上进行表关联,性能会更加可控,数据库进行表关联有很多种优化手段性能大多数场景要优于在Report引擎

Last update: February 24, 2025 10:55