邏輯函數
本文介紹 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" 「若(Season = Spring [季節 = 春季])和(Season = Fall [季節 = 秋季])同時為 TRUE,則傳回 It's the apocalypse and footwear doesn't matter [現在是世界末日,穿什麼鞋無關緊要]。」 |
說明 | 經常與 IF 和 IIF 一起使用。另請參閱 NOT 和 或者。 若兩個運算式均為 若您建立一個計算,其中 附註: |
CASE
語法 | CASE <expression>
|
輸出 | 取決於 <then> 值的資料類型。 |
定義 | 計算 |
範例 |
「讓我們來看看 Season [季節] 欄位。若值為 Summer [夏季],則傳回 Sandals [涼鞋]。若值為 Winter [冬季],則傳回 Boots [靴子]。若計算中的選項均不符合 Season [季節] 欄位中的選項,則傳回 Sneakers [運動鞋]。」 |
說明 | 與 WHEN、you can rerun the query or view、ELSE 和 END 一起使用。 提示:很多時候,可以使用群組來取得與複雜的 CASE 函數相同的結果,或者使用 CASE 來取代原生分組功能,例如前面的範例。您可能想要測試哪種方法更適合您的情境。 |
ELSE
語法 | CASE <expression>
|
定義 | IF 或 CASE 運算式的可選部分,用於指定在所有測試運算式均不為 TRUE 時傳回的預設值。 |
範例 | IF [Season] = "Summer" THEN 'Sandals' CASE [Season] |
說明 | 與 CASE、WHEN、IF、ELSEIF、you can rerun the query or view 和 END 一起使用
|
ELSEIF
語法 | [ELSEIF <test2> THEN <then2>] |
定義 | IF 運算式的可選部分,用於指定初始 IF 以外的附加條件。 |
範例 | IF [Season] = "Summer" THEN 'Sandals' |
說明 | 與 IF、you can rerun the query or view、ELSE 和 END 一起使用
與 |
END
定義 | 用於關閉 IF 或 CASE 運算式。 |
範例 | IF [Season] = "Summer" THEN 'Sandals' 「若 Season = Summer [季節 = 夏季],則傳回 Sandals [涼鞋]。如果不是,請看下一個運算式。若 Season = Winter [季節 = 冬季],則傳回 Boots [靴子]。若兩個運算式均不為 TRUE,則傳回 Sneakers [運動鞋]。」 CASE [Season] 「讓我們來看看 Season [季節] 欄位。若值為 Summer [夏季],則傳回 Sandals [涼鞋]。若值為 Winter [冬季],則傳回 Boots [靴子]。若計算中的選項均不符合 Season [季節] 欄位中的選項,則傳回 Sneakers [運動鞋]。」 |
說明 | 與 CASE、WHEN、IF、ELSEIF、you can rerun the query or view 和 ELSE 一起使用。 |
IF
語法 | IF <test1> THEN <then1> |
輸出 | 取決於 <then> 值的資料類型。 |
定義 | 測試一系列運算式,並為第一個為 TRUE 的 |
範例 | IF [Season] = "Summer" THEN 'Sandals' 「若 Season = Summer [季節 = 夏季],則傳回 Sandals [涼鞋]。若不是,查看下一個運算式。若 Season = Winter [季節 = 冬季],則傳回 Boots [靴子]。若兩個運算式均不為 TRUE,則傳回 Sneakers [運動鞋]。」 |
說明 | 與 ELSEIF、you can rerun the query or view、ELSE 和 END 一起使用 |
IFNULL
語法 | IFNULL(expr1, expr2) |
輸出 | 取決於 <expr> 值的資料類型。 |
定義 | 若 |
範例 | IFNULL([Assigned Room], "TBD") 「如果『指派的房間』欄位不是 Null,傳回其值。如果『指派的房間』欄位為 Null,則傳回 TBD。」 |
說明 | 與 ISNULL 進行比較。 另請參閱 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', 「若 Season = Summer [季節 = 夏季],則傳回 Sandals [涼鞋]。如果不是,請看下一個運算式。若 Season = Winter [季節 = 冬季],則傳回 Boots [靴子]。若兩者均不為 TRUE,則傳回『運動鞋』。」 IIF('Season' = 'Summer', 'Sandals', 「若 Season = Summer [季節 = 夏季],則傳回 Sandals [涼鞋]。如果不是,請看下一個運算式。若 Season = Winter [季節 = 冬季],則傳回 Boots [靴子]。若兩個運算式均不為 TRUE,則傳回 Sneakers [運動鞋]。」 |
說明 |
也就是說,在下面的計算中,結果將為 Red [紅色],而不是 Orange [橙色],因為一旦 A=A 計算為 TRUE,運算式就會停止計算:
|
IN
語法 | <expr1> IN <expr2> |
輸出 | 布林值(TRUE 或 FALSE) |
定義 | 若 <expr1> 中的任何值與 <expr2> 中的任何值相符,則傳回 TRUE 。 |
範例 | SUM([Cost]) IN (1000, 15, 200) 「『成本』欄位的值是 1000、15 還是 200?」 [Field] IN [Set] 「該欄位的值是否存在於集合中?」 |
說明 |
另請參閱 WHEN。 |
ISDATE
語法 | ISDATE(string) |
輸出 | 布林值(TRUE 或 FALSE) |
定義 | 若 <string> 為有效日期,則傳回 TRUE。輸入運算式必須為字串(文字)欄位。 |
範例 | ISDATE("2018-09-22") 「字串 2018-09-22 是否為格式正確的日期?」 |
說明 | 是否被視為有效日期取決於對計算進行求值之系統的地區設定(連結在新視窗開啟)。例如: 在美國:
在英國:
|
ISNULL
語法 | ISNULL(expression) |
輸出 | 布林值(TRUE 或 FALSE) |
定義 | 若 |
範例 | ISNULL([Assigned Room]) 「『指派的房間』欄位是否為 Null?」 |
說明 | 與 IFNULL 進行比較。 另請參閱 ZN。 |
MAX
語法 | MAX(expression) 或 MAX(expr1, expr2) |
輸出 | 與引數相同的資料類型,若引數的任何部分為 NULL,則為 NULL 。 |
定義 | 傳回兩個引數中的最大值,這兩個引數必須具有相同的資料類型。
|
範例 | MAX(4,7) = 7 |
說明 | 對於字串
對於資料庫資料來源, 對於日期 對於日期, 作為彙總
作為比較
另請參閱 |
MIN
語法 | MIN(expression) 或 MIN(expr1, expr2) |
輸出 | 與引數相同的資料類型,若引數的任何部分為 NULL,則為 NULL 。 |
定義 | 傳回兩個引數(必須為相同資料類型)的最小值。
|
範例 | MIN(4,7) = 4 |
說明 | 對於字串
對於資料庫資料來源, 對於日期 對於日期, 作為彙總
作為比較
另請參閱 |
NOT
語法 | NOT <expression> |
輸出 | 布林值(TRUE 或 FALSE) |
定義 | 對一個運算式執行邏輯非運算。 |
範例 | IF NOT [Season] = "Summer" 「如果『季節』不等於『夏天』,就傳回『不要』穿涼鞋。如果不是,就傳回『穿』涼鞋。」 |
說明 |
或者
語法 | <expr1> OR <expr2> |
輸出 | 布林值(TRUE 或 FALSE) |
定義 | 對兩個運算式執行邏輯析取操作。 |
範例 | IF [Season] = "Spring" OR [Season] = "Fall" 「如果 (Season = Spring) 或 (Season = Fall) 為 true,則傳回 Sneakers。」 |
說明 | 常與 IF 和 IIF 一起使用。另請參閱 AND 和 NOT。 如果任一運算式為 若您建立的計算在工作表上顯示 附註: |
you can rerun the query or view
語法 | IF <test1> THEN <then1>
|
定義 | IF 、ELSEIF 或 CASE 運算式的必要部分,用於定義在特定值或測試為 TRUE 時傳回的結果。 |
範例 | IF [Season] = "Summer" THEN 'Sandals' 「若 Season = Summer [季節 = 夏季],則傳回 Sandals [涼鞋]。如果不是,請看下一個運算式。若 Season = Winter [季節 = 冬季],則傳回 Boots [靴子]。若兩個運算式均不為 TRUE,則傳回 Sneakers [運動鞋]。」 CASE [Season] 「讓我們來看看 Season [季節] 欄位。若值為 Summer [夏季],則傳回 Sandals [涼鞋]。若值為 Winter [冬季],則傳回 Boots [靴子]。若計算中的選項均不符合 Season [季節] 欄位中的選項,則傳回 Sneakers [運動鞋]。」 |
說明 | 與 CASE、WHEN、IF、ELSEIF、you can rerun the query or view、ELSE 和 END 一起使用 |
WHEN
語法 | CASE <expression>
|
定義 | CASE 運算式的必需部分。尋找第一個與 <expression> 相符的 <value> ,並傳回對應的 <then> 。 |
範例 | CASE [Season] 「讓我們來看看 Season [季節] 欄位。若值為 Summer [夏季],則傳回 Sandals [涼鞋]。若值為 Winter [冬季],則傳回 Boots [靴子]。若計算中的選項均不符合 Season [季節] 欄位中的選項,則傳回 Sneakers [運動鞋]。」 |
說明 | 與 CASE、you can rerun the query or view、ELSE 和 END 一起使用。
CASE <expression>
|
ZN
語法 | ZN(expression) |
輸出 | 取決於 <expression> 的資料類型,或為 0。 |
定義 | 若 <expression> 不為 NULL,則傳回該運算式,否則傳回 0。 |
範例 | ZN([Test Grade]) 「若測驗成績不為 NULL,則傳回其值。若測驗成績為 NULL,則傳回 0。」 |
說明 |
另請參閱 ISNULL。 |
附註:其中一些實際上是邏輯運算符,顯示為黑色,而不是藍色。如需更多資訊,請參閱運算子語法。
CASE 比 IF 或 IIF 更易於使用。在許多情況下,IF、IIF 和 CASE 可以互換使用。CASE 陳述式始終可以重寫為 IF 陳述式,儘管 CASE 函數通常會更簡潔並且可能更容易理解。但是,並非所有 IF 陳述式都可以寫成 CASE 陳述式,因為每個 ELSEIF 可能會引用不同的欄位。
提示:讓我們比較一下在這三個函數中使用相同邏輯的範例:
CASE | IF | IIF |
CASE [Region] | IF [Region] = 'West' THEN 1 | IIF([Region] = 'West', 1, |
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
建立邏輯計算
按照下面的步驟進行操作以瞭解如何建立邏輯計算。
- 在 Tableau Desktop 中,連線到 Tableau 附帶的[範例 - 超級市場]已儲存資料來源。
- 巡覽到工作表。
- 從 [資料] 窗格中,將 [State] (市/縣)拖到 [列] 架。
- 從 [資料] 窗格中,將 [Category] (類別)拖到 [列] 架,並將其放在 [State] (市/縣)的右側。
- 從 [資料] 窗格中,將 [Sales] (銷售額)拖到 [欄] 架。
- 選取 [分析] > [建立計算欄位]。
- 在開啟的計算編輯器中,執行以下操作:
- 將計算欄位命名為 KPI 。
- 輸入以下公式:
SUM([Profit]) > 0
此計算將快速檢查某個成員是否大於零。如果大於零,則返回 true;否則返回 false。
- 完成後,按一下 [確定]。
- 從 [資料] 窗格中,將 [KPI] 拖到 [標記] 卡上的 [色彩] 。
您現在可以看到每個市/縣的哪些類別在虧損。
新計算欄位會顯示在 [資料] 窗格中的 [度量] 下。就像其他欄位一樣,您可以在一個或多個視覺效果中使用該欄位。