談?wù)劇比?shù)”的那些事兒
一個(gè)公司的業(yè)務(wù)運(yùn)營,不論規(guī)模大小,什么行業(yè),都離不開數(shù)據(jù)的支撐。既然要數(shù)據(jù),那么就得取數(shù),誰來取數(shù),怎么取?可能是一個(gè)銷售人員在用Excel取,可能是一個(gè)DBA從生產(chǎn)數(shù)據(jù)庫中查,也可能是一個(gè)數(shù)據(jù)開發(fā)人員寫SQL或者寫程序從數(shù)據(jù)倉庫中取。
作為一個(gè)多年從事數(shù)據(jù)相關(guān)的開發(fā)者,深受“臨時(shí)數(shù)據(jù)提取”之苦,自己也是用盡十八般武藝,目的就是想盡可能的解決取數(shù)難、取數(shù)慢的問題。在此總結(jié)一下多年來對(duì)于取數(shù)的一些方法(更多是針對(duì)公司有自己的數(shù)據(jù)團(tuán)隊(duì)),大概包含以下幾個(gè)方面:
- 固定報(bào)表;
- OLAP系統(tǒng);
- 自助分析系統(tǒng);
- 自助取數(shù)系統(tǒng);
- 臨時(shí)數(shù)據(jù)提取需求;
固定報(bào)表
固定報(bào)表是最常見、最簡單的取數(shù)方式。通常是需求方在經(jīng)過對(duì)數(shù)據(jù)調(diào)研之后,形成固定的數(shù)據(jù)報(bào)表需求,然后提給數(shù)據(jù)開發(fā)團(tuán)隊(duì),由數(shù)據(jù)開發(fā)團(tuán)隊(duì)安排資源實(shí)施完成。報(bào)表形成后,定期更新數(shù)據(jù),報(bào)表一般通過WEB界面(自研或者使用開源)來呈現(xiàn),有些則是通過郵件(Excel)方式每天定時(shí)發(fā)送。
OLAP系統(tǒng)
然而需求方的數(shù)據(jù)需求并不總是固定格式的,他們希望從所有可能的維度去探索數(shù)據(jù),因?yàn)楹芏鄷r(shí)候,他們自己一開始也不知道最終想要的數(shù)據(jù)。這時(shí)候,依靠固定報(bào)表顯然無法滿足需求。
OLAP系統(tǒng)開始發(fā)揮他們的長處,數(shù)據(jù)開發(fā)團(tuán)隊(duì)依據(jù)業(yè)務(wù)和數(shù)據(jù),在OLAP系統(tǒng)中設(shè)計(jì)相應(yīng)的CUBE,定期更新,而需求方則可以在OLAP系統(tǒng)中,基于設(shè)計(jì)好的CUBE,自己選擇需要查詢的維度、指標(biāo)、條件等等,進(jìn)行探索分析查詢。
一個(gè)比較好的OLAP系統(tǒng)需要依賴以下方面:規(guī)整的數(shù)據(jù)倉庫模型(事實(shí)表、維度表),不錯(cuò)的OLAP引擎,Nice的OLAP前端工具。
自助分析系統(tǒng)
為了進(jìn)一步減少數(shù)據(jù)開發(fā)的工作量,讓需求方能更加自助和自主的去完成一些取數(shù)。用戶可以自己上傳Excel、文本,接入數(shù)據(jù)倉庫數(shù)據(jù),接入自己數(shù)據(jù)庫數(shù)據(jù),自助建模(相當(dāng)于定義Cube),然后來探索分析數(shù)據(jù)。
另外,該系統(tǒng)也適用于那些沒有數(shù)據(jù)開發(fā)團(tuán)隊(duì)的小公司。
自助取數(shù)系統(tǒng)
慢慢的,又遇到問題了。OLAP系統(tǒng)和自助分析系統(tǒng),都需要定義CUBE,而CUBE對(duì)數(shù)據(jù)模型(事實(shí)表,維度表)有一定的要求。對(duì)于一些數(shù)據(jù)需求,很難固化成數(shù)據(jù)模型去支持查詢。
剛開始,直接提供SQL接口讓需求方去提交SQL去查,但問題是他們不太會(huì)SQL,即使會(huì),提交過來的SQL執(zhí)行性能很有問題。因此,我想增加一種功能,讓需求方只去操作界面,后臺(tái)根據(jù)界面操作,轉(zhuǎn)換成SQL去執(zhí)行。這個(gè)問題看似簡單,但是我想做的更靈活簡單一些。
數(shù)據(jù)開發(fā)人員去配置一個(gè)自助取數(shù)模板,這個(gè)模板核心由一段SQL和一些變量組成。
變量有三種類型:維度、指標(biāo)和常量。
數(shù)據(jù)開發(fā)人員定義好模板后,需求方可以在自助取數(shù)任務(wù)頁面使用模板,提交取數(shù)任務(wù)。
在取數(shù)任務(wù)頁面,常量是必填字段,維度和指標(biāo)可以隨意組合選擇,也可以增加過濾條件。選擇好后,由后臺(tái)根據(jù)任務(wù)條件,替換模板中的變量,生成SQL,產(chǎn)生結(jié)果供下載。
這個(gè)過程,更像是一個(gè)動(dòng)態(tài)虛擬CUBE,雖然離線運(yùn)行SQL并生成結(jié)果需要一段時(shí)間,但靈活性更好,也收到了比較好的效果。
臨時(shí)數(shù)據(jù)提取需求
盡管為了滿足取數(shù)需求,減少數(shù)據(jù)開發(fā)工作量,我們做了上面很多的努力,但仍然有小部分的需求,需要由數(shù)據(jù)開發(fā)人員來完成。
其實(shí)依靠平臺(tái)化、系統(tǒng)化、自動(dòng)化去解決80-90%的數(shù)據(jù)需求,已經(jīng)非常不錯(cuò)了。