MetaBase是一款數(shù)據(jù)可視化平臺(tái)
在沒有數(shù)據(jù)可視化平臺(tái)的時(shí)候,我們往往需要從需求到審批,再到安排開發(fā)人員和排期,最終交付。流程繁瑣,參與的人員也多,往往需要幾天甚至幾周的時(shí)間!
使用 Metabase 可以大大節(jié)省成本,簡(jiǎn)單易上手,Metabase 把數(shù)據(jù)分析常用的查詢通過一個(gè)個(gè)易于操作的界面呈現(xiàn),非常適合不懂SQL的業(yè)務(wù)人員使用,只需要點(diǎn)幾下鼠標(biāo),就可以快速得出一個(gè)直觀的可視化結(jié)果。
所以MetaBase上運(yùn)營(yíng)人員是可以直接查看數(shù)據(jù)表,篩選數(shù)據(jù)并組合成自己想要的報(bào)表。但往往他們會(huì)提出需求并希望直接獲得數(shù)據(jù)結(jié)果。所以文章重點(diǎn)會(huì)放在技術(shù)人員直接提供數(shù)據(jù)結(jié)果到Metabase的討論上。
Metabase數(shù)據(jù)源支持很多,本篇文章基于MySql數(shù)據(jù)庫
讓我們先從創(chuàng)建一個(gè)簡(jiǎn)單數(shù)據(jù)查詢開始,點(diǎn)擊右上角創(chuàng)建SQL查詢
SQL查詢的頁面分為三個(gè)區(qū)域
1.SQL編輯區(qū)域:主要用來技術(shù)人員編寫數(shù)據(jù)庫查詢代碼
2.SQL變量區(qū)域:如果在代碼中使用SQL變量,則自動(dòng)彈出這個(gè)區(qū)域,方便對(duì)參數(shù)命名(SQL變量如何使用文檔:https://www.metabase.com/docs/v0.43/users-guide/13-sql-parameters.html)。
- 數(shù)據(jù)展示區(qū)域:在SQL編輯完成后,點(diǎn)擊區(qū)域內(nèi)右下角查詢按鈕,即可查詢數(shù)據(jù)并進(jìn)行展示。數(shù)據(jù)默認(rèn)格式為表格形式。表頭名稱默認(rèn)為SQL語句中的字段名稱(所以在SQL中可以重命名字段)
對(duì)于數(shù)據(jù)想進(jìn)行圖形化展示,可以點(diǎn)擊上圖左下角的視覺化按鈕
選擇適用業(yè)務(wù)的圖形,我選擇扇形圖,那么就要對(duì)于扇形圖的維度,衡量標(biāo)準(zhǔn)選擇對(duì)應(yīng)的字段。效果圖:
點(diǎn)擊已完成,并進(jìn)行保存后,就可提供給運(yùn)營(yíng)使用。
對(duì)于單個(gè)簡(jiǎn)單業(yè)務(wù)我們就可以通過以上方式提供數(shù)據(jù),Metabase還提供“儀表盤”看板來進(jìn)行數(shù)據(jù)合集展示。用一個(gè)頁面看板,把各種單個(gè)SQL查詢數(shù)據(jù)歸類一起進(jìn)行數(shù)據(jù)展示。
儀表盤的使用可以參考官方文檔:https://www.metabase.com/docs/latest/dashboards/start
需要提到的一點(diǎn):我們可以在儀表盤添加過濾器,然后指定某個(gè)模塊選擇對(duì)應(yīng)查詢參數(shù)。這樣保存后,我們填寫手機(jī)號(hào)后,就可查詢針對(duì)單個(gè)用戶的數(shù)據(jù)面板
利用儀表盤我們還可以創(chuàng)建:交易數(shù)據(jù)看板,訂單數(shù)據(jù)看板,財(cái)務(wù)報(bào)表等等,把各種單個(gè)數(shù)據(jù)匯總到一個(gè)儀表盤,方便數(shù)據(jù)閱讀。(一定要注意不能出現(xiàn)慢SQL,不然有可能會(huì)導(dǎo)致數(shù)據(jù)庫負(fù)載過高)
在使用Metabase中,常常我們會(huì)需要以月為維度的圖形化數(shù)據(jù)。但在編寫SQL上我們總會(huì)遇到某個(gè)時(shí)間點(diǎn)沒有數(shù)據(jù)的情況,對(duì)于月緯度數(shù)據(jù),為了防止當(dāng)月某日有缺失數(shù)據(jù),有個(gè)小技巧,我們可以創(chuàng)建一張表記錄日期,然后在SQL查詢中以日期表為主表,關(guān)聯(lián)查詢業(yè)務(wù)表。
例如要查詢雙月環(huán)比交易金額線圖:
線圖所對(duì)應(yīng)的基礎(chǔ)數(shù)據(jù)是這樣:
要到達(dá)上圖效果,參考代碼:
select func.monthDay '日期', ifnull(currentMonth.amount, null) '本月交易金額', ifnull(beforeMonth.amount, null) '上月交易金額'
from (
select type, value monthDay
from date_statistics_function
where type = 'day'
# 默認(rèn)為當(dāng)前月份最大天數(shù)
and value <= day(last_day(current_date()))
order by value) func
left join (
select date_format(date_day, '%d') date, sum(amount) amount from transaction_user_day_info ca
where ca.date_day >= date_add(curdate(), interval - day(curdate()) + 1 day)
group by date
) currentMonth
on currentMonth.date = func.monthDay
left join (
select date_format(date_day, '%d') date, sum(amount) amount from transaction_user_day_info ca
where ca.date_day >= date_add(curdate() - day(curdate()) + 1, interval -1 month)
and ca.date_day < date_add(curdate(), interval - day(curdate()) + 1 day)
group by date
) beforeMonth
on beforeMonth.date = func.monthDay
order by `日期`;
date_statistics_function表會(huì)存儲(chǔ)0~23小時(shí),1~31日,hour表示小時(shí),day表示日,用來支撐上面的SQL查詢。好處就在于如果某小時(shí)或某日在業(yè)務(wù)數(shù)據(jù)表中沒有數(shù)據(jù),那么可以對(duì)當(dāng)日/小時(shí)數(shù)據(jù)補(bǔ)0,不會(huì)缺失數(shù)據(jù)。
對(duì)于近幾個(gè)月,近幾日數(shù)據(jù)查詢也有參考代碼
-- 最近一年日期
select date_format(date_add(date_sub(curdate(), interval 1 year), interval dt.seqNo month), '%Y-%m') '最近一年'
from (
select row_number() over () seqNo
from date_statistics_function
limit 12) dt;
-- 最近30日-日期
select date_add(date_sub(curdate(), interval 30 day), interval dt.seqNo day) '最近30日'
from (
select row_number() over () seqNo
from date_statistics_function
limit 30) dt;
有了Metabase我們可以快速實(shí)現(xiàn)運(yùn)營(yíng)數(shù)據(jù)需求,并在短時(shí)間內(nèi)完成交付。
類似Metabase BI平臺(tái)還有很多,例如Superset、DataEase、MetaBase以及阿里云QuickBI。
無論使用哪種平臺(tái),數(shù)據(jù)的安全性是我們首要考慮的問題。