Metabase 设计理念浅析

4,436 阅读6分钟

导读

本篇内容是笔者在做 开箱即用的 BI 工具 系列的过程中的一些个人总结。为了保证文章的整体结构,特单独提炼出这一篇关于 Metabase 的解析。各位读者请放心,本篇内容会很独立,没有其他上下文也不影响阅读。

这是相关的第二篇,第一篇见 DataEase 设计理念浅析,后续计划还会有 Superset 和 Redash 的文章。

正文

核心还是探究 2 个问题:

  1. 如何解决图表属性配置问题?
  2. 如何解决不同数据源统一的问题?

Metabase 简介

Metabase is a deep product with a lot of tools to simplify business intelligence, from embeddable charts and interactive dashboards, to GUI and SQL editors, to auditing and data sandboxing, and more.

这是其 官网文档 给的定义。看一下效果图

image.png

可以观看 demo 来快速了解其操作。特别值得一提的是它首页slogan

Have questions about your data? Metabase has answers.

Meet the easy, open source way for everyone in your company to ask questions and learn from data.

注意关键字 question,整个产品都围绕这个词在设计。单从这点,就可以看出整个产品是想以普通非技术人员的视角来设计,这无疑是很有趣,很有启发性的。具体怎么设计的,我们接着看。

Question

交互操作

如下图一个 Question 由 Data、Join data、Filter、Custom column、Summarize(by) 几部分构成,我们分别来看一下。

image.png

  • Data 就是选表,必选,选择已连接的数据库中的表;
  • Join data 可以理解为 SQL 的 join,就是把两张表用各自的某个字段关联起来;
  • Filter 就是过滤,对前两步选出的数据进行筛选,如 total > 1000 这种,其本质是利用了 Metabase 提供的公式(expressions)功能,只是为常用逻辑提供了可视化方式的配置;
  • Custom column 就是自定义列。利用 Metabase 提供的公式(expressions)功能生成计算出来的新列,使用起来跟 Excel 的函数功能一样;
  • Summarize 就是统计规则,是生成图表的核心功能,比较复杂,我们单独列出来讲。

Summarize

分成 Pick the metric(以下简称 Metric) 和 Pick a column to group by(以下简称 Group) 两步。先说 Metric。点击按钮之后,会弹出内置的统计方法列表和自定义公式。内置方法包括:Count of rowsSum ofAverage of 等,选择之后会根据方法的不同,列出可选择的字段。比如选了 Sum of,就只能选择数值类型的字段;选择了 Count of rows,就不需要再选字段;选择了 Number of distinct values of,就可以选择所有类型的字段。可以添加多个 Metric。

image.png image.png

然后再说 Group,这个操作就比较简单了,可以选择所有字段,也可以添加多个。这里提一个让笔者比较小惊喜的交互的设计,对于 Date and Time 类的字段,可以选则按照什么维度汇总,如下图展示的按月,按季度等。另外数值类型、经纬度也有统计范围的选择。

image.png

解析

交互说完了,但是怎么理解这波操作呢?Metric 和 Group 对应了图表里的什么呢?

看了 DataEase 设计理念浅析 这篇文章的同学可能好理解一些,Metric 与 Group 分别对应了 DataEase 中指标维度的概念。虽然 Metabase 没有明确的提出这两个概念,而是尽量以自然语言的形式来引导用户。这么做对于简单图表是非常容易理解的,比如只有两个维度的普通折线图、柱状图。但是,当我们想使用稍微复杂一点的图表时,还是需要理解这两个概念。比如我们对 demo 视频中的例子做一下改动,想生成一个散点图,要求如下:

  1. 横轴是日期,按季度统计;
  2. 纵轴是销售的产品数量;
  3. 气泡大小表示销售产品的总金额; 数据部分需要这样配置: image.png 进入视图设置页面,默认是折线图,当我们选择散点图时,有三个图表属性需要我们选择,而且初始值都是空的。这时候我们就需要手动配置了。配置后如下图:

image.png

细心的同学可能发现了,Bubble sizeY-axis 只能选择 Metric 配的两个字段,而 X-axis 能选择所有的三个字段。对比一下,如果放在 DataEase 里,X-axis 应该就只能选择 Group 中的字段。

那么很明显了,Metabase 的图表中,每个图表属性也是具有限制的,有的只可以选择 Metric,有的只可以选择 Group,有的都可以选,这个思路与 DataEase 基本是一致的。只是它们的交互实在是差的很大,让我们很难第一眼就发现这个相同点。

第 1 个问题解析完了,来看第 2 个问题。

Data Model

Metabase 利用 Data Model 这个抽象解决了不同数据源统一的问题。当成功链接数据源后,就会根据所连数据库的表生成 Data Model(以下简称 Model),比如 demo 中的 Model 如下:

image.png

可以看到,左侧的列表实际上就是导入的数据库的,关键看右侧的 Type 列。这意味着你是可以修改某列的数据格式的,粗略数了一下,有 10 个大类,50 多个小类,单从数量来看,比起 DataEase 的 5 个左右,可谓十分细致了。比如 DATE AND TIME 大类下分了 Cancelation data、Cancelation time、Cancelation timestamp、Join date 等 15 个小类。

DataEase 设计理念浅析 一文中已经对这种设计有了说明,这里就不再赘述了。而且聪明的同学看到这里,应该已经抓到其核心理念了。

总结

开头提出的两个关键问题,Metabase 分别用 Data ModelMetric/Group 的抽象解决了。值得一提的是,整个产品到处都能够体现一个理念:要对非开发者友好

比如 Question 的设计,就很符合一般人(非开发)的思维习惯。

还有 Data Model Type 的设计,为了做到让非开发者使用方便,愣是扩充出了 50 多个情景化、语义化的小分类(虽然底层其实就是那几个数据类型而已)。

这些设计是否合理,笔者没有资格评论,但是这种设计的目的笔者是看到了。话说回来,作为技术人员,笔者还是会更关注其抽象,也就是 Data ModelMetric/Group 的部分。这块的设计思路和 DataEase 还是很像的,起码从笔者目前探究的深度来看,是看不出多大区别的。

可惜的是 Metabase 的数据源没有提供外部 API 的接入。笔者认为 API 接入是一个能兼容任何场景的接入方式,只是实现起来还是需要接入方进行一定的开发,不过毕竟能够兜住全部的底。

“完美不在于无以复加,而在于无可删减,万事莫不如此。”—— Antoine de St.Exupery