本文由 網易雲 發佈。html
上一篇,講了什麼是數據的粒度,以及網易有數中,哪些地方可以改變視圖上的數據粒度。安全
如今正式開始跨視圖粒度計算表達式的講解,咱們首先來看一下INCLUDE表達式性能
{ INCLUDE [維度] : 聚合表達式 }
咱們用如下的示例數據來舉個例子。這份數據顯示了在2014年的1月和2月間,有A、B和C三個客戶有一些花費記錄。大數據
首先,我在網易有數中展現這兩個月的花費總額,將「Date」字段放置在X軸,而且按照「月」的粒度。「Spend」放置在Y軸,聚合方式選擇「求和」,獲得下圖。htm
網易有數提供拖拽字段的交互方式來完成圖表的繪製,但這張圖表的背後實際上是生成了一段SQL,以下:blog
圖表對應的SQL和結果get
這段SQL很容易理解,就是對Date進行了Group by,而後對Spend進行了求和。社區
每月客戶花費的平均總金額是多少
此時,我想回答一個問題,我想知道「每月客戶花費的平均總金額是多少?」class
首先,咱們仍是先來仔細理解一下這個問題。數據可視化
請注意,「每月客戶花費的平均總金額是多少?」 vs 「每月花費的平均總金額是多少?」是兩個不一樣的問題。由於數據的粒度不同。這個在網易有數裏面該怎麼作呢?
其實若是用SQL語言是很容易實現的:
這段SQL語言看似很複雜,但仔細一看,咱們所作的只是從另外一個查詢返回的結果集中進行選擇,即從紅色框的子查詢的結果中再進行選擇。咱們先來看一下,子查詢返回的結果,以下表:
子查詢結果
而後咱們再基於子查詢中的結果,對Month作分組操做,獲得月份平均值:
最終獲得下面的數據集。就是每個月每一個客戶的平均總消費金額
每個月客戶的平均總消費金額
但這樣作存在一個問題,就是爲了計算到這個結果,數據必須進行預先彙總。在以前的網易有數中,惟一的解決方案是在數據模型中建立自定義SQL視圖,先按月和客戶預先彙總的好數據。但這種解決方案很是不理想。由於若是預先進行了彙總,就限制了咱們將數據分紅幾周或幾天的能力,而且咱們沒法再訪問我的客戶。
好消息是,在新版本的網易有數中,不再會被這類問題所煩惱了!
跨視圖粒度計算表達式可以讓用戶在表達式中指定數據的在哪一個粒度上進行計算,
INCLUDE表達式
那咱們如今來正式看一下INCLUDE表達式。在這裏,咱們將回答在文章開頭部分提出的問題:「每月客戶花費的平均總金額是多少?」
還記得之前的解決方案是有多複雜嗎?而如今,你只須要建立一個計算字段:
客戶總花費
這就是你須要作的一切!
因而,咱們只須要把剛纔建立的「客戶總花費」拖到Y軸,而後聚合方式取平均值,獲得下圖
最終結果
有關這張圖表背後發生的更多細節,咱們來看一下原始SQL腳本,而且比較一下SQL中的哪些部分與咱們圖表的數據面板上的字段對應:
藍色的 [Month] 對應的是咱們X軸的字段 [月(Date)]
綠色的 [AVG TOTAL SPEND] 對應於咱們Y軸字段 [客戶總花費]
橙色的字段其實就是咱們INCLUDE表達式中寫的,INCLUDE,中文譯爲「包括」,能夠形象的理解爲:在計算時,除了當前圖表數據面板上的粒度,還要將INCLUDE後面的粒度包括進去。因此咱們看到在子查詢中,咱們會將【Month】也加到子查詢裏面。
而後基於子查詢的結果,再作一次頂層聚合,聚合回當前圖表的視圖粒度。
是否是很是很方便!
跨視圖粒度計算 表達式其實就是對SQL的高度抽象,可以不依賴圖表上的粒度,自由的指定度量的計算粒度。經過很是簡潔的語法可以知足複雜的分析需求。
這樣就可以在一張圖表上展現不一樣粒度的數據了。好比下圖,視圖上面雖然只有Date粒度,可是在顯示的時候,可以將數據聚合到不一樣的粒度。
展現
以上內容講了INCLUDE表達式的原理,後續我會繼續對EXCLUDE、FIXED表達式進行講解!
網易有數,企業級大數據可視化分析平臺,具備全面的安全保障、強大的大數據計算性能、先進的智能分析、便捷的協做分享等特性。能夠點擊這裏免費試用。
相關閱讀:
瞭解 網易雲 :
網易雲官網:https://www.163yun.com/
新用戶大禮包:https://www.163yun.com/gift
網易雲社區:https://sq.163yun.com/