CASE (Ditelusuri)

Pernyataan CASE mengevaluasi satu atau beberapa kondisi dan menampilkan hasil saat kondisi pertama terpenuhi, atau hasil default jika tidak ada kondisi yang terpenuhi.

Lihat juga: IF.

Contoh penggunaan

Penggunaan umum untuk CASE adalah membuat kategori atau pengelompokan data baru. Misalnya, untuk mengelompokkan nilai negara tertentu ke dalam dimensi Wilayah Penjualan, Anda dapat membuat pernyataan CASE seperti ini:


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

Sintaks


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

Parameter

  • condition - Kolom atau ekspresi logis. Klausa WHEN mengevaluasi condition dan menampilkan benar jika kondisi yang ditentukan terpenuhi, atau salah jika kondisi tidak terpenuhi.

  • result - Kolom atau ekspresi dari jenis apa pun. Setiap klausa WHEN harus memiliki klausa THEN yang cocok, yang menentukan hasil jika WHEN condition tersebut benar. Jika ada beberapa klausa WHEN, pernyataan CASE akan menampilkan result untuk condition benar yang pertama.

  • else_result (opsional) - Kolom atau ekspresi dari jenis apa pun. Klausa ELSE else_result menentukan hasil default untuk pernyataan CASE. Klausa ini ditampilkan jika tidak ada klausa WHEN yang benar. Jika pernyataan CASE tidak memiliki klausa ELSE, dan tidak ada klausa WHEN yang benar, pernyataan CASE akan menampilkan NULL.

Pernyataan CASE hanya dapat memiliki satu klausa ELSE.

Cara kerja CASE yang ditelusuri

Pernyataan CASE yang ditelusuri dimulai dengan kata kunci CASE dan diakhiri dengan kata kunci END. Di antara keduanya, Anda akan memiliki beberapa bagian atau klausa:

  • WHEN: Kondisi yang ingin dievaluasi. Anda dapat memiliki beberapa klausa WHEN dalam satu pernyataan CASE.
  • THEN: Hasil yang ditampilkan jika kondisi klausa WHEN benar. Anda harus memiliki satu klausa THEN untuk setiap klausa WHEN dalam pernyataan CASE.
  • ELSE: Opsional. Jika tidak ada kondisi klausa WHEN yang benar, CASE akan menampilkan nilai dalam klausa ELSE, atau NULL jika tidak ada klausa ELSE yang ditentukan.

CASE mengevaluasi setiap klausa WHEN yang berurutan dan menampilkan hasil pertama yang kondisinya benar. Klausa WHEN yang tersisa dan hasil ELSE tidak akan dievaluasi. Jika semua kondisi WHEN bernilai salah atau NULL, CASE akan menampilkan hasil ELSE, atau jika tidak ada klausa ELSE, NULL akan ditampilkan.

Contoh

Memeriksa ketidaksetaraan

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

Mengklasifikasikan nilai dimensi numerik ke dalam bucket terpisah

Misalnya, Anda dapat memisahkan pesanan menjadi "Kecil", "Sedang", atau "Besar" berdasarkan jumlah pesanan:

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

Mengevaluasi kondisi logis AND

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

Mengevaluasi kondisi logis 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

Menampilkan kolom atau nilai yang berbeda bergantung pada nilai parameter

Contoh 1: Menampilkan dimensi berdasarkan nilai parameter yang dipilih. Anda dapat menggunakan teknik ini untuk memungkinkan pengguna mengubah dimensi perincian yang digunakan oleh diagram.

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

Anda juga dapat menulisnya menggunakan sintaksis CASE sederhana:

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

Contoh 2: Menampilkan metrik yang berbeda berdasarkan nilai parameter.

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

Pernyataan CASE bertingkat

Anda dapat melakukan penyusunan bertingkat untuk pernyataan CASE guna membuat logika percabangan yang lebih kompleks:

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