Tableau 中詳細層級運算式的工作方式
本文介紹詳細層級運算式的計算方式以及它們在 Tableau 中的工作方式。有關 LOD 運算式及其工作方式的詳細資訊,請參閱 Tableau 網站上的瞭解詳細層級 (LOD) 運算式(連結在新視窗開啟)白皮書。
列層級運算式和檢視層級運算式
在 Tableau 中,將為基礎表中的每一列計算引用非彙總資料來源欄的運算式。在這種情況下,運算式的維度為列層級。列層級運算式的範例為:
[Sales] / [Profit]
將在資料庫的每一列中對此計算進行求值。對於每一列,會將該列中的 [Sales] (銷售額)值除以該列中的 [Profit] (利潤)值,組建一個包含相乘結果(利潤率)的新欄。
如果建立包含此定義的計算,請使用名稱 [ProfitRatio] 儲存該計算,然後將其從 [資料] 窗格拖到架中,Tableau 通常會為檢視彙總計算欄位:
SUM([ProfitRatio])
與之相比,引用彙總資料來源欄的運算式將在檢視中的維度所定義的維度處進行計算。在這種情況下,運算式的維度為檢視層級。檢視層級維度的範例為:
SUM(Sales) / SUM(Profit)
如果將此計算拖到架(或以臨時計算的形式在架上直接鍵入)上,則 Tableau 會將其放在 AGG 函數內:
AGG(SUM(Sales) / SUM(Profit))
這就是所謂的彙總計算。有關詳情,請參閱Tableau 中的彙總函式(連結在新視窗開啟)。
放在任何位置中的維度和集欄位(在下圖中反白顯示)組成檢視詳細層級:
在 Tableau 中支援詳細層級運算式之前,無法在除檢視層級之外的其他詳細層級上建立計算。舉例來說,如果您嘗試儲存以下運算式,Tableau 會顯示錯誤訊息:「無法將彙總和非彙總參數與此函數混合」:
[Sales] – AVG([Sales])
使用者在此範例中的意圖是將每個商店的商店銷售額與所有商店的平均銷售額進行比較。此意圖現在可透過詳細層級運算式實現:
[Sales] - {AVG([Sales])}
這就是表範圍詳細層級運算式。請參閱表範圍。
詳細層級運算式的限制
以下限制和約束適用於詳細層級運算式。另請參閱詳細層級運算式的資料來源約束。
在需要對運算式中的值進行比較的檢視中使用時,引用浮點度量的詳細層級運算式可能會表現得不可靠。有關詳情,請參閱瞭解計算中的資料類型(連結在新視窗開啟)。
詳細層級運算式不顯示在 [資料來源] 頁面上。請參閱「資料來源」頁面。
引用維度聲明中的參數時,務必使用參數名稱,而不是參數值。
對於資料混合,主資料來源中的連結欄位必須位於檢視中,然後您才能使用輔助資料來源中的詳細層級運算式。請參閱資料混合疑難排解。
此外,某些資料來源有複雜性限制。Tableau 將不會為這些資料庫停用計算,但在計算變得過於複雜的情況下,將可能會出現查詢錯誤。
詳細層級運算式可以是維度或度量
當您儲存詳細層級運算式時,Tableau 會將其新增到 [資料] 窗格中的 [維度] 或 [度量] 區域。
FIXED 詳細層級運算式可能會組建度量或維度,具體情況視彙總運算式中的基礎欄位而定。因此 MIN([Date])} 將是維度,原因是 [Date] 是維度,而 {fixed Store : SUM([Sales])} 將是度量,因為 [Sales] 是度量。將 FIXED 詳細層級運算式另存新檔為度量時,您可以選取將其轉移到維度。
INCLUDE 和 EXCLUDE 詳細層級運算式始終是度量。
篩選條件和詳細層級運算式
Tableau 中有幾種不同種類的篩選器,它們將按以下順序從上至下執行。
右側的文字顯示在此序列中的何處執行詳細層級運算式。
如果要依據資料來源建立 Tableau 資料擷取,則資料擷取篩選器(顯示為橙色)是唯一相關的篩選器。表計算篩選器(深藍色)在計算執行之後應用,因此會隱藏標記,而不篩選掉計算中使用的基礎資料。
如果您熟悉 SQL,您可以將度量篩選器想像為相當於查詢中的 HAVING 子句,並將維度篩選器想像為相當於 WHERE 子句。
FIXED 計算在維度篩選器之前套用,因此,除非您將 [篩選器] 架上的欄位提升到使用內容篩選器,否則將會忽略這些計算。例如,假設檢視中的一個架上具有以下計算,而另一個架上有 [州/縣/市]:
SUM([Sales]) / ATTR({FIXED : SUM([Sales])})
此計算將為您提供縣/市的銷售額與總銷售額的比率。
如果隨後將 [State] 放在 [篩選器] 架上以隱藏某些縣/市,則篩選器將只會影響計算中的分子。由於分母是 FIXED 詳細層級運算式,因此它仍然會將仍在檢視中的州/縣/市的銷售額與所有州/縣/市(包括已從檢視中篩選掉的州/縣/市)的總銷售額相除。
INCLUDE 和 EXCLUDE 詳細層級運算式在維度篩選條件之後考慮。因此,如果您想將篩選條件應用於 FIXED 詳細層級運算式但不想使用上下文篩選條件,請考慮將它們改寫為 INCLUDE 或 EXCLUDE 運算式。
彙總和詳細層級運算式
檢視的詳細層級確定檢視中標記的數量。為檢視新增詳細資料層級運算式時,Tableau 必須協調兩個詳細資料層級:檢視中的詳細資料層級以及運算式中的詳細資料層級。
詳細層級運算式在檢視中的行為,會因為運算式的詳細層級更粗略、更精細還是與檢視中的詳細層級相同而異。在此情況下, [更粗略] 或 [更精細] 是什麼意思?
詳細層級運算式比檢視詳細層級粗略
在引用檢視中的維度子集時,運算式的詳細層級比檢視更粗略。例如,對於包含維度 [類別] 和 [區段] 的檢視,您可能會建立僅使用以下維度之一的詳細層級運算式:
{FIXED [Segment] : SUM([Sales])}
在這種情況下,運算式的詳細層級比檢視更粗略。運算式的值基於一個維度( [Segment]),而檢視則基於兩個維度( [Segment] 和 [Category])。
結果是,在檢視中使用詳細層級運算式會將導致某些值重複,也就是說,出現多次。
在將特定值與某一類別中的平均值進行比較時,重複值很有用。例如,以下計算將從平均銷售總額中減去某個客戶的平均銷售額。
[Sales] - {FIXED [Customer Name] : AVG([Sales])}
當值重複時,變更檢視中相關欄位的彙總(例如,從 AVG 變更為 SUM)將不會變更彙總的結果。
詳細層級運算式比檢視詳細層級更精細
當運算式引用檢視中維度的超集合時,運算式的詳細層級將比檢視更精細。當您在檢視中使用此類運算式時,Tableau 將對結果進行彙總,直至達到檢視層級。例如,以下詳細層級運算式引用兩個維度:
{FIXED [Segment], [Category] : SUM([Sales])}
在僅具有 [區段] 作為其詳細層級的檢視中使用此運算式時,必須對值進行彙總。如果將該運算式拖到架上,您將看到如下結果:
AVG([{FIXED [Segment]], [Category]] : SUM([Sales]])}])
Tableau 將自動指派一個彙總(此例中為平均值)。可以根據需要變更該彙總。
為檢視新增詳細層級運算式
詳細層級運算式在檢視中為彙總還是重複,是由運算式類型(FIXED、INCLUDE 或 EXCLUDE)以及運算式的粒度比檢視更粗略還是更精細確定。
INCLUDE 詳細層級運算式的詳細層級將與檢視相同或比檢視更精細。因此,值將從不會重複。
FIXED 詳細層級運算式的詳細層級可能比檢視更精細、更粗略或與之相同。是否需要對 FIXED 詳細層級的結果進行彙總取決於檢視中有什麼維度。
EXCLUDE 詳細層級運算式一律會導致檢視中出現重複值。將包括 EXCLUDE 詳細層級運算式的計算放在架上時,Tableau 預設情況下將進行 ATTR 彙總(而不是 SUM 或 AVG)以指明運算式實際上並未在彙總,並且變更彙總將不會影響檢視。
將詳細層級運算式新增到檢視中的架時,除非將這些運算式用作維度,否則會始終將它們自動封裝在彙總中。因此,如果您按兩下架並鍵入
{FIXED[Segment], [Category] : SUM([Sales])}
然後按 Enter 提交運算式,您現在將在架上看到
SUM({FIXED[Segment], [Category] : SUM([Sales])})
但如果您在架中按兩下並編輯運算式,您在編輯模式下看到的將是原始運算式。
如果在建立詳細層級運算式時將其封裝在彙總中,那麼在將包括該運算式的任何計算放在架上時,Tableau 將使用您指定的彙總,而不是為其指派一個彙總。如果不需要彙總(原因是運算式的詳細層級比檢視更粗略),當運算式位於架上時,您指定的彙總仍會顯示,但會被忽略。
詳細層級運算式的資料來源約束
對於某些資料來源,只有最新版本才支援詳細層級運算式。某些資料來源完全不支援詳細層級運算式。
此外,某些資料來源有複雜性限制。Tableau 將不會為這些資料庫停用計算,但在計算變得過於複雜的情況下,將可能會出現查詢錯誤。
資料來源 | 支援 |
Actian Vectorwise | 不支援。 |
Amazon EMR Hadoop Hive | Hive 0.13 及更高版本支援。 |
Amazon Redshift | 支援。 |
Aster Database | 版本 4.5 及更高版本支援。 |
Cloudera Hadoop | Hive 0.13 及更高版本支援。 |
Cloudera Impala | Impala 1.2.2 及更高版本支援。 |
多維資料集(多維資料來源) | 不支援。 |
DataStax Enterprise | 不支援。 |
EXASOL | 支援。 |
Firebird | 版本 2.0 及更高版本支援。 |
Generic ODBC | 受限。取決於特定資料來源。 |
Google Big Query | 標準 SQL 支援,舊版 SQL 不支援。 |
Hortonworks Hadoop Hive | Hive 0.13 及更高版本支援。 在 HIVE 版本 1.1 上,組建交叉聯結的詳細層級運算式不可靠。 如果沒有要在其上進行聯結的顯式欄位,則會出現交叉聯結。例如,對於詳細層級運算式 |
IBM BigInsights | 支援。 |
IBM DB2 | 版本 8.1 及更高版本支援。 |
MarkLogic | 版本 7.0 及更高版本支援。 |
Microsoft Access | 不支援。 |
以 Microsoft Jet 為基礎的連線(Microsoft Excel、Microsoft Access 和文字的舊版連接器) | 不支援。 |
Microsoft SQL Server | SQL Server 2005 及更高版本。 |
MySQL | 支援。 |
IBM PDA (Netezza) | 版本 7.0 及更高版本支援。 |
Oracle | 版本 9i 及更高版本支援。 |
Actian Matrix (ParAccel) | 版本 3.1 及更高版本支援。 |
Pivotal Greenplum | 版本 3.1 及更高版本支援。 |
PostgreSQL | 版本 7 及更高版本支援。 |
Progress OpenEdge | 支援。 |
SAP HANA | 支援。 |
SAP Sybase ASE | 支援。 |
SAP Sybase IQ | 版本 15.1 及更高版本支援。 |
Spark SQL | 支援。 |
Splunk | 不支援。 |
Tableau 資料擷取 | 支援。 |
Teradata | 支援。 |
Vertica | 版本 6.1 及更高版本支援。 |