metabase主要功能创建数据集、在线可视化分析、生成分析图表、构造dashboard、定时任务报表、数据分析模型、订阅发布、分享、安全验证、权限管理、任务管理等等优势。
官网学习地址:metabase参考文档
对应语法学习地址:clickhouse参考文档
第一步 下载metabase压缩文件,无需解压:metabase.jar
第二步 下载java文件:java,而后添加环境变量,操作步骤见该链接:java安装教程
第三步 metabase.jar文件夹路径下输入cmd,输入java -jar metabase.jar
,网页端输入http://localhost:3000/,注册登录后即可操作metabase
示例:
配置metabase:Setting up教程-metabase源文档
首页界面:
通常通过创建问题,使用查询语句来获取数据信息,而后通过仪表盘连接,形成一份报表可视化模板
首先选择样本数据库:SAMPLE DATASET
先了解下表结构
表名 | 表功能 |
---|---|
Orders | 订单 |
字段 | 注释 |
ID | id |
UserID | 用户ID |
ProductID | 产品id |
Subtotal | 产品费用 |
Tax | 税收费用 |
Total | 总费用 |
Discount($) | 折扣 |
Created At | 创建时间 |
Quantity | 订单量 |
表名 | 表功能 |
---|---|
People | 人员信息 |
字段 | 注释 |
ID | 用户id |
Address | 地址 |
邮箱 | |
Password | 密码 |
Name | 姓名 |
City | 城市 |
Longitude | 经度 |
State | 州 |
Source | 来源 |
Birth Date | 生日 |
Zip | 邮编 |
Latitude | 纬度 |
Created At | 创建时间 |
表名 | 表功能 |
---|---|
Products | 产品 |
字段 | 注释 |
ID | 产品id |
Ean | 编号 |
Title | 标题 |
Category | 类目 |
Vendor | 公司 |
Price | 价格 |
Rating | 产品星级 |
Created At | 创建时间 |
表名 | 表功能 |
---|---|
Reviews | 评论 |
字段 | 注释 |
ID | id |
ProductID | 产品id |
Reviewer | 评论人 |
Rating | 评论星级 |
Body | 内容 |
Created At | 创建时间 |
了解样本四张表之间的关联(方便后期做关联匹配)
表名 | 表名 | 表名 | 表名 | |
---|---|---|---|---|
Orders | People | Products | Reviews | |
字段 | 字段 | 字段 | 字段 | |
UserID | 匹配 | ID | ||
ProductID | 匹配 | ID | ProductID |
示例:获取用户Hudson Borer(用户id为1)个人信息及该用户购买的产品信息
思路:用Orders表UserID和ProductID去分别匹配People表ID和Products表ID,来获取相应数据
'''1、查询Hudson Bore这个顾客总共下单量'''
SELECT t1.*,t2.`订单量`
FROM
(
SELECT
ID as `用户id`,
Name as `姓名`
FROM People
WHERE Name='Hudson Borer'
GROUP BY `用户id`,`姓名`
ORDER BY `用户id`
) as t1
LEFT JOIN
(
SELECT
USER_ID as `用户id`,
sum(Quantity) as `订单量`
FROM Orders
GROUP BY `用户id`
ORDER BY `用户id`
) as t2
on t1.`用户id`=t2.`用户id`
'''也可把Name变成变量来编辑,进而可以添加字段过滤器,例如'''
SELECT t1.*,t2.`订单量`
FROM
(
SELECT
ID as `用户id`,
Name as `姓名`
FROM People
WHERE Name={{Name}}
GROUP BY `用户id`,`姓名`
ORDER BY `用户id`
) as t1
LEFT JOIN
(
SELECT
USER_ID as `用户id`,
sum(Quantity) as `订单量`
FROM Orders
GROUP BY `用户id`
ORDER BY `用户id`
) as t2
on t1.`用户id`=t2.`用户id`
metabase界面显示为:
可能遇到的问题1. 未添加变量,显示器会报错,缺少变量参数
解决方案1、:在上方的过滤字段器内添加People中变量即可
解决方案2、:将代码块中
WHERE Name={{Name}}
改成可选变量即可,
[[WHERE Name = {{Name}}]]
操作如下
SELECT t1.*,t2.`订单量`
FROM
(
SELECT
ID as `用户id`,
Name as `姓名`
FROM People
[[WHERE Name = {{Name}}]]
GROUP BY `用户id`,`姓名`
ORDER BY `用户id`
) as t1
LEFT JOIN
(
SELECT
USER_ID as `用户id`,
sum(Quantity) as `订单量`
FROM Orders
GROUP BY `用户id`
ORDER BY `用户id`
) as t2
on t1.`用户id`=t2.`用户id`
metabase显示界面(这种方式会把所有客户信息全筛选出来)
若想查看某两个人或多名指定客户的信息,可将变量
WHERE Name={{Name}}
改为
WHERE {{Name}}
同时将字段映射到对应的报表字段中,即可,如下
SELECT t1.*,t2.`订单量`
FROM
(
SELECT
ID as `用户id`,
Name as `姓名`
FROM People
WHERE {{Name}}
GROUP BY `用户id`,`姓名`
ORDER BY `用户id`
) as t1
LEFT JOIN
(
SELECT
USER_ID as `用户id`,
sum(Quantity) as `订单量`
FROM Orders
GROUP BY `用户id`
ORDER BY `用户id`
) as t2
on t1.`用户id`=t2.`用户id`
metabase显示界面
以上介绍了metabase中原生查询
方式添加变量的三种方式,下面汇总下三种操作方式 metabase变量操作完整文档
'''原生查询中的变量允许使用筛选组件或URL参数来动态替换查询中的值。
变量
{{variable_name}}在此查询模板中创建一个名为“ variable_name”的变量。可以在侧面板中为变量指定类型,
从而更改其行为。除“字段过滤器”以外的所有变量类型都将自动导致将过滤器小部件放置在此问题上;
对于字段过滤器,这是可选的。填写此过滤器小部件后,该值将替换查询模板中的变量。'''
# Example:
SELECT count(*)
FROM products
WHERE category = {{category}}
'''字段过滤器
通过为变量指定“字段过滤器”类型,您可以将问题链接到仪表板过滤器小部件,或在SQL问题上使用更多类型的过滤器小部件。
在现有列上添加过滤器时,“字段过滤器”变量将插入与GUI查询构建器生成的SQL相似的SQL。
添加“字段过滤器”变量时,您需要将其映射到特定字段。 然后,您可以选择在问题上显示过滤组件,但即使不这样做,
现在可以在将此问题添加到仪表板时将“字段过滤器”变量映射到仪表盘过滤器。 字段过滤器应在“WHERE”子句中使用。'''
# Example:
SELECT count(*)
FROM products
WHERE {{created_at}}
'''可选条款
[[{{variable}}]]周围的括号在模板中创建可选子句。 如果设置了“variable”,则将整个子句放入模板中。
如果不是,则忽略整个子句。'''
# Example:
SELECT count(*)
FROM products
[[WHERE category = {{category}}]]
'''要使用多个可选子句,您可以包含至少一个非可选WHERE子句,接着以“AND”开头的可选子句。'''
# Example:
SELECT count(*)
FROM products
WHERE 1=1
[[AND id = {{id}}]]
[[AND category = {{category}}]]
'''当某字段被用作筛选条件后, SQL语句中不应再包含该列明. 相应的在侧边栏上, 变量应该映射到一个字段上。'''
#Example:
SELECT count(*)
FROM products
WHERE 1=1
[[AND {{category}}]]
操作界面,使用非常简单,只需将自己想要获取的信息用鼠标点一点就可得到,无需数据库语法基础,适合小白使用(仅适合较为简单的查询语句)
点击自定义查询左下方可视化后,显示如下
此外,在可视化方法中,亦可选择折线图、柱状图、组合图、条形图等,此处不再赘述
获取这样一份可视化仪表盘界面,如何操作
第一步,创建仪表盘
metabase右上角加号"+"
,可创建仪表盘
点击创建新仪表盘,如下
第二步 创建仪表盘细节
2.1 先创建过滤器
操作如下(按步骤操作后,点击保存即可):
2.2 添加文本
操作如下(按步骤操作后,点击保存即可)
2.3 添加问题(左上为地图、右上为柱状图、左下为数字、右下为折线图)
2.3.1 地图(先写好sql语句,再加入到仪表盘中)
实现功能:显示各个州每个类目的订单量
SELECT
People.State,
SUM(Orders.Quantity) as `订单量`
FROM Orders
LEFT JOIN
People
on Orders.USER_ID = People.ID
LEFT JOIN
Products
on Orders.PRODUCT_ID = Products.ID
WHERE
{{State}}
and {{Category}}
GROUP BY People.State
ORDER BY People.State
其二,添加到仪表盘中
其三,过滤器和地图集关联匹配,匹配完成后点击右下角完成
其四,用地图集去和过滤器进行匹配,点击地图集右上角按钮点击行为
,只需匹配State字段,操作完成后保存
2.3.2 柱状图
实现功能:每个类目对应的订单量
操作和地图集一模一样,只需将Orders by state这个先前的问题复制一份,更改可视化界面即可,操作如下(操作完成后记得保存)
而后将柱状图添加到仪表盘中,操作和地图集一模一样,此处不再赘述,(唯一的区别是最后点击行为
处匹配的是Category
而非State
字段)
2.3.3 数据
实现功能:每个州每个类目对应的总订单量,仅显示数据
操作同上,复制柱状图的问题,更名为Count of Orders
'''代码块删除以下三行'''
Products.Category
GROUP BY People.State,Products.Category
ORDER BY People.State,Products.Category
操作完成后点击保存,添加仪表盘操作与以上雷同,此处不再赘述
2.3.4 折线图
实现功能:观察每月的销量情况
SELECT
parsedatetime(formatdatetime(ORDERS.CREATED_AT, 'yyyyMM'), 'yyyyMM') AS `CREATED_AT`,
SUM(Orders.Quantity) as `订单量`
FROM Orders
LEFT JOIN
People
on Orders.USER_ID = People.ID
LEFT JOIN
Products
on Orders.PRODUCT_ID = Products.ID
WHERE
{{State}}
and {{Category}}
GROUP BY `CREATED_AT`
ORDER BY `CREATED_AT` ASC
查询语句写好后,添加到仪表盘中,而后过滤器关联该折线图即可,
这样一份动态仪表盘就完成了。