邏輯函數

本文介紹 Tableau 中的邏輯函數及其用途。它還使用範例來示範如何建立邏輯計算。

為什麼使用邏輯計算

邏輯計算允許您確定某個特定條件為 true 還是 false(布林值邏輯)。例如,您可能希望根據某些截止值對值進行分類。

邏輯計算可能如下所示:

IF [Profit] > 0 
THEN 'Profitable'
ELSEIF [Profit] = 0 THEN 'Break even'
ELSE 'Loss'
END

Tableau 中的可用邏輯函數和運算子:

AND

語法<expr1> AND <expr2>
定義對兩個運算式執行邏輯合取運算。(如果雙方都為 true,則邏輯測試傳回 true。)
輸出布林值(TRUE 或 FALSE)
範例
IF [Season] = "Spring" AND "[Season] = "Fall" 
THEN "It's the apocalypse and footwear doesn't matter"
END

「若(Season = Spring [季節 = 春季])和(Season = Fall [季節 = 秋季])同時為 TRUE,則傳回 It's the apocalypse and footwear doesn't matter [現在是世界末日,穿什麼鞋無關緊要]。」

說明

經常與 IFIIF 一起使用。另請參閱 NOT或者

若兩個運算式均為 TRUE(即非 FALSENULL),則結果為 TRUE。如果任一運算式為 NULL,則結果為 NULL。在所有其他情況下,結果都為 FALSE

若您建立一個計算,其中 AND 比較的結果顯示在工作表上,則 Tableau 會顯示 TRUEFALSE。如果要變更此情況,請使用設定格式對話方塊中的「設定格式」區域。

附註AND 運算子採用短路計算。這表示如果第一個運算式計算為 FALSE,則根本不會計算第二個運算式。如果第二個運算式在第一個運算式為 FALSE 時產生錯誤,則這可能十分有用,因為在這種情況下從不計算第二個運算式。

CASE

語法CASE <expression>
WHEN <value1> THEN <then1>
WHEN <value2> THEN <then2>
...
[ELSE <default>]
END
輸出取決於 <then> 值的資料類型。
定義

計算 expression,並將其與指定選項(<value1><value2> 等)進行比較。遇到與運算式相符的 value 時,CASE 會傳回對應的 return。若未找到符合值,則傳回(可選)預設值。若沒有預設值且沒有值符合,則傳回 NULL。

範例
CASE [Season] 
WHEN 'Summer' THEN 'Sandals'
WHEN 'Winter' THEN 'Boots'
ELSE 'Sneakers'
END

「讓我們來看看 Season [季節] 欄位。若值為 Summer [夏季],則傳回 Sandals [涼鞋]。若值為 Winter [冬季],則傳回 Boots [靴子]。若計算中的選項均不符合 Season [季節] 欄位中的選項,則傳回 Sneakers [運動鞋]。」

說明

另請參閱 IFIIF

WHENyou can rerun the query or viewELSEEND 一起使用。

提示:很多時候,可以使用群組來取得與複雜的 CASE 函數相同的結果,或者使用 CASE 來取代原生分組功能,例如前面的範例。您可能想要測試哪種方法更適合您的情境。

ELSE

語法CASE <expression>
WHEN <value1> THEN <then1>
WHEN <value2> THEN <then2>
...
[ELSE <default>]
END
定義IFCASE 運算式的可選部分,用於指定在所有測試運算式均不為 TRUE 時傳回的預設值。
範例
IF [Season] = "Summer" THEN 'Sandals' 
ELSEIF [Season] = "Winter" THEN 'Boots'
ELSE 'Sneakers' 
END
CASE [Season] 
WHEN 'Summer' THEN 'Sandals'
WHEN 'Winter' THEN 'Boots'
ELSE 'Sneakers'
END
說明

CASEWHENIFELSEIFyou can rerun the query or viewEND 一起使用

ELSECASEIF 的可選項。在未指定 ELSE 的計算中,若沒有一個 <test> 為 TRUE,則整個計算將傳回 NULL。

ELSE 不需要條件(例如 [Season] = "Winter"),可以視為一種 NULL 處理形式。

ELSEIF

語法[ELSEIF <test2> THEN <then2>]
定義IF 運算式的可選部分,用於指定初始 IF 以外的附加條件。
範例
IF [Season] = "Summer" THEN 'Sandals' 
ELSEIF [Season] = "Winter" THEN 'Boots'
ELSEIF [Season] = "Spring" THEN 'Sneakers'
ELSEIF [Season] = "Autumn" THEN 'Sneakers'
ELSE 'Bare feet'
END
說明

IFyou can rerun the query or viewELSEEND 一起使用

ELSEIF 可以被認為是額外的 IF 子句。ELSEIF 為可選項,並且可以重複多次。

ELSE 不同,ELSEIF 需要一個條件(例如 [Season] = "Winter")。

END

定義用於關閉 IFCASE 運算式。
範例
IF [Season] = "Summer" THEN 'Sandals' 
ELSEIF [Season] = "Winter" THEN 'Boots'
ELSE 'Sneakers' 
END

「若 Season = Summer [季節 = 夏季],則傳回 Sandals [涼鞋]。如果不是,請看下一個運算式。若 Season = Winter [季節 = 冬季],則傳回 Boots [靴子]。若兩個運算式均不為 TRUE,則傳回 Sneakers [運動鞋]。」

CASE [Season] 
WHEN 'Summer' THEN 'Sandals'
WHEN 'Winter' THEN 'Boots'
ELSE 'Sneakers'
END

「讓我們來看看 Season [季節] 欄位。若值為 Summer [夏季],則傳回 Sandals [涼鞋]。若值為 Winter [冬季],則傳回 Boots [靴子]。若計算中的選項均不符合 Season [季節] 欄位中的選項,則傳回 Sneakers [運動鞋]。」

說明

CASEWHENIFELSEIFyou can rerun the query or viewELSE 一起使用。

IF

語法IF <test1> THEN <then1>
[ELSEIF <test2> THEN <then2>...]
[ELSE <default>]
END
輸出取決於 <then> 值的資料類型。
定義

測試一系列運算式,並為第一個為 TRUE 的 <test> 傳回 <then> 值。

範例
IF [Season] = "Summer" THEN 'Sandals' 
ELSEIF [Season] = "Winter" THEN 'Boots'
ELSE 'Sneakers' 
END

「若 Season = Summer [季節 = 夏季],則傳回 Sandals [涼鞋]。若不是,查看下一個運算式。若 Season = Winter [季節 = 冬季],則傳回 Boots [靴子]。若兩個運算式均不為 TRUE,則傳回 Sneakers [運動鞋]。」

說明

另請參閱 IFIIF

ELSEIFyou can rerun the query or viewELSEEND 一起使用

IFNULL

語法IFNULL(expr1, expr2)
輸出取決於 <expr> 值的資料類型。
定義

<expr1> 不為 NULL,則傳回該運算式,否則傳回 <expr2>

範例
IFNULL([Assigned Room], "TBD")

「如果『指派的房間』欄位不是 Null,傳回其值。如果『指派的房間』欄位為 Null,則傳回 TBD。」

說明

ISNULL 進行比較。IFNULL 會始終傳回一個值。ISNULL 會傳回一個布林值(TRUE 或 FALSE)。

另請參閱 ZN

IIF

語法IIF(<test>, <then>, <else>, [<unknown>])
輸出取決於運算式中值的資料類型。
定義檢查是否符合條件 (<test>),若測試為 TRUE,則傳回 <then>;若測試為 FALSE,則傳回 <else>;若測試為 NULL,則傳回 <unknown> 的可選值。若未指定可選的 unknown,則 IIF 傳回 NULL。
範例
IIF([Season] = 'Summer', 'Sandals', 'Other footwear')

「若 Season = Summer [季節 = 夏季],則傳回 Sandals [涼鞋]。若不是,傳回其他鞋類」

IIF([Season] = 'Summer', 'Sandals', 
IIF('Season' = 'Winter', 'Boots', 'Other footwear')
)

「若 Season = Summer [季節 = 夏季],則傳回 Sandals [涼鞋]。如果不是,請看下一個運算式。若 Season = Winter [季節 = 冬季],則傳回 Boots [靴子]。若兩者均不為 TRUE,則傳回『運動鞋』。」

IIF('Season' = 'Summer', 'Sandals', 
IIF('Season' = 'Winter', 'Boots',
IIF('Season' = 'Spring', 'Sneakers', 'Other footwear')
)
)

「若 Season = Summer [季節 = 夏季],則傳回 Sandals [涼鞋]。如果不是,請看下一個運算式。若 Season = Winter [季節 = 冬季],則傳回 Boots [靴子]。若兩個運算式均不為 TRUE,則傳回 Sneakers [運動鞋]。」

說明

另請參閱 IFCASE

IIF 沒有與 ELSEIF 等效的項(如 IF)或重複的 WHEN 子句(如 CASE)。相反,可以透過將 IIF 陳述式巢套為 <unknown> 元素來按順序計算多個測試。系統會傳回第一個(最外面的)TRUE。

也就是說,在下面的計算中,結果將為 Red [紅色],而不是 Orange [橙色],因為一旦 A=A 計算為 TRUE,運算式就會停止計算:

IIF('A' = 'A', 'Red', IIF('B' = 'B', 'Orange', IIF('C' = 'D', 'Yellow', 'Green')))

IN

語法<expr1> IN <expr2>
輸出布林值(TRUE 或 FALSE)
定義<expr1> 中的任何值與 <expr2> 中的任何值相符,則傳回 TRUE
範例
SUM([Cost]) IN (1000, 15, 200)

「『成本』欄位的值是 1000、15 還是 200?」

[Field] IN [Set]

「該欄位的值是否存在於集合中?」

說明

<expr2> 中的值可以為固定的常值清單或合併欄位。

另請參閱 WHEN

ISDATE

語法ISDATE(string)
輸出布林值(TRUE 或 FALSE)
定義<string> 為有效日期,則傳回 TRUE。輸入運算式必須為字串(文字)欄位。
範例
ISDATE("2018-09-22")

「字串 2018-09-22 是否為格式正確的日期?」

說明

是否被視為有效日期取決於對計算進行求值之系統的地區設定(連結在新視窗開啟)。例如:

在美國:

  • ISDATE("2018-09-22") = TRUE
  • ISDATE("2018-22-09") = FALSE

在英國:

  • ISDATE("2018-09-22") = FALSE
  • ISDATE("2018-22-09") = TRUE

ISNULL

語法ISNULL(expression)
輸出布林值(TRUE 或 FALSE)
定義

<expression> 為 NULL(不包含有效資料),則傳回 TRUE。

範例
ISNULL([Assigned Room])

「『指派的房間』欄位是否為 Null?」

說明

IFNULL 進行比較。IFNULL 會始終傳回一個值。ISNULL 傳回布林值。

另請參閱 ZN

MAX

語法MAX(expression)MAX(expr1, expr2)
輸出與引數相同的資料類型,若引數的任何部分為 NULL,則為 NULL 
定義

傳回兩個引數中的最大值,這兩個引數必須具有相同的資料類型。

MAX 也可以作為彙總套用於單一欄位。

範例
MAX(4,7) = 7
MAX(#3/25/1986#, #2/20/2021#) = #2/20/2021#
MAX([Name]) = "Zander"
說明

對於字串

MAX 通常是按字母順序排在最後的值。

對於資料庫資料來源,MAX 字串值是資料庫為欄定義的排序順序中的最高值。

對於日期

對於日期,MAX 是最近的日期。如果 MAX 是彙總,結果不會有日期階層。如果 MAX 是比較,結果將保留日期階層。

作為彙總

MAX(expression) 為彙總函數,會傳回單一彙總結果。這在視覺效果中顯示為 AGG(expression)

作為比較

MAX(expr1, expr2) 會比較兩個值,並傳回一個列層級值。

另請參閱 MIN

MIN

語法MIN(expression)MIN(expr1, expr2)
輸出與引數相同的資料類型,若引數的任何部分為 NULL,則為 NULL 
定義

傳回兩個引數(必須為相同資料類型)的最小值。

MIN 也可以作為彙總套用於單一欄位。

範例
MIN(4,7) = 4
MIN(#3/25/1986#, #2/20/2021#) = #3/25/1986#
MIN([Name]) = "Abebi"
說明

對於字串

MIN 通常是按字母順序排列在最前面的值。

對於資料庫資料來源,MIN 字串值是資料庫為欄定義的排序順序中的最低值。

對於日期

對於日期,MIN 是最早的日期。如果 MIN 是彙總,結果不會有日期階層。若 MIN 為比較,結果將保留日期階層。

作為彙總

MIN(expression) 為彙總函數,會傳回單一彙總結果。這在視覺效果中顯示為 AGG(expression)

作為比較

MIN(expr1, expr2) 會比較兩個值,並傳回一個列層級值。

另請參閱 MAX

NOT

語法NOT <expression>
輸出布林值(TRUE 或 FALSE)
定義對一個運算式執行邏輯非運算。
範例
IF NOT [Season] = "Summer" 
THEN 'Don't wear sandals'
ELSE 'Wear sandals' 
END

「如果『季節』不等於『夏天』,就傳回『不要』穿涼鞋。如果不是,就傳回『穿』涼鞋。」

說明

常與 IFIIF 一起使用。另請參閱 AND或者

或者

語法<expr1> OR <expr2>
輸出布林值(TRUE 或 FALSE)
定義對兩個運算式執行邏輯析取操作。
範例
IF [Season] = "Spring" OR [Season] = "Fall" 
THEN "Sneakers"
END

「如果 (Season = Spring) 或 (Season = Fall) 為 true,則傳回 Sneakers。」

說明

常與 IFIIF 一起使用。另請參閱 ANDNOT

如果任一運算式為 TRUE,則結果為 TRUE。如果兩個運算式都為 FALSE,則結果為 FALSE。如果兩個運算式都為 NULL,則結果為 NULL

若您建立的計算在工作表上顯示 OR 比較的結果,則 Tableau 將顯示 TRUE 和 FALSE。如果要變更此情況,請使用設定格式對話方塊中的「設定格式」區域。

附註OR 運算子採用短路計算。這表示如果第一個運算式計算為 TRUE,則根本不會計算第二個運算式。如果第二個運算式在第一個運算式為 TRUE 時產生錯誤,則這可能十分有用,因為在這種情況下從不計算第二個運算式。

you can rerun the query or view

語法IF <test1> THEN <then1>
[ELSEIF <test2> THEN <then2>...]
[ELSE <default>]
END
定義IFELSEIFCASE 運算式的必要部分,用於定義在特定值或測試為 TRUE 時傳回的結果。
範例
IF [Season] = "Summer" THEN 'Sandals' 
ELSEIF [Season] = "Winter" THEN 'Boots'
ELSE 'Sneakers' 
END

「若 Season = Summer [季節 = 夏季],則傳回 Sandals [涼鞋]。如果不是,請看下一個運算式。若 Season = Winter [季節 = 冬季],則傳回 Boots [靴子]。若兩個運算式均不為 TRUE,則傳回 Sneakers [運動鞋]。」

CASE [Season] 
WHEN 'Summer' THEN 'Sandals'
WHEN 'Winter' THEN 'Boots'
ELSE 'Sneakers'
END

「讓我們來看看 Season [季節] 欄位。若值為 Summer [夏季],則傳回 Sandals [涼鞋]。若值為 Winter [冬季],則傳回 Boots [靴子]。若計算中的選項均不符合 Season [季節] 欄位中的選項,則傳回 Sneakers [運動鞋]。」

說明

CASEWHENIFELSEIFyou can rerun the query or viewELSEEND 一起使用

WHEN

語法CASE <expression>
WHEN <value1> THEN <then1>
WHEN <value2> THEN <then2>
...
[ELSE <default>]
END
定義CASE 運算式的必需部分。尋找第一個與 <expression> 相符的 <value>,並傳回對應的 <then>
範例
CASE [Season] 
WHEN 'Summer' THEN 'Sandals'
WHEN 'Winter' THEN 'Boots'
ELSE 'Sneakers'
END

「讓我們來看看 Season [季節] 欄位。若值為 Summer [夏季],則傳回 Sandals [涼鞋]。若值為 Winter [冬季],則傳回 Boots [靴子]。若計算中的選項均不符合 Season [季節] 欄位中的選項,則傳回 Sneakers [運動鞋]。」

說明

CASEyou can rerun the query or viewELSEEND 一起使用。

CASE 也支援 WHEN IN 建構,例如:

CASE <expression> 
WHEN IN <set1> THEN <then1>
WHEN IN <combinedfield> THEN <then2>
...
ELSE <default>
END

WHEN IN 比較的值必須是集合、常值清單或合併欄位。另請參閱 IN

ZN

語法ZN(expression)
輸出取決於 <expression> 的資料類型,或為 0。
定義若 <expression> 不為 NULL,則傳回該運算式,否則傳回 0。
範例
ZN([Test Grade])

「若測驗成績不為 NULL,則傳回其值。若測驗成績為 NULL,則傳回 0。」

說明

ZNIFNULL 的特殊情況,其中若運算式為 NULL,則替代項始終為 0,而不是在計算中指定。

ZN 在執行額外計算時特別有用,並且 NULL 會讓整個計算為 NULL。但是,請謹慎,將這些結果解譯為 NULL 並不總是與 0 同義,並且可能表示缺失資料。

另請參閱 ISNULL


附註:其中一些實際上是邏輯運算符,顯示為黑色,而不是藍色。如需更多資訊,請參閱運算子語法

關於 CASE、IF 和 IIF 的附註

CASE 比 IF 或 IIF 更易於使用。在許多情況下,IF、IIF 和 CASE 可以互換使用。CASE 陳述式始終可以重寫為 IF 陳述式,儘管 CASE 函數通常會更簡潔並且可能更容易理解。但是,並非所有 IF 陳述式都可以寫成 CASE 陳述式,因為每個 ELSEIF 可能會引用不同的欄位。

提示:讓我們比較一下在這三個函數中使用相同邏輯的範例:

CASEIFIIF
CASE [Region]
WHEN 'West' THEN 1
WHEN 'East' THEN 2
WHEN 'South' THEN 3
WHEN 'North' Then 4
ELSE 5
END
IF [Region] = 'West' THEN 1
ELSEIF [Region] = 'East' THEN 2
ELSEIF [Region] = 'South' THEN 3
ELSEIF [Region] = 'North' THEN 4
ELSE 5
END
IIF([Region] = 'West', 1,
IIF([Region] = 'East', 2,
IIF([Region] = 'South', 3,
IIF([Region] = 'North', 4,
5, 0)
)
)
)

CASE 結構非常簡單,易於編寫和理解。但是,與 IF 或 IIF 不同,運算式(此處為 [區域])不能是邏輯運算。

CASE 的 Null 值處理方式與 IF 的處理方式相同。

IF THEN 結構允許多個 ELSEIF 子句,這使得多次計算比 IIF 更容易。

Null 值處理:任何未知(Null)結果都由與錯誤結果相同的 ELSE 子句處理。此處,除了指定的四個區域(包括 Null 值)之外的任何區域都將被指派值 5。

IIF 結構以不同於錯誤結果的方式處理未知結果,並且具有與 IF 不同的語法。如上所述,特定 Null 值處理的折衷是巢狀,這可能很難編寫和理解。

Null 值處理:除了指定的四個區域之外的任何非 Null 區域都將被指派值 5,但 Null 值將被指派 0。

附註:很多時候可以使用群組獲得與複雜 case 函數相同的結果。測試一個選項是否比另一個選項效能更高。

範例

CASE 函數對於實現等情境非常有用:

CASE LEFT(DATENAME('weekday',[Order Date]),3)
WHEN 'Sun' THEN 0
WHEN 'Mon' THEN 1
WHEN 'Tue' THEN 2
WHEN 'Wed' THEN 3
WHEN 'Thu' THEN 4
WHEN 'Fri' THEN 5
WHEN 'Sat' THEN 6
END

或讓最終使用者能夠在與參數(連結在新視窗開啟)一起使用時可以選取使用圖表中哪個度量去檢視:

CASE [Choose a Measure]
WHEN "Sales" THEN SUM([Sales])
WHEN "Profit" THEN AVG([Profit])
WHEN "Quantity" THEN COUNT([Quantity])
WHEN "Shipping Cost" THEN MEDIAN([Shipping Cost])
END

建立邏輯計算

按照下面的步驟進行操作以瞭解如何建立邏輯計算。

  1. 在 Tableau Desktop 中,連線到 Tableau 附帶的[範例 - 超級市場]已儲存資料來源。
  2. 巡覽到工作表。
  3. 從 [資料] 窗格中,將 [State] (市/縣)拖到 [列] 架。
  4. 從 [資料] 窗格中,將 [Category] (類別)拖到 [列] 架,並將其放在 [State] (市/縣)的右側。
  5. 從 [資料] 窗格中,將 [Sales] (銷售額)拖到 [欄] 架。
  6. 選取 [分析] > [建立計算欄位]
  7. 在開啟的計算編輯器中,執行以下操作:
    • 將計算欄位命名為 KPI 。
    • 輸入以下公式:
      SUM([Profit]) > 0

      此計算將快速檢查某個成員是否大於零。如果大於零,則返回 true;否則返回 false。

    • 完成後,按一下 [確定]
  8. 新計算欄位會顯示在 [資料] 窗格中的 [度量] 下。就像其他欄位一樣,您可以在一個或多個視覺效果中使用該欄位。

  9. 從 [資料] 窗格中,將 [KPI] 拖到 [標記] 卡上的 [色彩]

    您現在可以看到每個市/縣的哪些類別在虧損。

另請參閱

顯示關鍵進度指標

Tableau 中的函數

Tableau 函數(按類別)

Tableau 函數(按字母順序)

感謝您的意見反應!已成功提交您的意見回饋。謝謝!