数据重塑-实现
简单而又巧妙
这是VSeed最有意思的, 也是最核心的模块, 看似复杂, 实则非常简单与巧妙, 仅仅不到200行代码.
只要善用foldMeasures 与 unfoldDimensions, 可以将任意指标维度, 转换为固定的指标与维度, 做到足够自由的可视化映射.
foldMeasures
foldMeasures 将所有的指标 fold 为一个指标, 增加一个指标名称维度和一个指标Id维度, 所有的可能丢失信息都存储在foldInfo内, 并且在这个过程中可以进行数据统计
特性
- 特性1: foldMeasures执行完之后, 一定只有1个指标字段, 即能够将多指标描述的数据, 都转换成1个指标; 将任意多指标数据对应一个图元
- 特性2: 1. 数据条目与图元(几何元素)的数据严格一致,一条数据对应一个图元
- 特性3: 该过程进行数据统计
最妙的地方!!!
1个指标0个维度, foldMeasures 后可以获得1个指标2个维度(包括指标名称和指标Id)4个指标1个维度, 经过2次foldMeasures 后可以获得2个指标3个维度(包括指标名称和指标Id), 从而完美的可以支持双轴图等场景.N个指标0个维度, 经过Y(Y ≤ N)次foldMeasures 后, 可以获得Y个指标和2个维度(包括指标名称和指标Id)
最小可运行示例
foldMeasures
预期输出
unfoldDimensions
unfoldDimensions 在不丢失信息的前提下, 将任意的维度 concat 为一个新的维度, 所有的增加的信息都存储在unfoldInfo内.
一个完整unfoldDimensions == 所有维度值转指标 + 一次foldMeasures
但遍历dataset的开销是巨大的, 一次多余的 foldMeasures 会导致性能下降.
foldMeasures 可以直接保证一条数据只有一个指标, 因此可以直接在源数据上进行单纯的合并, 就能巧妙的达到等价效果, 最终从而大幅度提升性能.
经过思考, 理论上unfoldDimensions可以和foldMeasures完全合并, 在一次dataset 遍历中完成所有数据处理, 但为了可读性和可维护性, 在没有性能瓶颈的情况下, 暂定不合并.
特性
特性1: unfoldDimensions执行完之后, 一定只有1个指标字段, 特性2: 可以在不丢失原数据的情况下, 合并维度
最妙的地方!!!
- 只要在foldMeasures后进行, 就可以通过最简单的 concat 操作, 即可完成展开维度与合并指标, 性能极其优异.
- 任意的维度都能合并为一个全新的维度字段, 做到任意的视觉通道映射.
- 因为本身并不复杂, 所以理论上可以和
foldMeasures合并在一起, 降低遍历次数, 提升性能.
最小可运行示例
预期输出