CASE (Searched)

CASE 陳述式會評估一或多個條件,並在符合第一個條件時傳回結果,或在不符合任何條件時傳回預設結果。

另請參閱:IF

用法示範

CASE 的常見用途是建立新的資料類別或分組。舉例來說,如要將所選國家/地區值分組到「銷售地區」維度,您可以建立如下所示的 CASE 陳述式:


    CASE
        WHEN Country IN ("USA","Canada","Mexico") THEN "North America"
        WHEN Country IN ("England","France") THEN "Europe"
        ELSE "Other"
    END

語法


    CASE
        WHEN condition THEN result
        [WHEN condition THEN result]
        [...]
        [ELSE else_result]
    END

參數

  • condition - 邏輯欄位或運算式。WHEN 子句會評估 condition,如果符合指定條件則傳回 true,如果不符合條件則傳回 false。

  • result - 任何類型的欄位或運算式。每個 WHEN 子句都必須有相符的 THEN 子句,指定該 WHEN condition 為 true 時的結果。如有數個 WHEN 子句,CASE 陳述式會傳回第一個 true conditionresult

  • else_result (選用) - 任何類型的欄位或運算式。ELSE else_result 子句會為 CASE 陳述式指定預設結果。如果沒有任何 WHEN 子句為 true,系統就會傳回這個子句。如果 CASE 陳述式沒有 ELSE 子句,且沒有任何 WHEN 子句為 true,則 CASE 陳述式會傳回 NULL

CASE 陳述式只能有一個 ELSE 子句。

「已搜尋」CASE的運作方式

搜尋的 CASE 陳述式以 CASE 關鍵字開頭,並以 END 關鍵字結尾。中間會穿插許多章節或條款:

  • WHEN:要評估的條件。單一 CASE 陳述式可以有多個 WHEN 子句。
  • THEN:如果 WHEN 子句的條件為 true,則傳回這個結果。CASE 陳述式中的每個 WHEN 子句都必須有一個 THEN 子句。
  • ELSE:選用。如果沒有任何 WHEN 子句條件成立,CASE 會傳回 ELSE 子句中的值,如果未指定 ELSE 子句,則傳回 NULL

CASE 會評估每個連續 WHEN 子句,並傳回條件為 true 的第一個結果。不會評估任何剩餘的 WHEN 子句與 ELSE 結果。如果所有 WHEN 條件都是 false 或 NULLCASE 會傳回 ELSE 結果;如果沒有 ELSE 子句,則傳回 NULL

範例

檢查不相等的情形

    CASE WHEN Medium != "cpc" THEN "free" ELSE "paid" END

將數值維度值分類到離散值區

舉例來說,您可以根據訂單金額將訂單分成「小型」、「中型」或「大型」:

    CASE
        WHEN Amount < 20 THEN "Small"
        WHEN Amount >= 20 and Amount < 100 THEN "Medium"
        WHEN Amount >= 100 THEN "Large"
    END

將日期維度值分類到不同的特徵分塊

舉例來說,您可以根據特定日期將一年劃分為兩個學期:

    CASE
        WHEN Date >= DATE(2018, 9, 23) and Date < DATE(2018, 12, 13) THEN "Fall Semester 2018"
        WHEN Date >= DATE(2018, 1, 3) and Date < DATE(2019, 3, 21) THEN "Winter Semester 2019"
        WHEN Date >= DATE(2019, 3, 27) and Date < DATE(2019, 6, 12) THEN "Spring Semester 2019"
        ELSE "Uncategorized"
    END

評估邏輯 AND 條件

    CASE
        WHEN Country ISO Code = "US" AND Medium = "cpc"
        THEN "US - Paid"
        ELSE "other"
    END

評估邏輯 AND/OR 條件

    CASE
        WHEN REGEXP_MATCH(Video Title, ".*Google Analytics*")
        AND is_livestream = TRUE
        OR Video Length > 600
        THEN "GA Livestream or long video"
    END

根據參數值傳回不同的欄位或值

範例 1:根據所選參數值傳回維度。您可以運用這項技巧,讓使用者切換圖表使用的細分維度。

    CASE
        WHEN Breakdown = "Product Category" THEN Product Category
        WHEN Breakdown = "Store" THEN Store
    END

您也可以使用簡單的 CASE 語法編寫這項內容:

    CASE Breakdown
        WHEN "Product Category" THEN Product Category
        WHEN "Store" THEN Store
    END

示例 2:根據參數值傳回不同的指標。

CASE WHEN Show Adjusted Cost = TRUE THEN Cost + Adjustments ELSE Cost END

巢狀 CASE 陳述式

您可以巢狀方式使用 CASE 陳述式,建立更複雜的分支邏輯:

    CASE WHEN REGEXP_CONTAINS(SKU, "Hats") THEN
        CASE WHEN Color = "blue"
            THEN "BLUE HAT" ELSE "JUST A HAT"
        END
        ELSE "NOT A HAT"
    END