tableau的的計算維度分類
- 非視圖級別聚合計算或表達式
- 視圖級別聚合計算
- 行級別計算(顆粒度最細緻)
按照顆粒度的從低到高,從整體到詳細,分爲如下情況:
顆粒度 | 計算方式 | 含義 |
---|---|---|
聚合的聚合 | 表計算 | window_sum( sum(利潤) ) 利潤聚合再聚合 |
獨立於視圖的聚合 | LOD | {fixed [指定的維度] : sum(利潤)} 僅使用指定的維度決定詳細級別,計算聚合結果 |
高於視圖的聚合 | LOD | {fixed : sum(利潤)} 數據庫中所有利潤的聚合 / {exclude [指定的維度] : sum(利潤)} 如果指定的緯度出現在視圖中,排除掉這個維度後,在新層次計算(因爲排除了一個維度,分類比原視圖少,所以聚合詳細度不如原視圖) |
視圖的聚合 | 聚合計算 | 利潤率=sum(利潤) / sum(銷量) |
低於視圖的聚合 | LOD | {include [指定的維度} : sum(利潤) } 在當前視圖下,加入指定的維度,在新層次計算利潤聚合 |
行級別(非聚合) | 行計算運算 | 利潤率 = 利潤/銷量,在數據庫的行級別下,增加一個計算字段,計算每一行的利潤率 |
行級別表達式
行級別表達式都是非聚合的;它就像Excel中的公式,是基於每一行的數據計算的。如上述的舉例:
利潤率 = 利潤/銷量
一般而言,有關比率的行級別表達式只有在行級別纔有意義;在tableau中,超過行級別就會執行默認聚合,結果的含義就與行級別的意義大不相同。如下:
對行級別比率的求和聚合,是沒有意義的。當然,我們可以修改這個字段的默認聚合爲「平均值」,當然這也要看具體需求的計算邏輯。
視圖級別表達式
視圖級別表達式是聚合表達式。
所謂視圖級別的表達式,就是在可視化圖形界面各個維度的計算關係。通過默認執行聚合計算,可以讓Tableau自動判斷在何時對哪個詳細級別執行聚合運算。
在視圖中,聚合表達式有一個特別明顯的標記,“聚合”(“AGG”),或者“屬性”(“ATTR”),如上舉例:
利潤率=sum(利潤) / sum(銷量)
下圖中,不正確方法爲:先計算每一個行級別的(利潤/銷售額)然後對所有結果求和; 正確的方式爲,先在視圖限定緯度下,對行ID的利潤和銷售額進行彙總,然後求(總計利潤/總計銷售額)得到最終的結果。
行級別和視圖級別表達式的區別
- 行級別表達式運算時不能超越行的級別,是數據源層面的計算,結果不是聚合運算,計算針對個體,不針對總體;
- 視圖級別表達式,體現了大數據的特點,是超越個體數據差異的聚合運算,不考慮個體,只計算總體;
- tableau是以視圖級別表達式爲基礎,聚合運算關注總體的差異;
- 行級別表達式是可視化之前就計算完成的,是在數據源層面的計算;而視圖級別都需要依賴於視圖,是基於可視化中維度的計算;
詳細級別表達式LOD
理解行級別表達式與視圖級別表達式的關係,是理解詳細級別表達式的基礎。LOD表達式,是單獨從數據源提取一遍數據,把計算的結果返回給視圖,多個數值構成一個數組。
表範圍詳細級別表達式
“表範圍詳細級別表達式”省略了維度限定,其實就是沒有維度聲明的fixed詳細級別表達式。因此,我們可以把“表範圍詳細級別表達式”視爲最簡單的詳細級別表達式。由此可以舉例如下:
- { Min ([利潤額]) } 在視圖中所有字段範圍,執行min,返回最小值;
- { FIXED:Min ([利潤額]) } 指定所有維度字段範圍,效果同上;
- Min([利潤額]) 行級別表達式,返回最小顆粒度範圍的min數值;
fixed的限定是在維度篩選之前,否則就會受視圖影響。
詳細級別表達式LOD
爲了更好的理解fixed的表達式,我們結合上面的表範圍做了一個對比。
在最高的顆粒度明細下,我們對比了幾個fixed表達式,區別在於維度數量不斷增加。
- { MIN([利潤額) } = {fixed: MIN([利潤額]) } ,就是上面說的表範圍,返回給視圖一個數值;
- {FIXED [訂單日期]: MIN([利潤額])} 返回每個訂單日期-年下的的min(利潤額) 結果,返回給視圖多個值min;
- {FIXED [訂單日期],[國家]:MIN([利潤額])} 返回每個訂單日期+每個國家下min(利潤額)結果,表達式返回給視圖 更多個數值;
- {FIXED [訂單日期],[國家],[產品子類]:MIN([利潤額])} 返回每個訂單日期+每個國家+每個產品子類下的詳細結果
Include /exclude LOD表達式
和fixed特立獨行的絕對不同,include和exclude是相對聚合,也就是說,它們如何影響視圖詳細級別,是受視圖中的維度影響的。
INCLUDE LOD,使用指定的維度和視圖維度進行計算聚合。由於是在視圖維度中增加新維度,因此該表達式返回的結果顆粒度比視圖級別更高(聚合級別更低)。
總結
- 在使用詳細級別表達式時,一定要明確,要在哪個維度上支持聚合
- 如果聚合維度不能受維度影響,那就用fixed;如果要指定一個視圖中沒有的維度,同時還要結合視圖的維度,那就用include;如果要排除視圖的可見維度,使用exclude;
- 表範圍詳細級別表達式,可以在不使用任何定界關鍵字的情況下在表級別定義詳細級別表達式。就是省略了維度的fixed
- 詳細級別表達式在除視圖級別外的其他維度上支持聚合。利用詳細級別表達式,可以將一個或多個維度附加到任何聚合表達式