BI(Business Intelligence)模型抽象

BI產(chǎn)品的核心功能是數(shù)據(jù)可視化,借助數(shù)據(jù)可視化挖掘分析數(shù)據(jù)背后的價(jià)值,從而起到輔助研究或決策的作用。

近期調(diào)研了很多BI產(chǎn)品,包括付費(fèi)的與開(kāi)源的,需要根據(jù)需求決定是購(gòu)買(mǎi)還是基于開(kāi)源的擴(kuò)展還是自己開(kāi)發(fā)。

產(chǎn)品很雜,需求又總要考慮到擴(kuò)展,如果每個(gè)產(chǎn)品都試用一遍,分析分析利弊,測(cè)試一下user story,需要的成本比較高,因此就重點(diǎn)看了兩個(gè)比較體驗(yàn)與上手的BI產(chǎn)品(FineBI和豌豆BI),抽象出了BI模型,然后根據(jù)模型再結(jié)合需求分析分析可擴(kuò)展性,以及BI產(chǎn)品在自己開(kāi)發(fā)時(shí)的難點(diǎn)。

BI模型

BI產(chǎn)品的設(shè)計(jì)思路可以抽象為下圖的模型。


BI模型抽象(原創(chuàng)圖片)

倒著推理,想要可視化數(shù)據(jù),其實(shí)依賴(lài)的是x和y,也就是說(shuō),想要生成圖表,傳給圖表的數(shù)據(jù)必須是x和y(可能有z)。最簡(jiǎn)單的場(chǎng)景就是我們要可視化的是一張數(shù)據(jù)表,且這張表直接包含要設(shè)置的x值與y值,那么直接繪圖就可以;再想要靈活一些,可能想要展示的數(shù)據(jù)不在表里,需要?jiǎng)討B(tài)計(jì)算得出,那么要支持動(dòng)態(tài)計(jì)算列,算出來(lái)后就將問(wèn)題轉(zhuǎn)變?yōu)樯弦粋€(gè)場(chǎng)景的問(wèn)題,可以直接繪圖;再靈活一些,可能數(shù)據(jù)都不是一張表,分散在n張表,需要從n張表做連接等運(yùn)算,才能得到可展示的表,轉(zhuǎn)化為上兩個(gè)場(chǎng)景的問(wèn)題。

所以,BI解決的核心問(wèn)題就可以抽象為「如何從n張表x和y」的問(wèn)題。這個(gè)過(guò)程就是「數(shù)據(jù)建模」,從n張表到x和y,可以涵蓋BI面臨的所有場(chǎng)景,需求再怎么擴(kuò)展,也不過(guò)就到n張表。

結(jié)合上述三個(gè)場(chǎng)景,「數(shù)據(jù)建?!褂挚梢圆鸱譃椤副砩伞古c「動(dòng)態(tài)列生成」兩步,「表生成」做的是把n張表變成1張表,是場(chǎng)景三到場(chǎng)景二的抽象,「動(dòng)態(tài)列生成」是場(chǎng)景二到場(chǎng)景一的抽象。


BI模型

BI產(chǎn)品可能的擴(kuò)展點(diǎn)

根據(jù)BI模型可以發(fā)現(xiàn),BI產(chǎn)品的可擴(kuò)展點(diǎn)有三個(gè)部分,即「數(shù)據(jù)獲取」、「數(shù)據(jù)建?!?、「數(shù)據(jù)可視化」。

數(shù)據(jù)獲取的擴(kuò)展點(diǎn)

數(shù)據(jù)獲取的擴(kuò)展點(diǎn)主要在于數(shù)據(jù)來(lái)源的多樣性。數(shù)據(jù)可能來(lái)自各種種類(lèi)的數(shù)據(jù)庫(kù),也可能來(lái)自文件,如果寫(xiě)死任何一個(gè)來(lái)源,在擴(kuò)展時(shí)都會(huì)變得很難受,這個(gè)問(wèn)題就抽象成了「如何屏蔽某個(gè)方向的變化,使其不影響后續(xù)步驟」,這就自然聯(lián)想到“接口”的概念。為了讓可視化依賴(lài)的圖表與數(shù)據(jù)源不耦合,可以專(zhuān)門(mén)抽象出一層表,作為可視化依賴(lài)的表,如下圖所示,所有數(shù)據(jù)源的內(nèi)容都需要先轉(zhuǎn)成這個(gè)中間依賴(lài),這樣無(wú)論數(shù)據(jù)源怎樣變,只需要配置上層,不需要修改其他內(nèi)容。事實(shí)上,看一些優(yōu)秀的開(kāi)源BI產(chǎn)品(比如superset)就會(huì)發(fā)現(xiàn),他們都會(huì)有自己的數(shù)據(jù)庫(kù)引擎,支持多種數(shù)據(jù)源,然后把數(shù)據(jù)源的數(shù)據(jù)轉(zhuǎn)化成數(shù)據(jù)庫(kù)引擎的數(shù)據(jù),設(shè)計(jì)理由就是如上所述。


可視化與數(shù)據(jù)源解耦

數(shù)據(jù)建模的擴(kuò)展點(diǎn)

數(shù)據(jù)建模的擴(kuò)展點(diǎn)其實(shí)在分析數(shù)據(jù)建模場(chǎng)景的時(shí)候已經(jīng)分析過(guò)了。如果你的需求比較簡(jiǎn)單,那么BI支持到動(dòng)態(tài)列生成就足夠,如果你的需求可能變更,并且希望變更后不需要再進(jìn)行改動(dòng),那么BI就要支持表生成,這樣未來(lái)不論需求如何擴(kuò)展變更,開(kāi)發(fā)人員都不需要再另做開(kāi)發(fā)。

這里值得一提的是關(guān)于「動(dòng)態(tài)列生成」存在的擴(kuò)展點(diǎn)。


動(dòng)態(tài)列生成問(wèn)題分類(lèi)

可以看到,動(dòng)態(tài)列生成分為三個(gè)場(chǎng)景,對(duì)于第三個(gè)場(chǎng)景,想要計(jì)算A類(lèi)與B類(lèi)的精確率,得出x和y確實(shí)是依賴(lài)這兩列,但又不是簡(jiǎn)單地「列1 / 列2」就能算出來(lái)的,對(duì)于這類(lèi)場(chǎng)景,其實(shí)可以轉(zhuǎn)化為「重組中間表」的問(wèn)題,其實(shí)期望的是根據(jù)這些數(shù)據(jù),重新得到一個(gè)「類(lèi)別 | 精確率」的中間表,然后展示出來(lái)。

所以動(dòng)態(tài)列生成的問(wèn)題可以抽象為下圖所示問(wèn)題


動(dòng)態(tài)列生成抽象

可視化的擴(kuò)展點(diǎn)

可視化的擴(kuò)展很容易想到,無(wú)非是多種類(lèi)型的圖表,然后就是交互上降低用戶(hù)的成本,支持一些分享保存的常用功能,錦上添花。

BI設(shè)計(jì)難點(diǎn)(產(chǎn)品關(guān)注點(diǎn))

從模型抽象以及可擴(kuò)展點(diǎn)來(lái)看,BI產(chǎn)品解決方案需要考慮的首先是「如何靈活地?cái)?shù)據(jù)重組」,可以想到的有兩種方式:

  1. 用SQL之類(lèi)可以實(shí)現(xiàn)多種邏輯的語(yǔ)言;
  2. 用Excel,有強(qiáng)大的公式算符做基礎(chǔ);

調(diào)研就會(huì)發(fā)現(xiàn),微軟的power BI就是基于Excel的,有Excel支撐,重組表和計(jì)算公式不是問(wèn)題,開(kāi)源的BI通常都是用SQL,也有一些小眾的用plainless等語(yǔ)言,總之就是這些語(yǔ)言可以實(shí)現(xiàn)重組表和運(yùn)算的邏輯,并且學(xué)習(xí)成本比較低。只要支持了數(shù)據(jù)重組,BI就完成了一大半。

除此之外,還需要考慮的問(wèn)題是「如何使圖表能夠動(dòng)態(tài)刷新」,由于產(chǎn)生了一系列的中間表,因此當(dāng)原數(shù)據(jù)發(fā)生變更后,這些中間表如何隨之變更,以及刷新的性能問(wèn)題,是BI實(shí)現(xiàn)時(shí)需要考慮的重點(diǎn)。

總結(jié)

從模型上能得出BI的設(shè)計(jì)思路,以及重要關(guān)注點(diǎn),這些關(guān)注點(diǎn)也是考察一款產(chǎn)品時(shí)需要注意的點(diǎn),如果一個(gè)產(chǎn)品是基于SQL的,那么你看一下他能否creat table以及create view,能否自定義sql,如果能,那么他可以滿(mǎn)足所有核心需求了,如果不能生成表,那么限制就比較大,有了模型抽象,產(chǎn)出各項(xiàng)產(chǎn)品的對(duì)比方案就會(huì)比較容易。

很多問(wèn)題看起來(lái)五花八門(mén),其實(shí)越往向上抽象越會(huì)發(fā)現(xiàn)他們的相似性,越能聯(lián)想到一些已有的解決方案,一步步推出問(wèn)題的解,大概就是格物致知吧。

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

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