在分组之前,可以先过滤数据行。即分组的对象是过滤后的数据行。
为了利用数据库系统实现排序和统计,数据在分组前都被自动转换为临时数据库表。
对于分组后的数据,可以设置排序条件和每组最多取值个数。
把数据行分组以后,可以:
对源数据添加分组信息,即新增两列:组编号、组参数。
按组将数据分割为多个文件。
按组进行描述性统计。
按组依序显示为动态的XY图/饼图/相比较图/自比较图/箱线图。
MyBox支持六种数据分组方式:
方式 | 参数 | 完全 | 不相交 |
---|---|---|---|
等值分组 | 若干列名 | 是 | 是 |
值范围分组 | 一个列名 + 分割尺寸 | 是 | 是 |
一个列名 + 分割个数 | 是 | 是 | |
一个列名 + "开始值-结束值"列表 | 可能 | 可能 | |
时间分组 | 一个时间类型的列名 + 时间单位 | 是 | 是 |
表达式分组 | 一个行表达式 | 是 | 是 |
条件分组 | 若干行过滤表达式 | 可能 | 可能 |
行范围分组 | 分割尺寸 | 是 | 是 |
分割个数 | 是 | 是 | |
"开始行号-结束行号"列表 | 可能 | 可能 |
以下分别介绍它们。
选择若干列,把这些列的值都相同的数据行分为同一组。
把数据转换为临时数据库表
读取每行数据,按列值分组。其效果类似于SQL语句"group by"。
完全:每个数据行都属于一组。
不相交:每个数据行都只属于一组。
选择一列,按照它的值范围分割数据行。
分割条件有三种选择:
值间隔
分割的个数
"开始值-结束值"的列表
当被分割的列为时间/纪元类型:
列值被转换为毫秒数。
可设置时间单位。
设置"开始-结束"项时,应输入合法的时间格式。
在表格中增删改起止项。
对起止项可设置是否包含"开始"值或"结束"值。
把数据转换为临时数据库表。
忽略所选列的类型,将它的数据解析为双精度数值。
计算该列的最大值和最小值。
计算各组的区间
构造各组的查询语句,条件类似于"列 >= 区间开始值 AND 列 < 区间结束值"。
若按值间隔或分割个数,则:
完全:每个数据行都属于一组。
不相交:每个数据行都只属于一组。
若按"开始值-结束值"的列表,则:
可能不完全:可能有的数据行不属于任何一组。
可能相交:可能有的数据行属于多个组。
只有当数据包含时间类型的列时,才能采用这种分组方式:
选择一个时间类型的列
选择时间单位:世纪/年/月/日/时/分/秒。
例如:
时间单位为"世纪"时,则计算数据的世纪,取同世纪为同组。
时间单位为"月"时,则同年和月的数据分为同组。
时间单位为"时"时,则同年、月、日、和时的数据分为同组。
时间单位为"秒"时,则同年、月、日、时、分、和秒的数据分为同组。
把数据转换为临时数据库表
对所选时间单位,同值则同组。
完全:每个数据行都属于一组。
不相交:每个数据行都只属于一组。
定义行表达式,其值相同则同组。
例如:
表达式"new Date(‘#{开始时间}’).getDay()",按照列"开始时间"的星期值进行分组
表达式"‘#{说明}’.charAt(2)",按照列"说明"的第二个字符进行分组。
表达式"‘#{开始时间}’.substring(0, 7)",按照列"开始时间"的前7个字符进行分组。
把数据转换为临时数据库表
对每行数据计算表达式的值,同值则同组。
完全:每个数据行都属于一组。
不相交:每个数据行都只属于一组。
定义若干行过滤器,按照这些行过滤器将数据行分割成组。
把数据转换为临时数据库表。
对于每个行过滤器,遍历数据行以挑出满足条件的组成员。
可能不完全:可能有的数据行不属于任何一组。
可能相交:可能有的数据行属于多个组。
按照数据行号分割数据行。有三种选择:
分割的尺寸(数据行号间隔)
分割的个数
"开始行号-结束行号"的列表
把数据转换为临时数据库表。
计算各组的行号区间
遍历数据行,按行号指定组。
若按分割尺寸或分割个数,则:
完全:每个数据行都属于一组。
不相交:每个数据行都只属于一组。
若按"开始行号-结束行号"的列表,则:
可能不完全:可能有的数据行不属于任何一组。
可能相交:可能有的数据行属于多个组。