CASE (Searched)

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

另請參閱:IF

用法示範

CASE 的常見用途是建立新的資料類別或群組。舉例來說,如要將所選國家/地區值分組為「Sales Region」維度,您可以建立如下所示的 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 的 condition 傳回 result

  • else_result (選用) - 任何類型的欄位或運算式。ELSE else_result 子句會為 CASE 陳述式指定預設結果。如果所有 WHEN 子句均為假,系統就會傳回這個子句。如果 CASE 陳述式沒有 ELSE 子句,且所有 WHEN 子句均為假,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