編者按在我學習Tableau過程中,詳細級別表達式是最大的攔路虎。這篇博客,最早寫于2018年8月,一年時間做了幾次重大修改,并增加了續篇。
LOD 表達式是 Tableau 學習過程中特別重要的一關,邁過去,Tableau 的可視化可以變化無窮,根據需要產生非常多的變化。對于缺乏 BI 基礎的初學者而言,理解詳細級別表達式的難點不在于語法,而在于充分理解它的背景知識(詳細級別、聚合度、顆粒度)和它在可視化分析中的位置(多種詳細級別的對比)。近期重新梳理自己的學習過程,把幾個重點的節點做分析,希望幫到更多的 Tableau 學習者。
注:非特別說明,“詳細級別表達式”、“LOD 表達式”均指 Fixed、Include 和 Exclude 三種 LOD 表達式。
理解詳細級別與詳細級別表達式
一1詳細級別、聚合度、顆粒度
理解詳細級別表達式(LOD Expression),首先要理解什么是詳細級別(LOD=Level of Detail)。詳細級別是數據聚合度/顆粒度的層次,英文簡單易懂,Level of Detail;不同的 Level,代表不同的數據聚合度、不同的顆粒度。Tableau 通過把維度字段、系統自定義的表達式加入到視圖,從而決定視圖數據的詳細級別,之后通過預設的視圖表達出來。
維度、系統預設的表達式(比如表計算)、用戶自定義的表達式(比如自定義的集合字段、LOD 表達式)本質上返回的都是一個數據集合,這些數據集合的詳細級別,通過不同的視圖表達出來。
如何理解上述的過程?為此,我們先要了解何為聚合度和顆粒度。不同于面向行數據的 Excel,Tableau 面向大數據的數據分析和展現,因此我們所看見的數據絕大多數都是聚合的,這就需要我們非常熟悉每個視圖代表的數據的聚合程度。這個聚合程度在 Tableau 中用聚合度 Aggregation 或者顆粒度 Granularity 表示。
在 Excel 中,看數據明細;在 Tableau 中,看數據的聚合程度。
Tableau 的不同的 LOD 詳細級別,對應的是不同數據的聚合度和顆粒度。
我們換一個形象的說法來表達什么是“詳細級別”、聚合、顆粒度。
假定全公司的 HR 薪酬數據是一座冰山,上面是尖尖的數據之巔,下面是沉沒在海平面之下的詳細到每個人、每天、每項工作的薪酬計算的龐雜數據。通過下面的圖,我們可以形象地設想,冰山之巔,就是聚合度最高、顆粒度最低的數據,也是詳細級別最低的數據,比如總公司、全年度的薪酬發放金額——可能僅僅是一個絕對值數字而已(數值完全聚合,不能再進一步聚合,可以理解為一個散點圖中的一個點)。而越往下,數據的聚合度越低,顆粒度最高,數據的詳細級別也就最高,最高顆粒度的數據可能是員工的考勤數據和發放明細(數值完全解聚)。
數據可視化和分析的過程,伴隨著數據不斷的聚合和解聚,以及數據詳細級別的變化。這就是可視化分析的魅力。
在 Tableau 中,每增加一個維度,就意味著數據的詳細級別在向下移動,在視圖中的標記就會增加,比如說,我們在部門、實發金額的基礎上增加其他維度到視圖中,視圖中的標記就會越來越多,數據顆粒度、詳細程度越來越高。比如下面的圖片,每增加一個維度或者度量字段,數據的詳細級別就會從上向下移動,數據的顆粒度就會增加一層。
維度 | 度量 | 說明 |
部門 | 實發金額 | 各部門實發金額的對比 |
部門、薪酬分類 | 實發金額 | 各部門、各個薪酬分類的實發金額聚合 |
部門、薪酬分類 | 實發金額、實付金額 | 各部門、各個薪酬分類中實發金額和實付金額的聚合 |
部門、員工、薪酬分類 | 實發金額、實付金額 | 各部門、各個員工,各個薪酬分類中實發、實付金額聚合 |
分月、部門、員工、薪酬分類 | 實發金額、實付金額 | 各個月份中,各部門、各個員工,各個薪酬分類中實發、實付金額聚合 |
在 Tableau 中,如何判斷操作能引起“視圖詳細級別”(Viz Level of Detail)的變化?最簡單的方法就是看視圖中標記的數量。
通常,只要把維度字段或者集字段拖入到視圖,Tableau 會根據“可視化詳細級別”(Viz LOD)對數據進行聚合,從而引起詳細級別的變化。(PS:維度字段拖入到篩選器、工具提示中,可視化的數據范圍等會發生變化,但是不會引起詳細級別變化。)
2
冰山之喻與詳細級別表達式(LOD Expression)
在理解了聚合度、顆粒度之后,我們看一下 LOD Expression 的必要性。
針對上面數據,我們問的每個問題,都對應著一個或者多個 Level of Detail。
簡單的問題,比如“看一下各部門年度薪酬總額的對比”,這是一個 Level 的數據,用柱狀圖可視化,每個柱代表一個部門,通過看高矮對比金額的差異。
如果問題難一點,比如說,“看一下各部門中員工平均薪酬的對比”,繼續使用柱狀圖,柱子依然代表部門,高度代表什么呢?代表員工平均薪酬。可是平均薪酬需要依賴于每個員工的薪酬總額取平均,這個問題的詳細級別 Level of Detail 和之前的部門薪酬不在一個級別 Level 上。因此,這個可視化包含了兩個不同顆粒度的數據:每個員工的薪酬總額、部門的薪酬平均。這就意味著,我們不能通過一次操作來完成,而需要使用額外的方法增加另一個數據級別。一個視圖默認是一個詳細級別(Level of Detail),當我們需要展現兩個 Level of Detail 時,就需要用到 LOD Expression。LOD 表達式幫助我們解決一個視圖中包含多個詳細級別的問題。
LOD 表達式的作用是什么?借用上面的冰山的比喻,抽象地說明什么是 LOD Expression。數據是整座冰山,冰山中有我們能看到的各種要素(比如部門、員工、日期等),可視化的部分是在海平面之上的部分。最簡單的可視化方式就是把冰山下的要素直接“拖拽”到上面,不管加入多少要素,最終 Tableau 會確定性的返回對應的一個詳細級別。而遇到上面的復雜問題,我們需要在 Tableau 返回的確定性的詳細級別之外,引用另一個詳細級別的數據,同時不想讓這個詳細級別的要素(維度)出現在可視化的層面,應該如何?
這時Tableau LOD提供了一個上升或者下降的通道,實現了“引用但不可見”(比如 Include),或者“可見但局部不引用”(Exclude),甚至可以不受視圖和維度篩選影響,直接使用fixed指定引用。“引用但不可見”,就是使用LOD表達式,可以(在目前的維度基礎上)引用冰山一下的字段,讓它直接的出現在可視化中,同時不影響可視化原有的框架表達。同樣,也就出現一個下降的通道,可以把部分不需要的字段,通過 Exclude排除掉,同時又不影響冰上可見的部分。
Tableau 詳細級別的多種類型與詳細級別表達式
二
上面我們介紹了什么是詳細級別,也簡要介紹了詳細級別表達式的作用。這里我們需要特別強調的是,詳細級別表達式,并不是獨占詳細級別(LOD)這個詞匯!在 Tableau 中存在多種詳細級別,理解它們的相互區別和聯系,才能更好的理解詳細級別表達式的作用。
簡單的說,“詳細級別表達式”,只是用來更清晰地處理有關詳細級別問題的一種表達式。處理什么問題?處理在一個可視化視圖中包含多個數據詳細級別的問題(多個詳細級別,意味著多個數據聚合度/顆粒度)。
LOD Expressions represent an elegant and powerful way to answer questions involving multiple levels of granularity in a single visualization.
LOD 表達式是回答有關單一視圖中包含多個數據顆粒度級別問題的,簡潔而強大的方法。
1
Level of Detail 詳細級別的多種類型
在介紹 LOD 表達式的類型之前,我們先看看 Tableau 有哪些重要的“詳細級別”類型。以我目前有限的理解,Tableau 有三種主要類型的數據詳細級別,結合下面的圖片,可以看到它們各自的位置。
Table Calc Level of Detail(表計算詳細級別)
Viz Level of Detail (視圖詳細級別,Viz=visualization 視圖)
Row Level of Detail(行級別詳細級別)
這些詳細級別和數據的聚合度、顆粒度對應;越往上,對應的聚合度越高、顆粒度越低。我們最常見的是視圖詳細級別,表計算是在視圖詳細級別基礎上的二次計算,因此它的聚合度不會低于視圖級別;而視圖詳細級別是行級別的聚合,因此聚合度高于行級別。
我們可以通過兩個散點圖代表兩個極端,當散點圖默認只有一個點的時候,詳細級別就是下圖左上角的位置——數據完全聚合,最低的顆粒度,最低的詳細級別;當數據解聚,所有的數據點都轉化為數據點,就是右下角的位置——數據完全解聚,最高的顆粒度,最高的詳細級別。
這里有一個關鍵的問題:為什么是三種,而不是包含“詳細級別表達式”的四種詳細級別?這是我這個小白花了很久才明白的事情:
“LOD 表達式”本身不是一種詳細級別,而是一種關于 LOD 的語法表達式,它不會脫離當前的視圖詳細級別而單獨構建視圖;通過它,在原有的“視圖詳細級別”基礎上,增加新的詳細級別數據。理解了這一點,是理解 LOD Expression 在可視化分析中位置的關鍵要點。
為了更好的理解,我們在上圖的基礎上增加了 LOD 的示例圖,這里要特別注意兩條藍色的線條,它的意思可以理解為,把 LOD 表達式生成的結果返回到視圖層面,從而完成 LOD 表達式的使命——在一個視圖中提現多個詳細級別的數據。
2
LOD 詳細級別表達式的作用
我們了上面介紹了理解詳細級別的基礎概念:顆粒度和聚合度;并分析了多種詳細級別和詳細級別表達式的位置。如果用一句話,通俗的講解 LOD 表達式,不妨用這句話來概括。 “如果分析過程中需要添加一個維度,其明細程度高于或者低于已有視圖的可視化明細程度,但又不希望改變現有圖形展示內容,可采用詳細級別表達式功能。”
相比之下,英文的介紹理解起來稍微有點生澀。官方如此介紹:
詳細級別表達式(LOD Expression)提供了對視圖詳細級別(Viz)之外的數據計算聚合的簡單方法,實現在可視化中以任意的方式組合這些數據。
Level of Detail Expressions provide a way to easily compute aggregations that are not at the level of detail of the visualization. You can then integrate those values within visualizations in arbitrary ways.
如果要深刻地理解 LOD 的作用,一個很好的方法是查看“15 大詳細級別表達式”查看 LOD 可以實現的功能。比如說:
o客戶訂單頻率;
o陣列分析
o新客戶爭取率
o各個銷售代表的平均最大額交易數額
o對比銷售分析
為了讓更多的人能更好的看懂 LOD 的實際用法,我還結合 LOD 的官方指南和分析方法,做了 15 大 LOD 表達式用法的中文解讀。
理解詳細級別表達式的關鍵經驗
三
在理解上述的背景知識之后,就可以認真學習詳細級別表達式的語法規則了,官方的白皮書講述的非常清晰。我在這里補充幾個關鍵點,尤其對于初學者大有益處。
1
大括號的語法意義{}
在這里特別需要說明的一個概念是:數組。它代表的是一組數的集合,比如班級中每位同學的身高組成一個數組。在數學中經常中經常用大括號表示,Office 的表格也是用大括號。
比如,用這樣的一個數組表示五名同學的身高: {1.69,1.70,1.61,1.81,1.73}。
這是 Tableau 官方教程和幫助文章中,應該給初學者說明的事情,畢竟大部分業務出身來學習 Tableau 的人沒有這方面的基礎,比如像我。
理解了這個,就明白了為什么總是提示“聚合和非聚合不能混合”,為什么 Fixed LOD 結果可以作為維度,為什么詳細級別表達式可以計算每個顧客的平均消費金額。
簡單的說,{Fixed [year] : Sum([sales])} 這個表達式,返回的結果是 {1,2,35,499,99} 這樣的一組數據,而不是我們習以為常的一個靜態數值。
數組不能和數值求
LOD 的大括號
2LOD 表達式在 Tableau 操作中的位置
在理解詳細級別表達式的語法之后,還需要結合三種表達式在 Tableau 操作順序中的位置,才能選擇合適的表達式解決實際的問題。
Fixed 可以理解為絕對表達式,它返回的數組僅和語法指定的維度有關,與視圖無關,因此特別適合做計算字段并參與到復雜的運算中;而 Include 和 Exclude 可以理解為相對表達式,它們一方面受限于視圖中已有的維度,另一方面受限于語法中指定的維度。
特別重要的是,Fixed LOD 表達式先于維度篩選器,這就意味著如果要時計算結果免于篩選器的影響,就要使用這個類型;而 Include 和 Exclude LOD 表達式要受限于視圖中的維度,因此操作順序就要低于維度篩選器。
比如,在下圖的 {Min(Profit) } 增加了篩選器,你發現僅保留 2017 年數據時,{Min(Profit) } 結果依然是存在于 2016 年的最小值 1 。
和 Fixed 特立獨行的絕對不同,Include 和 Exclude 是相對聚合,也就是說,它們如何影響視圖詳細級別,是受視圖中的維度影響的。
總結
在這里,我們并沒有長篇大論 LOD 的語法和規則,而是重點介紹理解 LOD 表達式的背景知識,希望每個人能結合官方的白皮書和語法說明,更好地理解 LOD 表達式的用法,從而制作出變化多端的可視化報表。
-
可視化
+關注
關注
1文章
1181瀏覽量
20897 -
數據集
+關注
關注
4文章
1205瀏覽量
24649 -
LOD
+關注
關注
0文章
17瀏覽量
9471
原文標題:Tableau 資深用戶分享 | 如何深入淺出地學習 LOD 表達式
文章出處:【微信號:TableauChina,微信公眾號:Tableau社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論