技术分享
🗒️MetaBase使用OLAP进行多维数据分析
00 分钟
2023-11-29
2023-11-29
type
status
date
slug
summary
tags
category
icon
password
Language

MetaBase 介绍

Metabase 采用“问问题”的方式实现一个数据探索 , 结果可以保存并发布为 Dashboard , 对于复杂的问题 提供了 SQL查询

“问题”

  • 自定义表达式
  • 聚合和函数
  • 可视化
  • 基于一个问题提出一个新的问题
  • 多表连接

SQL编辑器

  • 定义变量
    • SELECT count(*) FROM products WHERE category = {{cat}}
  • 设置 SQL 变量并可以向URL添加值
  • 添加到Dashboard

可视化

  • 筛选器
  • 订阅
  • 钻取功能 , 对单个图表做进一步的探索
  • 组合图表

警报

  • 当某个图表的值达到阈值的时候 , 可以通过发送电子邮件和Slack

Models

  • 自定义数据集
  • 模型动态创建派生表

人员和组

  • 单点登录
  • 团队协作
  • 会话过期

权限

  • 权限组 , 可以可以在多个组里
  • 数据权限
  • 集合权限
  • SQL代码段权限

嵌入

  • 提供 “问题” 和 Dashboard 的公共连接

其他

  • API提供
  • 自定义地图

想要了解的问题

如何使用OLAP模型方便生成图表MetaBase如何嵌入到外部应用当中如何扩展地图 , 以及能否自定义地图问题生成器能否帮助到我们什么

如何使用OLAP模型方便生成图表

实现楼宇系统中能源多维分析

每天耗电量

让耗电事实表中的DataDimId 关联时间维度的 DimensionId
notion image
通过聚合日期维度表里面的月份和天
notion image
添加到仪表盘
notion image

按楼栋分析耗电量

楼层维度中是按最细粒度并且是扁平化的数据 , 每个耗电的值都是到层的
notion image
第一层关联 :
事实表中的维度ID关联楼层维度中的DimensionID
第二次关联 :
用第一次的关联得到的BuildingID去关联新的楼ID
notion image
最终得到上一层的楼栋的值
notion image

耗水相关

notion image

实现下钻功能

比如按月统计,点击某月能跳转到该月每天的数据
实现方式 : 对每月耗水量添加一个自定义目的地 , 跳转到一个叫做 “某月每天的耗水量图表”
notion image
  • 比如点击5月的时候
notion image
  • 会跳转到五月的详情
notion image
  • 同理还可以下钻到 在点某一天的时候 , 把这一天每小时的耗水量显示出来

组合的图表

合并两个保存的问题
在编辑仪表板时 , 可以添加系列进行多个问题的合并
notion image

MetaBase如何嵌入到外部应用当中

进入管理员后台启用嵌入
notion image
  • 启用之后会生成一个密钥 用于API请求
notion image
  • 通过一段代码段 嵌入到webApp当中
      notion image
注意 : MetaBase的开源版本只允许嵌入独立图表或仪表板 , 如果想为用户提供更具互动性、可浏览性的体验则需要将MetaBase全应用嵌入
但是此功能仅在专业版和企业版中才能使用
notion image

Models的使用

当你在添加完数据库后, 可能绝大部分表是不需要使用的, 并且表字段意义可能不明确,非专业人员使用可能不知所意, 所以你需要对你的数据库进行编辑,将不要使用的表隐藏起来,将表字段起一个别名。

迁移MetaBase的H2数据库

  1. 备份H2数据库 docker cp metabase:/metabase.db/metabase.db.mv.db ./
  1. 停止现有的MetaBase容器
  1. 下载 JAR 下载的版本确保和现在用的版本是一致的
  1. 运行迁移命令
    1. export MB_DB_TYPE=mysql export MB_DB_CONNECTION_URI="jdbc:mysql://localhost:3306/metabase?user=root&password=xxxxxx" java -jar metabase.jar load-from-h2 /path/to/metabase.db # do not include .mv.db
      1. notion image
  1. 删除以前的容器 , 并启动一个新的Docker容器,使用新的数据库
    1. docker run -d -p 3000:3000 \ -e "MB_DB_TYPE=mysql" \ -e "MB_DB_DBNAME=metabase" \ -e "MB_DB_PORT=3306" \ -e "MB_DB_USER=root" \ -e "MB_DB_PASS=xxxxx" \ -e "MB_DB_HOST=192.168.50.173" \ --name metabase metabase/metabase

升级MetaBase

  • 备份MetaBse, 将docker中的metabase.db复制出来 , 如果是数据库连接的请忽略,不是数据库连接的先设置成数据库连接,参考 “迁移MetaBase的H2数据库”
    • docker cp metabase:/metabase.db/metabase.db.mv.db ./
  • 停止当前的 Docker 容器 docker stop metabase
  • 拉取最新的MetaBase Docker 镜像: docker pull metabase/metabase:latest
  • 删除之前的容器 docker rm metabase
  • 启动新的 Docker 容器
    • docker run -d -p 3000:3000 -e MB_DB_CONNECTION_URI="jdbc:mysql://192.168.50.173:3306/metabase?user=root&password=xxxxx" --name metabase metabase/metabase:latest
启动时,Metabase 将自动执行升级。Metabase 完成升级后,将运行新版本。
  • 查看日志 docker logs -f metabase
  • 进入页面
    • notion image

API

登陆并获取会话令牌

POST /api/session/
示例
notion image
获得这个session id后需要在后续请求的标头中包含该会话令牌 , 比如

查询某个图表的数据 (需认证)

POST /api/card/:card-id/query
需要认证的访问配置的报表(question,这里叫card)
参数:
  • card-id 配置的报表的ID,是数字
  • parameters 查询参数
notion image
示例
notion image

查询某个图表的数据 (免认证)

不需要认证的访问分享出来的报表
参数:
  • uuid 分享出来的uuid
  • parameters 请求参数,可以添加过滤条件

示例

notion image
 

评论