1. 程式人生 > >深入淺出“跨檢視粒度計算”--2、INCLUDE表示式

深入淺出“跨檢視粒度計算”--2、INCLUDE表示式

此文已由作者王文開授權網易雲社群釋出。

歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。


上一篇,講了什麼是資料的粒度,以及網易有數中,哪些地方能夠改變檢視上的資料粒度。

現在正是開始CGC表示式的講解,我們首先來看一下INCLUDE表示式

{ INCLUDE [維度] : 聚合表示式 }

我們用以下的示例資料來舉個例子。這份資料顯示了在2014年的1月和2月間,有A、B和C三個客戶有一些花費記錄。


                                          示例資料

首先,我在網易有數中展示這兩個月的花費總額,將“Date”欄位放置在X軸,並且按照“月”的粒度。“Spend”放置在Y軸,聚合方式選擇“求和”,得到下圖。


網易有數提供拖拽欄位的互動方式來完成圖表的繪製,但這張圖表的背後其實是生成了一段SQL,如下:


                          圖表對應的SQL和結果

這段SQL很容易理解,就是對Date進行了Group by,然後對Spend進行了求和。

每個月客戶花費的平均總金額是多少

此時,我想回答一個問題,我想知道“每個月客戶花費的平均總金額是多少?”

首先,我們還是先來仔細理解一下這個問題。

請注意,“每個月客戶花費的平均總金額是多少?” vs “每個月花費的平均總金額是多少?”是兩個不同的問題。因為資料的粒度不一樣。這個在網易有數裡面該怎麼做呢?

其實如果用SQL語言是很容易實現的:


這段SQL語言看似很複雜,但仔細一看,我們所做的只是從另一個查詢返回的結果集中進行選擇,即從紅色框的子查詢的結果中再進行選擇。我們先來看一下,子查詢返回的結果,如下表:


                                                   子查詢結果

然後我們再基於子查詢中的結果,對Month做分組操作,得到月份平均值:


                            基於子查詢求平均值

最終得到下面的資料集。就是每月每個客戶的平均總消費金額


                                  每月客戶的平均總消費金額

但這樣做存在一個問題,就是為了計算到這個結果,資料必須進行預先彙總。在之前的網易有數中,唯一的解決方案是在資料模型中建立自定義SQL檢視,先按月和客戶預先彙總的好資料。但這種解決方案非常不理想。因為如果預先進行了彙總,就限制了我們將資料分成幾周或幾天的能力,並且我們無法再訪問個人客戶。

好訊息是,在新版本的網易有數中,再也不會被這類問題所煩惱了!


跨檢視粒度計算表示式(Cross-Granularity Calculation)能夠讓使用者在表示式中指定資料的在哪個粒度上進行計算,

INCLUDE表示式

那我們現在來正式看一下INCLUDE表示式。在這裡,我們將回答在文章開頭部分提出的問題:“每個月客戶花費的平均總金額是多少?”

還記得以前的解決方案是有多複雜嗎?而現在,你只需要建立一個計算欄位:


                                                  客戶總花費

這就是你需要做的一切!

於是,我們只需要把剛才建立的“客戶總花費”拖到Y軸,然後聚合方式取平均值,得到下圖


                                                       最終結果

有關這張圖表背後發生的更多細節,我們來看一下原始SQL指令碼,並且比較一下SQL中的哪些部分與我們圖表的資料面板上的欄位對應:


藍色的 [Month] 對應的是我們X軸的欄位 [月(Date)]

綠色的 [AVG TOTAL SPEND] 對應於我們Y軸欄位 [客戶總花費]

橙色的欄位其實就是我們INCLUDE表示式中寫的,INCLUDE,中文譯為“包括”,可以形象的理解為:在計算時,除了當前圖表資料面板上的粒度,還要將INCLUDE後面的粒度包括進去。所以我們看到在子查詢中,我們會將【Month】也加到子查詢裡面。

然後基於子查詢的結果,再做一次頂層聚合,聚合回當前圖表的檢視粒度。

是不是非常很方便!

CGC表示式其實就是對SQL的高度抽象,能夠不依賴圖表上的粒度,自由的指定度量的計算粒度。通過非常簡潔的語法能夠滿足複雜的分析需求。

這樣就能夠在一張圖表上展示不同粒度的資料了。比如下圖,檢視上面雖然只有Date粒度,但是在顯示的時候,能夠將資料聚合到不同的粒度。


展示

以上內容講了INCLUDE表示式的原理,後續我會繼續對EXCLUDE、FIXED表示式進行講解!


網易有數:企業級大資料視覺化分析平臺,具有全面的安全保障、強大的大資料計算效能、先進的智慧分析、便捷的協作分享等特性。點選可免費試用


相關文章:
【推薦】 ==vs===inJavascript