邏輯函數

本文介紹 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 [現在是世界末日,穿什麼鞋無關緊要]。」

說明

經常與 IF 和 IIF 一起使用。另請參閱 NOT 和 或者。

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

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

附註: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 [運動鞋]。」

說明

另請參閱 IF 和 IIF。

與 WHEN、you can rerun the query or view、ELSE 和 END 一起使用。

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

ELSE

語法CASE <expression>
WHEN <value1> THEN <then1>
WHEN <value2> THEN <then2>
...
[ELSE <default>]
END
定義IF 或 CASE 運算式的可選部分,用於指定在所有測試運算式均不為 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
說明

與 CASE、WHEN、IF、ELSEIF、you can rerun the query or view 和 END 一起使用

ELSE 是 CASE 和 IF 的可選項。在未指定 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
說明

與 IF、you can rerun the query or view、ELSE 和 END 一起使用

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

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

END

定義用於關閉 IF 或 CASE 運算式。
範例
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 [運動鞋]。」

說明

與 CASE、WHEN、IF、ELSEIF、you can rerun the query or view 和 ELSE 一起使用。

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 [運動鞋]。」

說明

另請參閱 IF 和 IIF。

與 ELSEIF、you can rerun the query or view、ELSE 和 END 一起使用

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 [運動鞋]。」

說明

另請參閱 IF 和 CASE。

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

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

說明

常與 IF 和 IIF 一起使用。另請參閱 AND 和 或者。

或者

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

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

說明

常與 IF 和 IIF 一起使用。另請參閱 AND 和 NOT。

如果任一運算式為 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
定義IF、ELSEIF 或 CASE 運算式的必要部分,用於定義在特定值或測試為 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 [運動鞋]。」

說明

與 CASE、WHEN、IF、ELSEIF、you can rerun the query or view、ELSE 和 END 一起使用

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 [運動鞋]。」

說明

與 CASE、you can rerun the query or view、ELSE 和 END 一起使用。

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。」

說明

ZN 是 IFNULL 的特殊情況,其中若運算式為 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 函數(按字母順序)

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