前端搞报表 | 数据分析提效全链路解决方案( 二 )


  • 设计了一个数据管道的模式 , 为什么要设计这种数据管道的模式?是因为整个数据分析的流程 , 往大了拆可以拆成三大块 , 分别是数据获取、数据加工跟数据可视化 。 整条链路像一个数据管道流 , 为了让整个的数据流处理流程更加的灵活与可插拔 , 设计了这样一套 pipeline 数据处理模式
  • 知识库 , 在应用初始化的时候 , 会去自动识别所有的底层数据集 , 对底层数据集的数据类型进行分类 , 并且生成对应的语义化信息 , 知识库会作为我们整个解决方案的基石 , 为后面的整个的数据加工跟语义化转换处理提供一个非常重要的能力
  • SQL 生成器就是我在上面提到的 , 我把 BI 同学写的 SQL , 以原子粒度抽象并沉淀起来 , 前台传入 DSL 去描述组装规则 , 组装之后 , 会有一层动态编译层与 AST 语法解析的逻辑 , 来生成最终的一个 SQL 字符串
  • 数据加工 。 前台可视化图表的输入数据是可被抽象的 , 这里做的事情是把 SQL 查询的结果跟前台可视化图表的标准数据源 , 做一层数据格式转化 , 而转换的过程是抽象的 , 可以理解为是一个黑盒子 , 对前台来说 , 它不需要去兼容各式各样的数据格式 。
展现层目前提供的能力是数据看板 , 在底层提供了智能图表渲染的能力 。 智能图表渲染分为两大块:
  • 围绕闲鱼的业务场景 , 定义了一系列能够更凸显业务波动信息的 , 对业务有价值的数据的可视化图表渲染方式 , 并把它抽象到我们的图表库里面
  • 引入算法能力 , 对数据进行智能提取 , 像显著性提取等类型的算法能力 , 把有价值的信息更直观的强化给前台用户 , 把一些可能对业务没什么价值的信息 , 在可视化渲染时弱化
服务层 FaaS
前端搞报表 | 数据分析提效全链路解决方案
本文插图
服务层 FaaS 基于集团内部提供的 Midway Faas - Serverless 开发框架 。 在底层抽象了一系列的BaaS 基础服务 , 包含数据库查询、权限校验、日志上报、知识库 。
前台入参通过 DSL 解析之后 , 会再进一步细分为几个局部 DSL , 每个局部的 DSL描述了 SQL 的具体拼装规则 , 针对每个局部的 DSL 会执行动态编译的逻辑 。 动态编译会生成 SQL 字符串中间产物 , 再对中间产物进行 AST 语法树解析 , 去判断有哪些 原子 SQL 索引了同样的表、同样的分区、不同的字段 , 把重复的原子 SQL 进行合并 , 合并之后会得到最终的 SQL 字符串 , 将 SQL 字符串传入到数据库查询得到查询结果 。 在闲鱼业务场景中 , 用到最多的是: X 轴、Y 轴的业务图表 , 像分布图、趋势图 , 以及 Excel 明细这种二维数组的可视化图表 。 数据加工负责把 SQL 查询的结果 , 进行数据格式转换 。
完成数据转换之后再继续完成数据语义化的处理 。 在存储表的时候 , 为了减少存储成本 , 会要求存储图表的存储量尽量小 , 在存表的时候会用 Number 去代表一些 String 类型的表达 。 比如说:是否发布会用 0 跟 1 去表达“否 / 是” 。 但在前台可视化的时候 , 如果直接把 0 跟 1 透出到前台 , 对于运营、产品来说其实是一脸蒙逼的 , 他需要花费一定的理解成本来进行思维转换 。 我做的一个事情是:在数据加工的逻辑里面 , 插入一个语义化的处理 , 基于之前自动生成的知识库 , 先做 SQL 查询的数据结果的数据加工 , 再进行一层语义转化 , 把 0 跟 1 转换成“否 / 是” , 最终把这部分数据通过接口返回给前台 。
前台智能图表渲染
前端搞报表 | 数据分析提效全链路解决方案
本文插图
这里是一个更加直观的示例图 。 画红线的部分是下面放大的部分 。 如果只看上面那张图 , 其实看不出任何有价值的信息 。 因为 Y 轴被拉大了 , 导致局部的指标变化被抹平 , 直接看的话会认为这些指标没有任何波动 。 对业务来说 , 它需要关注的是波动、突变的部分 。 如果把这些信息在可视化的时候抹平了 , 用户发现问题的窗户其实基本上被你关闭了 。 这里面智能渲染做的事情 , 是通过算法加工的逻辑做显著性提取 , 把波动明显的、对业务有参考价值的数据优先展现出来 , 其他选择性地弱化处理 。 右边是实现的代码片段 , 整体的实现逻辑是去遍历递归所有的 X 轴 Y 轴 , 检查有交集的部分以及 Y 轴波动区间范围 。


推荐阅读