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

































