MetaBase使用OLAP进行多维数据分析

351 阅读5分钟

MetaBase使用OLAP进行多维数据分析

官方介绍:用最简单、快速的方式让你们公司的每一位拥有商业智能与分析。

MetaBase 介绍

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

"问题"

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

SQL编辑器

  • 定义变量

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

  • 添加到Dashboard

可视化

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

警报

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

Models

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

人员和组

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

权限

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

嵌入

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

其他

  • API提供
  • 自定义地图

想要了解的问题

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

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

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

每天耗电量

  1. 让耗电事实表中的DataDimId 关联时间维度的 DimensionId

image-20220705144133822

  1. 通过聚合日期维度表里面的月份和天

image-20220705145708468

  1. 添加到仪表盘

image-20220705150509968

按楼栋分析耗电量

楼层维度中是按最细粒度并且是扁平化的数据 , 每个耗电的值都是到层的

image-20220705155720154

第一层关联 :

事实表中的维度ID关联楼层维度中的DimensionID

第二次关联 :

用第一次的关联得到的BuildingID去关联新的楼ID

image-20220705155851603

最终得到上一层的楼栋的值

image-20220705160136789

耗水相关

image-20220706161747328

实现下钻功能

比如按月统计,点击某月能跳转到该月每天的数据

实现方式 : 对每月耗水量添加一个自定义目的地 , 跳转到一个叫做 "某月每天的耗水量图表"

image-20220708122319441

  • 比如点击5月的时候

image-20220708122626954

  • 会跳转到五月的详情

image-20220708122642389

  • 同理还可以下钻到 在点某一天的时候 , 把这一天每小时的耗水量显示出来

组合的图表

合并两个保存的问题

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

image-20220708134321844

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

进入管理员后台启用嵌入

image-20220707120802117

  • 启用之后会生成一个密钥 用于API请求

image-20220707120944659

  • 通过一段代码段 嵌入到webApp当中
  • image-20220707122948290

注意 : MetaBase的开源版本只允许嵌入独立图表或仪表板 , 如果想为用户提供更具互动性、可浏览性的体验则需要将MetaBase全应用嵌入

但是此功能仅在专业版和企业版中才能使用

image-20220707123313950

Models的使用

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

迁移MetaBase的H2数据库

  1. 备份H2数据库 docker cp metabase:/metabase.db/metabase.db.mv.db ./

  2. 停止现有的MetaBase容器

  3. 下载 JAR 下载的版本确保和现在用的版本是一致的

  4. 运行迁移命令

    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
      
    2. image-20220708142425184
  5. 删除以前的容器 , 并启动一个新的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

    1. 备份MetaBse, 将docker中的metabase.db复制出来 , 如果是数据库连接的请忽略,不是数据库连接的先设置成数据库连接,参考 "迁移MetaBase的H2数据库"

    • docker cp metabase:/metabase.db/metabase.db.mv.db ./
    1. 停止当前的 Docker 容器 docker stop metabase
    1. 拉取最新的MetaBase Docker 镜像: docker pull metabase/metabase:latest
    1. 删除之前的容器 docker rm metabase
    1. 启动新的 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 完成升级后,将运行新版本。

    1. 查看日志 docker logs -f metabase
    1. 进入页面
    image-20220708144743955

参考官方文档

API

登陆并获取会话令牌

POST /api/session/

示例

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"username": "xxxxxx", "password": "xxxxxxxx"}' \
https://xxxxxxxxx/api/session

image-20220713144140527

获得这个session id后需要在后续请求的标头中包含该会话令牌 , 比如

"X-Metabase-Session: 38f4939c-ad7f-4cbe-ae54-30946daf8593"

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

POST /api/card/:card-id/query

需要认证的访问配置的报表(question,这里叫card)

参数:

  • card-id 配置的报表的ID,是数字
  • parameters 查询参数

image-20220713145613102

示例

curl -X POST   -H "Content-Type: application/json"   -H "X-Metabase-Session: 5700aa91-8947-4e4f-bed2-e77390024902"   -d '{ "ignore_cache": true}' http://192.168.50.173:3000/api/card/7/query

image-20220713150508745

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

不需要认证的访问分享出来的报表

参数:

  • uuid 分享出来的uuid
  • parameters 请求参数,可以添加过滤条件

示例

http://192.168.50.173:3000/api/public/card/4f01558f-700a-4895-8cbf-9a0fe1c12232/query

image-20220713151006874