MetaBase是一款數(shù)據(jù)可視化平臺
在沒有數(shù)據(jù)可視化平臺的時候障涯,我們往往需要從需求到審批卧土,再到安排開發(fā)人員和排期惫皱,最終交付。流程繁瑣尤莺,參與的人員也多旅敷,往往需要幾天甚至幾周的時間!
使用 Metabase 可以大大節(jié)省成本颤霎,簡單易上手媳谁,Metabase 把數(shù)據(jù)分析常用的查詢通過一個個易于操作的界面呈現(xiàn),非常適合不懂SQL的業(yè)務(wù)人員使用友酱,只需要點(diǎn)幾下鼠標(biāo)晴音,就可以快速得出一個直觀的可視化結(jié)果。
所以MetaBase上運(yùn)營人員是可以直接查看數(shù)據(jù)表缔杉,篩選數(shù)據(jù)并組合成自己想要的報表锤躁。但往往他們會提出需求并希望直接獲得數(shù)據(jù)結(jié)果。所以文章重點(diǎn)會放在技術(shù)人員直接提供數(shù)據(jù)結(jié)果到Metabase的討論上或详。
Metabase數(shù)據(jù)源支持很多系羞,本篇文章基于MySql數(shù)據(jù)庫
讓我們先從創(chuàng)建一個簡單數(shù)據(jù)查詢開始,點(diǎn)擊右上角創(chuàng)建SQL查詢
SQL查詢的頁面分為三個區(qū)域
1.SQL編輯區(qū)域:主要用來技術(shù)人員編寫數(shù)據(jù)庫查詢代碼
2.SQL變量區(qū)域:如果在代碼中使用SQL變量霸琴,則自動彈出這個區(qū)域椒振,方便對參數(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中可以重命名字段)
對于數(shù)據(jù)想進(jìn)行圖形化展示夹供,可以點(diǎn)擊上圖左下角的視覺化按鈕
選擇適用業(yè)務(wù)的圖形,我選擇扇形圖仁堪,那么就要對于扇形圖的維度罩引,衡量標(biāo)準(zhǔn)選擇對應(yīng)的字段。效果圖:
點(diǎn)擊已完成枝笨,并進(jìn)行保存后,就可提供給運(yùn)營使用揭蜒。
對于單個簡單業(yè)務(wù)我們就可以通過以上方式提供數(shù)據(jù)横浑,Metabase還提供“儀表盤”看板來進(jìn)行數(shù)據(jù)合集展示。用一個頁面看板宏粤,把各種單個SQL查詢數(shù)據(jù)歸類一起進(jìn)行數(shù)據(jù)展示诽凌。
儀表盤的使用可以參考官方文檔:https://www.metabase.com/docs/latest/dashboards/start
需要提到的一點(diǎn):我們可以在儀表盤添加過濾器窄瘟,然后指定某個模塊選擇對應(yīng)查詢參數(shù)。這樣保存后欺冀,我們填寫手機(jī)號后树绩,就可查詢針對單個用戶的數(shù)據(jù)面板
利用儀表盤我們還可以創(chuàng)建:交易數(shù)據(jù)看板,訂單數(shù)據(jù)看板隐轩,財務(wù)報表等等饺饭,把各種單個數(shù)據(jù)匯總到一個儀表盤,方便數(shù)據(jù)閱讀职车。(一定要注意不能出現(xiàn)慢SQL瘫俊,不然有可能會導(dǎo)致數(shù)據(jù)庫負(fù)載過高)
在使用Metabase中,常常我們會需要以月為維度的圖形化數(shù)據(jù)悴灵。但在編寫SQL上我們總會遇到某個時間點(diǎn)沒有數(shù)據(jù)的情況扛芽,對于月緯度數(shù)據(jù),為了防止當(dāng)月某日有缺失數(shù)據(jù)积瞒,有個小技巧川尖,我們可以創(chuàng)建一張表記錄日期,然后在SQL查詢中以日期表為主表茫孔,關(guān)聯(lián)查詢業(yè)務(wù)表叮喳。
例如要查詢雙月環(huán)比交易金額線圖:
線圖所對應(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表會存儲0~23小時银酬,1~31日嘲更,hour表示小時,day表示日揩瞪,用來支撐上面的SQL查詢赋朦。好處就在于如果某小時或某日在業(yè)務(wù)數(shù)據(jù)表中沒有數(shù)據(jù),那么可以對當(dāng)日/小時數(shù)據(jù)補(bǔ)0李破,不會缺失數(shù)據(jù)宠哄。
對于近幾個月,近幾日數(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我們可以快速實現(xiàn)運(yùn)營數(shù)據(jù)需求嗤攻,并在短時間內(nèi)完成交付毛嫉。
類似Metabase BI平臺還有很多,例如Superset妇菱、DataEase承粤、MetaBase以及阿里云QuickBI。
無論使用哪種平臺闯团,數(shù)據(jù)的安全性是我們首要考慮的問題辛臊。