Metabase 使用指南

一. 為什么從 ELK 遷移到 Metabase + OLAP

1.1 ELK 的問題

  • 擴(kuò)展性不強(qiáng):Kibana 只能應(yīng)用在 ElasticSearch 上
  • 管理不便:在阿里云等平臺,一個(gè) ElasticSearch 集群對應(yīng)一個(gè) Kibana,難以統(tǒng)一管理
  • 開發(fā)成本:無法將圖表嵌入到其他應(yīng)用中,需要二次開發(fā)圖形展示
  • 性能一般:ElasticSearch 擅長全文搜索,在數(shù)據(jù)分析功能上的性能不如 OLAP 數(shù)據(jù)庫,并且存在一些限制,例如去重的精度不足,上限只有40000(默認(rèn)準(zhǔn)確度保證僅有3000
  • 運(yùn)維成本:拋開搜索優(yōu)化,仍需要維護(hù)好一套索引生命周期管理、索引模板,以及應(yīng)對字段變更時(shí)的 reindex。此外,相同數(shù)據(jù)量下,Elastic 的壓縮比不如列式數(shù)據(jù)庫,內(nèi)存占用也更高,相應(yīng)的成本也要高出不少。

1.2 Metabase + 其他DB 的優(yōu)勢

  • 擴(kuò)展性: JDBC + Clojure multi-method 實(shí)現(xiàn) Driver 擴(kuò)展,即使開發(fā)新 Driver 的成本也不高。
  • 統(tǒng)一入口: 使用相同后端存儲的 Metabase 可以同時(shí)管理多個(gè)不同的 DB
  • 開發(fā)成本: 在 Metabase 開發(fā)的 Dashboard 可以直接嵌套到其他前端應(yīng)用,并且維護(hù)有 JWT 認(rèn)證。其他人員開發(fā)的 Question、Model、Metric 可以相互引用。

至于性能和運(yùn)維成本,則由所選擇的后端 DB 所決定。Metabase 本身不需要進(jìn)行多復(fù)雜的維護(hù),單個(gè) DB 故障并不會引起 Metabase 崩潰。

Metabase

二. 提問

2.1 數(shù)據(jù)源

數(shù)據(jù)源有三種

  • Raw Data,即源數(shù)據(jù),任一數(shù)據(jù)庫表都是源數(shù)據(jù)。可以直接點(diǎn)開任一 raw 表以表格方式查看數(shù)據(jù)。

    示例訂單數(shù)據(jù)

  • Question,問題,已存儲的問題也可以成為數(shù)據(jù)源,例如這樣一個(gè)問題:查詢過去一年內(nèi)每天不同來源的消息量,我們可以基于這個(gè)問題構(gòu)建一個(gè)過去6個(gè)月每周的消息量問題。

  • Model,模型,可以由 Question 或 SQL 提問后轉(zhuǎn)化,Model 某種程度上是一種物化視圖,物化不存儲數(shù)據(jù),通常不直接用來可視化。例如有個(gè)人信息和訂單兩張實(shí)體表,可以把用戶名和用戶常買的物品、購買時(shí)間等組合為一個(gè)新的模型。

2.2 構(gòu)建問題

2.2.1 組成部分

  1. Data 部分即前面的數(shù)據(jù)源
  • 可以選擇需要的列,在查詢數(shù)據(jù)時(shí)減少干擾,提升速度。
  • 可以 JOIN 三種數(shù)據(jù)源,但必須在同一個(gè)數(shù)據(jù)庫,當(dāng)然,也要是同一種數(shù)據(jù)庫。也有例外,ClickHouse 可以使用 MySQL、Postgres、MongoDB 等外表。在 Metabase 上展示為同一種數(shù)據(jù)庫,但實(shí)際類型不同。 JOIN 的不同模式(LEFT JOIN、RIGHT JOIN)可以點(diǎn)擊圖標(biāo)切換。
  • Custom Column 類似于數(shù)據(jù)庫函數(shù)的接口抽象,不是所有驅(qū)動都支持該實(shí)現(xiàn)。一般用在統(tǒng)計(jì)階段。
  1. (可選)Filter 部分即過濾器,選擇合適的 Filter 可以提速,也可以排除無關(guān)的結(jié)果。在數(shù)據(jù)表格預(yù)覽時(shí)可以直接在列上方過濾數(shù)據(jù),例如這里只看有折扣的客單價(jià):
    過濾數(shù)據(jù)
過濾效果
  1. (可選)Summarize 部分即統(tǒng)計(jì)相關(guān),需要結(jié)合分組操作。常用的例如 sum、count,如果需要構(gòu)建更復(fù)雜的計(jì)算,可以使用 Custom Column,包含其他的數(shù)學(xué)函數(shù)和字符串函數(shù),未必所有函數(shù)都可用
比較有無折扣的商品總價(jià)
  1. (可選)Sort 和 Limit 即 排序和返回?cái)?shù)量,排序在圖表上的展示區(qū)別不大,最好限制返回的數(shù)量(默認(rèn) 10000)特別是在源表上。

2.2.2 調(diào)試 Question

每個(gè)階段都可以點(diǎn)擊小三角形預(yù)覽數(shù)據(jù)

  • 在最終結(jié)果無法展示時(shí),可以逐個(gè)階段預(yù)覽調(diào)試
  • 在 JOIN 數(shù)據(jù)時(shí),可以檢查是否 JOIN 模式存在錯(cuò)誤,導(dǎo)致結(jié)果缺少或者重復(fù)

如果仍然無法解決問題,可以點(diǎn)擊右邊的 SQL 語句按鈕,由開發(fā)同學(xué)協(xié)助調(diào)試。

2.3 使用 SQL 構(gòu)建問題

用 SQL 構(gòu)建問題除了可以自由選擇函數(shù)外,也可以使用變量作為過濾器。

使用變量的兩個(gè)關(guān)鍵語法是 {{variable}}[[{{variable}}]] ,第一個(gè)為一般變量,第二個(gè)為可選變量,使用變量時(shí)不需要使用 where table.a = {{variable}} 方式,直接用 where = {{variable}} 使用可選變量時(shí),不需要用 AND 連接。

有點(diǎn)繞?
看看例子:這是一個(gè)統(tǒng)計(jì)不同 HTTP 方法的 SQL,將 create_timemethod 作為過濾器,其中 create_time 是可選變量。

SELECT `inner_api_log`.`method` AS `method`, 
toDate(`inner_api_log`.`create_time`) AS `create_time`, count(*) AS `count`
FROM `inner_api_log` where {{method}} [[{{create_time}}]]
GROUP BY `inner_api_log`.`method`, toDate(`inner_api_log`.`create_time`)
ORDER BY `inner_api_log`.`method` ASC, toDate(`inner_api_log`.`create_time`) ASC

過濾器可以進(jìn)一步設(shè)置,例如作為下拉框(需要映射原始表,且差異值有限)或者作為搜索框等等。

SQL變量
  • 要進(jìn)一步分析,將 SQL 保存的問題作為數(shù)據(jù)源再次引用即可。
  • 使用變量的 SQL 不可作為 Model 使用

2.4 選擇可視化圖表

點(diǎn)擊可視化圖形選擇面板選擇可用的圖表,部分圖表未必適合當(dāng)前數(shù)據(jù),可能點(diǎn)擊后仍不可用。

可視化界面操作
部分圖表未必適用當(dāng)前數(shù)據(jù)

2.5 設(shè)置圖表

2.5.1 通用設(shè)置

點(diǎn)擊 Question 顯示通用菜單,可以添加描述、添加到 Dashboard、移動或歸檔等。
左下角的 History 按鈕可以查看版本歷史,每次保存或者回滾均會產(chǎn)生一條版本記錄。

2.5.2 折線、柱狀圖

  • Data:即數(shù)據(jù)源,用來選擇展示的數(shù)據(jù)。數(shù)據(jù)旁邊的設(shè)置按鈕,可以用來格式化數(shù)據(jù),例如數(shù)字的展示可以設(shè)置小數(shù)點(diǎn),或者表示為貨幣,日期的格式等等
  • Display:即展示效果,例如設(shè)置數(shù)據(jù)的顏色,設(shè)置目標(biāo)線
  • Axes:刻度,用來設(shè)置數(shù)據(jù)的呈現(xiàn)方式,例如大小分布很不均勻的數(shù)據(jù)(通常數(shù)據(jù)中的最大數(shù)字比最小數(shù)字大數(shù)百甚至數(shù)千倍)可以使用對數(shù)刻度(Log)或者冪次刻度(Power),遺憾的是,Metabase 不能選擇對數(shù)的底數(shù)大小。

下圖是分布不均的典型案例,由于某種數(shù)據(jù)暴漲,掩蓋了其他數(shù)據(jù)的趨勢展示,改為對數(shù)刻度就可以很好地展示:


線性刻度
對數(shù)刻度
  • Labels:標(biāo)簽,或稱圖例標(biāo)簽(Legend Label),可以添加備注

  • 可視化界面(右側(cè)):除了點(diǎn)擊圖例篩選、鼠標(biāo)懸停查看具體值之外,還可以點(diǎn)擊圖形上的點(diǎn),彈出的窗口可以做進(jìn)一步值的篩選、或者分組操作。例如原問題是按 Category 分組,這里可以進(jìn)一步按時(shí)間查看趨勢

快速操作數(shù)據(jù)

當(dāng) X 軸為時(shí)間軸,鼠標(biāo)可以選中區(qū)間查看對應(yīng)時(shí)間范圍的數(shù)據(jù)分布。

選中時(shí)間范圍

2.5.3 表格

表格設(shè)置面板
左側(cè)設(shè)置面板:
  • Columns:列屬性,點(diǎn)擊設(shè)置按鈕設(shè)置列名,對于數(shù)值類型,支持以迷你條形圖方式展示,對于時(shí)間類型,支持格式化時(shí)間。
列格式化
  • Conditional Formating:即條件格式化??梢詫M足條件的值高亮顯示,高亮支持單色或顏色范圍展示
條件格式化
顏色范圍高亮
右側(cè)展示面板
  • 點(diǎn)擊列名彈出快速操作,可以進(jìn)行排序、過濾、或進(jìn)一步統(tǒng)計(jì)


    快速操作表格
  • 點(diǎn)擊具體值彈出快速篩選窗口
  • 右下角支持下載源數(shù)據(jù)到本地(JSON、Excel 或 CSV)如設(shè)置提醒,則會定時(shí)接收到該表格的郵件。

三. Dashboard 管理

3.1 編輯 Dashboard

  • 右上角三個(gè)按鈕分別可以添加已保存的問題、添加文本(Markdown)和添加過濾器
  • 鼠標(biāo)懸停在任一組件上,可以移動位置,組件右下角可以拖動改變大小
  • 非編輯模式,點(diǎn)擊任一問題標(biāo)題,進(jìn)入到相應(yīng)問題詳情
  • 對于地圖類型,支持設(shè)置默認(rèn)展示區(qū)域

Tips: 默認(rèn)提供了世界地圖和美國地圖,如果不能滿足你,可以在 AdminSetting 添加其他 Geojson 格式的地圖。

添加自定義地圖

3.2 過濾器

過濾器支持幾種不同類型

過濾器類型

添加過濾器后會固定在 Dashboard 上方,不隨頁面移動(Binding Top),拖動過濾器改變位置

  • 設(shè)置聯(lián)動的圖表
    點(diǎn)擊要設(shè)置的過濾器,然后在圖表上選擇聯(lián)動的列,選擇過濾條件就會聯(lián)動設(shè)置的圖表。如下圖所示,過去 30 天的過濾條件會應(yīng)用在四個(gè)圖表上。
  • (可選)設(shè)置默認(rèn)的過濾選項(xiàng)、過濾器名稱
過濾器設(shè)置
  • 聯(lián)動過濾器,一般用在多級分組上,例如省-市等多級分類,選擇大一級分類會影響子分類選項(xiàng)。
選擇州會影響城市級別過濾器選項(xiàng)

3.3 可視化

如果修改圖表的標(biāo)題、微調(diào)展示的顏色等操作,需要回到問題頁修改再保存,會使操作變得繁瑣,并增加不必要的新問題。

Dashboard 編輯模式下,支持在不修改圖表展示類型的情況下,修改該類型圖表幾乎所有參數(shù),例如下圖所示,僅數(shù)據(jù)源不支持修改。

點(diǎn)擊 reset to default 會恢復(fù)到原問題的設(shè)置。

Dashboard編輯模式下的圖表設(shè)置頁

3.4 疊加圖表

在需要橫向?qū)Ρ鹊膱鼍?,有時(shí)因?yàn)闂l件難以用單個(gè) SQL 表達(dá)。

可以考慮下面的方式:

  • 分別創(chuàng)建若干個(gè)問題。如果需要永久保存,可以再添加一個(gè)問題,JOIN 幾個(gè)問題實(shí)現(xiàn)圖表疊加。如果需要合并,查看 SQL 再轉(zhuǎn)化為新的問題即可。
橫向?qū)Ρ?2020 及 2019 一季度銷售額
  • 若不需要,在 Dashboard 編輯模式下,添加 Add Series,搜索已保存的問題,如果問題存在感嘆號,則可能不兼容當(dāng)前的圖表。疊加的圖表同樣支持在編輯模式下分別設(shè)置圖表。
添加圖表
疊加圖表下的設(shè)置頁

3.5 點(diǎn)擊行為

  • 跳轉(zhuǎn)到自定義鏈接:用來鏈接到外部的同一網(wǎng)址,或者跳轉(zhuǎn)到帶參數(shù)的指定詳情頁等。也可以跳轉(zhuǎn)到指定的 Dashboard 或者問題頁。

例如,在地圖圖表上添加搜索關(guān)鍵詞,點(diǎn)擊跳轉(zhuǎn)到 Google 搜索頁:

跳轉(zhuǎn)外部鏈接示例
  • 聯(lián)動頁面過濾器:下拉過濾器可能不夠直觀,下面的地圖例子,當(dāng)點(diǎn)擊對應(yīng)州的圖形時(shí),會同步改變州(State)過濾器,其他引用的圖表就會一起更新。
聯(lián)動過濾器

四. 管理數(shù)據(jù)

4.1 管理數(shù)據(jù)源

添加數(shù)據(jù)源時(shí),管理員需要做好以下操作

  1. 限制數(shù)據(jù)源權(quán)限,設(shè)置好組員的查看和編輯權(quán)
  2. 隱藏不必要的數(shù)據(jù),例如ClickHouse 的 Kafka Engine 表、導(dǎo)入詳情表的物化表等對數(shù)據(jù)分析人員沒有意義。
    一些數(shù)據(jù)列只提供給開發(fā)人員調(diào)試,對其他人員沒有意義的,同樣也要隱藏?;蛘?strong>某些列不適合統(tǒng)計(jì),聚合可能導(dǎo)致崩潰。
    數(shù)據(jù)可見性.png
  3. 更改列屬性,Metabase 有時(shí)存在列的屬性推斷錯(cuò)誤,例如某些列我們希望它有下拉過濾,但被推斷為其他類型,可以手動修改,再重新掃描該列。
更改列屬性

4.2 創(chuàng)建模型(Model)

同樣是由表延展的數(shù)據(jù),模型具有一定實(shí)體意義,通常不直接用來可視化,而是作為源數(shù)據(jù),方便復(fù)用。

模型擁有和源數(shù)據(jù)一樣豐富的列屬性設(shè)置,這里不再贅述。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容