# MetaBase 数据可视化

## 概述

**BI（Business Intelligence）商业智能软件**是一类旨在帮助企业从大量数据中提取、分析、可视化、报告和洞察商业信息的工具。它们通过提供可视化的报表、仪表盘、数据分析和决策支持，帮助企业管理者和决策者做出数据驱动的决策。

- **数据集成与连接** 能够连接各种数据源，形成一个统一的数据池。
- **数据分析与挖掘** 能对数据进行各种分析，如趋势分析、聚类分析、预测分析等。
- **数据可视化** 提供图表、仪表盘、地图、报表等多种可视化方式，使数据更加易于理解和呈现。

### 常见的开源 BI 软件

- **Superset** 主要以桌面端为主，移动端访问体验不佳，基于 Flask 和 Python，相对较重。

- **Redash** 支持响应式设计，基于 Python 和 Flask，相比 Superset 要轻量一些。

-  **Metabase** 提供较好的移动端支持，基于 Java，相对轻量。

>[!info]  信息
> 本人使用下来，SuperSet 的移动端体验不太好，安装的过程中还遇到了一些坑。从 Redash 的官网来看，UI 的设计不是很美观。MetaBase 整体使用下来，UI 设计较为可以，移动端体验还行，对中文的支持还可以。于是就选择使用 MetaBase 作为 NAS 上配置的 BI 软件，用于数据展示。

## 软件部署

### 安装容器

```dockerfile
docker run -itd  --name MetaBase --restart always \
-p PORT:3000 \
-e MB_DB_TYPE=mysql \
-e MB_DB_DBNAME=metabase \
-e MB_DB_HOST=HOST \
-e MB_DB_PORT=PORT2 \
-e MB_DB_USER=USER \
-e MB_DB_PASS=PASSWORD \
metabase/metabase:latest
```

>[!info]  信息
>软件部署时，可以通过`-e`来指定数据库，用于存放初始化数据，不指定时，会使用 H2 数据库，存放到容器内部。

第一次登录时，需要设置用户名、邮箱和密码，也可以连接数据库，一步步设置完即可。

### 设置管理后台

`设置 -> 通用`

![](https://img.papergate.top:5000/i/2025/01/6783e8d829ee2.webp)

这里可以设置网站的 URL，需要公网访问时，需要设置。

![](https://img.papergate.top:5000/i/2025/01/6783e93373535.webp)

默认的表名和字段名的显示会被修改，可以在这里取消，进行 SQL 查询的时候不变

`设置 -> 本土化`

![](https://img.papergate.top:5000/i/2025/01/6783eacc4256d.webp)

![](https://img.papergate.top:5000/i/2025/01/6783eadac2a85.webp)

可以设置日期、时间、货币等的显示方式。

`设置 -> 公共分享`

![](https://img.papergate.top:5000/i/2025/01/6783eb6b6d944.webp)

这里可以管理哪些内容可以公开访问。

## 创建页面

![](https://img.papergate.top:5000/i/2025/01/6783ebf55461e.webp)

可以创建的内容如上所示：
- **问题 / SQL 查询**是最基本的分析单元，**问题**是以图形界面构建 SQL 查询，而 **SQL 查询**是直接以 SQL 语句构建查询。获取数据后，绑定相应可视化方法，生成图表。
- **仪表板(Dashboards)** 由一系列的**问题 / SQL 查询**组成，仪表板上有多个图表。
- **集合(Collections)** 用来存放**仪表板**和**问题 / SQL 查询**
- **模型(Models)** 将数据库中的表、视图或查询转换为业务层面的逻辑模型，用于简化数据的使用。
- **公制 (Metrics)** 关键的业务指标，用于跟踪和呈现重要的统计数据，如销售额、用户增长等。

### 问题 / SQL 查询

问题的展开界面如下，可以看出，这就是图形化的 SQL 查询：

![](https://img.papergate.top:5000/i/2025/01/6783f0388c5e4.webp)

对于 SQL 查询比较熟悉，直接使用 SQL 查询可以更快实现更加复杂的查询。比如，进行如下查询：

```mysql
SELECT 
    datetime, 
    MAX(cyclemax) AS cyclemax
FROM 
    GIL_FXHLZ
WHERE 
    datetime >= CURDATE() - INTERVAL 7 DAY
GROUP BY 
    datetime;
```

获取数据：

![](https://img.papergate.top:5000/i/2025/01/6783f12ab7617.webp)

选择可视化，并且双击对应图表：

![](https://img.papergate.top:5000/i/2025/01/6783f1e052346.webp)

可以根据个人喜好进行一定的设置：

![](https://img.papergate.top:5000/i/2025/01/6783f246ce914.webp)

>[!warning]  警告
>这里对于数据格式，有一定的要求。字符型（离散），数值型（连续）只能填写在特定的位置。关系型数据库因为有数据类型，因而支持较好。不建议使用非关系型数据库。

### 仪表板

仪表板横向上被分成了24个小格，纵向上不限，图表在横纵方向上可以自定义占用多少小格。

![](https://img.papergate.top:5000/i/2025/01/6783f4fc71310.webp)

仪表板可以创建多个标签页，比如图中的`最大值`和`有效值`。有一些预设排版样式，可供参考，通常自己拖拽**问题/SQL查询**组件到相应的位置即可。

仪表板可以被分享为公共链接：

![](https://img.papergate.top:5000/i/2025/01/6783f658b4eef.webp)

公共链接可以直接发送给他人查看，也可以以`<iframe>`格式镶嵌在其他网页中，比如使用[这篇文章](https://blog.papergate.top:5000/posts/wxpusher-%E6%B6%88%E6%81%AF%E6%8E%A8%E9%80%81/)所说的 WxPusher 消息推送推送到微信。

```python
iframe = """
	<iframe
		src="https://bi.papergate.top:5000/public/dashboard/xxxxx"
	    frameborder="0"
	    style="width: 100%; height: 950px;"
	    allowtransparency>
	</iframe>
	"""
send_wxpusher(summary='title', content=iframe)
```


---

> 作者: Aphros  
> URL: https://blog.papergate.top/posts/metabase-%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96/  

