BI產(chǎn)品的核心功能是數(shù)據(jù)可視化,借助數(shù)據(jù)可視化挖掘分析數(shù)據(jù)背后的價值,從而起到輔助研究或決策的作用挡爵。
近期調(diào)研了很多BI產(chǎn)品,包括付費的與開源的甚垦,需要根據(jù)需求決定是購買還是基于開源的擴展還是自己開發(fā)茶鹃。
產(chǎn)品很雜,需求又總要考慮到擴展艰亮,如果每個產(chǎn)品都試用一遍闭翩,分析分析利弊,測試一下user story垃杖,需要的成本比較高男杈,因此就重點看了兩個比較體驗與上手的BI產(chǎn)品(FineBI和豌豆BI)丈屹,抽象出了BI模型调俘,然后根據(jù)模型再結(jié)合需求分析分析可擴展性,以及BI產(chǎn)品在自己開發(fā)時的難點旺垒。
BI模型
BI產(chǎn)品的設(shè)計思路可以抽象為下圖的模型彩库。
倒著推理,想要可視化數(shù)據(jù)先蒋,其實依賴的是x和y骇钦,也就是說,想要生成圖表竞漾,傳給圖表的數(shù)據(jù)必須是x和y(可能有z)眯搭。最簡單的場景就是我們要可視化的是一張數(shù)據(jù)表窥翩,且這張表直接包含要設(shè)置的x值與y值,那么直接繪圖就可以鳞仙;再想要靈活一些寇蚊,可能想要展示的數(shù)據(jù)不在表里,需要動態(tài)計算得出棍好,那么要支持動態(tài)計算列仗岸,算出來后就將問題轉(zhuǎn)變?yōu)樯弦粋€場景的問題,可以直接繪圖借笙;再靈活一些扒怖,可能數(shù)據(jù)都不是一張表,分散在n張表业稼,需要從n張表做連接等運算盗痒,才能得到可展示的表,轉(zhuǎn)化為上兩個場景的問題低散。
所以积糯,BI解決的核心問題就可以抽象為「如何從n張表到x和y」的問題。這個過程就是「數(shù)據(jù)建那矗」看成,從n張表到x和y,可以涵蓋BI面臨的所有場景跨嘉,需求再怎么擴展川慌,也不過就到n張表。
結(jié)合上述三個場景祠乃,「數(shù)據(jù)建拿沃兀」又可以拆分為「表生成」與「動態(tài)列生成」兩步,「表生成」做的是把n張表變成1張表亮瓷,是場景三到場景二的抽象琴拧,「動態(tài)列生成」是場景二到場景一的抽象。
BI產(chǎn)品可能的擴展點
根據(jù)BI模型可以發(fā)現(xiàn)嘱支,BI產(chǎn)品的可擴展點有三個部分蚓胸,即「數(shù)據(jù)獲取」、「數(shù)據(jù)建某Γ」沛膳、「數(shù)據(jù)可視化」。
數(shù)據(jù)獲取的擴展點
數(shù)據(jù)獲取的擴展點主要在于數(shù)據(jù)來源的多樣性汛聚。數(shù)據(jù)可能來自各種種類的數(shù)據(jù)庫锹安,也可能來自文件,如果寫死任何一個來源,在擴展時都會變得很難受叹哭,這個問題就抽象成了「如何屏蔽某個方向的變化忍宋,使其不影響后續(xù)步驟」,這就自然聯(lián)想到“接口”的概念风罩。為了讓可視化依賴的圖表與數(shù)據(jù)源不耦合讶踪,可以專門抽象出一層表,作為可視化依賴的表泊交,如下圖所示乳讥,所有數(shù)據(jù)源的內(nèi)容都需要先轉(zhuǎn)成這個中間依賴,這樣無論數(shù)據(jù)源怎樣變廓俭,只需要配置上層云石,不需要修改其他內(nèi)容。事實上研乒,看一些優(yōu)秀的開源BI產(chǎn)品(比如superset)就會發(fā)現(xiàn)汹忠,他們都會有自己的數(shù)據(jù)庫引擎,支持多種數(shù)據(jù)源雹熬,然后把數(shù)據(jù)源的數(shù)據(jù)轉(zhuǎn)化成數(shù)據(jù)庫引擎的數(shù)據(jù)宽菜,設(shè)計理由就是如上所述。
數(shù)據(jù)建模的擴展點
數(shù)據(jù)建模的擴展點其實在分析數(shù)據(jù)建模場景的時候已經(jīng)分析過了竿报。如果你的需求比較簡單铅乡,那么BI支持到動態(tài)列生成就足夠,如果你的需求可能變更烈菌,并且希望變更后不需要再進行改動阵幸,那么BI就要支持表生成,這樣未來不論需求如何擴展變更芽世,開發(fā)人員都不需要再另做開發(fā)挚赊。
這里值得一提的是關(guān)于「動態(tài)列生成」存在的擴展點。
可以看到济瓢,動態(tài)列生成分為三個場景荠割,對于第三個場景,想要計算A類與B類的精確率旺矾,得出x和y確實是依賴這兩列蔑鹦,但又不是簡單地「列1 / 列2」就能算出來的,對于這類場景宠漩,其實可以轉(zhuǎn)化為「重組中間表」的問題举反,其實期望的是根據(jù)這些數(shù)據(jù),重新得到一個「類別 | 精確率」的中間表扒吁,然后展示出來。
所以動態(tài)列生成的問題可以抽象為下圖所示問題
可視化的擴展點
可視化的擴展很容易想到,無非是多種類型的圖表雕崩,然后就是交互上降低用戶的成本魁索,支持一些分享保存的常用功能,錦上添花盼铁。
BI設(shè)計難點(產(chǎn)品關(guān)注點)
從模型抽象以及可擴展點來看粗蔚,BI產(chǎn)品解決方案需要考慮的首先是「如何靈活地數(shù)據(jù)重組」,可以想到的有兩種方式:
- 用SQL之類可以實現(xiàn)多種邏輯的語言;
- 用Excel饶火,有強大的公式算符做基礎(chǔ)鹏控;
調(diào)研就會發(fā)現(xiàn),微軟的power BI就是基于Excel的肤寝,有Excel支撐当辐,重組表和計算公式不是問題,開源的BI通常都是用SQL鲤看,也有一些小眾的用plainless等語言缘揪,總之就是這些語言可以實現(xiàn)重組表和運算的邏輯,并且學(xué)習(xí)成本比較低义桂。只要支持了數(shù)據(jù)重組找筝,BI就完成了一大半。
除此之外慷吊,還需要考慮的問題是「如何使圖表能夠動態(tài)刷新」袖裕,由于產(chǎn)生了一系列的中間表,因此當原數(shù)據(jù)發(fā)生變更后溉瓶,這些中間表如何隨之變更陆赋,以及刷新的性能問題,是BI實現(xiàn)時需要考慮的重點嚷闭。
總結(jié)
從模型上能得出BI的設(shè)計思路攒岛,以及重要關(guān)注點,這些關(guān)注點也是考察一款產(chǎn)品時需要注意的點胞锰,如果一個產(chǎn)品是基于SQL的灾锯,那么你看一下他能否creat table以及create view,能否自定義sql嗅榕,如果能顺饮,那么他可以滿足所有核心需求了,如果不能生成表凌那,那么限制就比較大兼雄,有了模型抽象,產(chǎn)出各項產(chǎn)品的對比方案就會比較容易帽蝶。
很多問題看起來五花八門赦肋,其實越往向上抽象越會發(fā)現(xiàn)他們的相似性,越能聯(lián)想到一些已有的解決方案,一步步推出問題的解佃乘,大概就是格物致知吧囱井。