著做權歸做者全部。商業轉載請聯繫 Scott 得到受權,非商業轉載請註明出處[務必保留全文,勿作刪減]。
數據只有被看見,真相才浮出水面,數據跳動在大盤,洞察才造成預判。
今天 2020/1/7,到小菜整整 2 年半,看到團隊在數據報表量產和可視化上面有了新的成果,這些年來也瞭解到前端後端面對不可勝數的數據報表和後臺可視化大盤,真心苦不堪言,就趁這個節點,跟你們聊聊兩年半來咱們是如何從前端來驅動數據報表量產和可視化大盤的技術探索。前端
首先上結論:git
簡而言之,先推進技術團隊把數據倉庫建設到基本成熟,再來基於 Metabase 魔改出本身的報表和可視化業務後臺,這是一個可取的套路,得出這個結論,是由於兩年半的探索咱們有斬獲也有疼痛的教訓。github
固然一路自研過來,咱們也調研了不少方案,不管是商業付費仍是開源,對第三方可替代競品的選擇標準以下:web
閱讀兩篇舊文,有助於你們理解下文:面試
無論是 toB 仍是 toC 的公司,不管是 +互聯網仍是互聯網+,都對數據報表有着近乎瘋狂的依賴,這不只僅是像馬老師說的咱們正在進入 DT 時代,數據運營甚至數據智能價值挖掘和應用愈來愈普及,而是對於任何一家高速迭代的互聯網公司,在產業互聯網的大背景下,在中早期各類紅利逐漸消逝的前提下,基於數據的成本意識和精細化運營能力愈來愈考驗一家公司在所謂寒冬活下去的實力。redis
業務現場無時無刻都在產生着數據,經過什麼途徑觀測業財健康直接決定一個公司/一條業務線的頂層決策,頂層決策有何等重要,促成決策的數據報表就有多重要,因此一個公司只要上了信息化系統,數據報表都會成爲絕對剛需。算法
基於這個剛需,有的公司招專門的 BI 工程師,組建算法團隊甚至大數據團隊,有的則是業務方直接把要看的字段丟給開發團隊,讓先後端工程師,一個寫跨庫跨表的 SQL API,一個寫能篩選日期和排序的 DataTable 頁面。數據庫
顯然小菜早期,就是以 SQL -> API -> DataTable 的流程開發報表,效率極低,成就感極弱,先後端成長極慢,帶來的影響有不少,好比工程師更不穩定,好比業務決策等待的週期更長,好比報表的零散維護出錯率更高...小程序
啓動數據報表是在 2017 年 7 月份,屆時市面上尚未較爲成熟的開源方案可選,包括目前的 Metabase,調研無果後,咱們選擇了純自研,目標是讓產品經理/後端開發能夠快速在線製做報表並渲染出來。
**
方式是參考數據倉庫業務表的文檔,在系統上快速的定義報表列的中文名稱以及對應的庫表字段的查詢(好比產品經理能夠不借助開發資源,自行查詢銷售的周市調次數和周我的交易單量這樣的簡單報表),因爲是取代運營本地人肉的 「搭表格」,所以這個系統取名叫作 「大表哥」,它的技術棧的進化以下:後端
功能清單:
技術棧缺點:
產品交互易用性:
功能清單:
技術棧缺點:
產品交互易用性:總體的產品設計較粗糙,菜單管理權限管理粗暴,維護成本較高,導出功能不穩定
功能清單:
技術棧缺點:
產品交互易用性:
報表製做後臺,能夠跨庫跨表的查詢數倉的數據,自由度很高:
報表展現頁面,自動關聯各類篩選組件,加強報表的檢索功能:
啓動可視化大盤是在 2019 年 1 月份,屆時銷售征戰四海,業務遍及全國各地,須要有一些更宏觀、更易於理解、更易於診斷和決策的視角來看時間線上的業務財務變化,以及跟進地面部隊的 KPI 完成狀況,就啓動了數據大盤這個項目,由於它須要有很強的定製性(好比更改 KPI 和錄入新指標等),並且比較緊急,除了付費用阿里雲 DataV 作一些過渡外,就在大表哥的基礎上啓動了數據大盤的開發,讓它能夠直接長在數據報表之上,技術棧狀況以下:
功能清單:
技術棧缺點:
產品交互易用性:編排流程覆盤,須要定時觸發任務加工數據,編輯體驗和調試體驗很差,可視化的大盤性能很差
除了傳統的餅圖柱狀圖二維表等等,也有偏定製的跟蹤 KPI 的錄入式卡片集:
啓動 Metabase 是在 2019 年 7 月份,屆時 Metabase 趨於穩定,公司的數據倉庫建設也更加成熟穩定,能夠面向 BI 團隊接收需求來開發一張張業務寬表,具有了可快速查詢的條件。
另外需求也有變化,更多端的報表及可視化的透出需求愈來愈多,好比透出到釘釘 H5 上,內部的 App webview 內,PC 中後臺的系統中,甚至是客戶的微信 H5 帳戶主頁上,就啓動了這一次的探索:基於 Metabase 來魔改報表及圖表的拼裝流程,公司本身登錄系統/權限系統的集成,與原來的大表哥作融合升級抽離微服務等等,基於這麼多可視化大盤的需求,咱們把這個通過魔改的 Metabase 更名叫 「大盤子」,它的技術棧狀況以下:
功能清單:
技術棧缺點:
產品交互易用性:
功能清單:
網頁版的報表編輯器和展現工具,具有量產數據報表和可視化搭建圖表的能力。
基於 Metabase 魔改的系統,具有數據報表和圖表搭建的全鏈路生產與應用能力。
大表哥,更偏工具屬性,它的生產鏈路是從一份報表的需求提交開始,好比想要一個報表,看全部門店昨日成交 總單數、GMV...假如門店業務的 10 個表頭業務字段也定義好了,接下來 PD/開發 進場:
從製做到展現,到透出到移動端,整個報表鏈路是閉環的,可是也有不足和缺陷:
大盤子,雖然也是工具屬性,但因爲它是站在了數倉寬表基礎設施完善的基礎上,因此針對單表(可額外 Join 一張表)的數據聚合、組合和圖表編排能力更完整,它的主流程以下:
顯然大盤子的鏈路更短,並且能夠被 webview 嵌入,能夠充分利用瀏覽器能力,它的發佈效率更高,特別是 Bug 修復和大盤具有迭代的時候,但大盤子的報表導出性能不高,同時對於偏錄入式的可視化組件支持不夠,以及 webview 自身的加載性能問題。
你們若是對比上面三波探索的功能點,會發現這個公式:
大表哥(自研) + 大表哥可視化(自研) ≈ 大盤子(半自研)
也就是咱們辛辛苦苦迭代了 2 年的的數據報表和可視化的成果,也就能頂上開發半年的 Metabase 的成果,WTF...
若是讓咱們從新回到 2017 年,咱們必定會作以下的選擇,來避開兩段彎路:
提到價值,就必定是這套技術解決方案給公司帶來的價值,在對它門覆盤時候咱們是這樣評估的:
因此這個價值是一個遞進關係的價值,在不一樣的階段發揮能力,但不能否認,咱們整個報表體系化建設中,的的確確走了彎路,多浪費了幾個月的時間,半自研的啓動其實能夠更早更果斷一些。
最後你們若是要作獨立的報表系統,或者長出大盤可視化的能力,咱們的建議依然是:
基於前面的三波探索,咱們目前明確的方向是,把大盤子和大表哥作融合,製做二維表/圖表/編排大盤的能力都給到大盤子,數倉未建設到位的零碎報表展現由大表哥接管(會被逐步弱化但難以替代,由於高頻的小報表需求是層出不窮的),同時 PC 端的大盤展現一概接入大表哥作展現,在大盤子和大表哥的背後,抽離鏈接數倉和其餘 API 的能力,封裝成微服務,同時供給大表哥和大盤子使用,以及將大表哥的導出服務也貢獻給大盤子用,簡而言之,大盤子上面製做,大表哥上面看,要透出到多端的時候,一概來嵌大盤子的大盤 URL 或者組件 SDK。
Scott 近兩年不管是面試仍是線下線上的技術分享,遇到許許多多前端同窗,因爲團隊緣由,我的緣由,職業成長,技術方向,甚至家庭等等緣由,在理想國與現實之間,在放棄與堅守之間,搖擺不停,心酸硬扛,你們能夠找我聊聊南聊聊北,對工程師的宿命有更多的瞭解,有更多的看見與聽見,Scott 微信: codingdream,也能夠來 關注 Scott 語雀跟進最新動態,本文未經許可不準轉載,得到許可請聯繫 Scott,不然在公衆號上直接轉載,尤爲是裁剪內容後轉載,我都會直接進行投訴處理。