Ana içeriğe geç

Case

case (diğer adıyla if), bir değerin bir koşul listesiyle eşleşip eşleşmediğini kontrol eder ve karşılanan ilk koşula göre bir çıktı döndürür. if ve case tamamen aynı şekilde çalışır.

İsteğe bağlı olarak, koşulların hiçbiri karşılanmazsa case'e varsayılan bir çıktı döndürmesini söyleyebilirsiniz. Varsayılan bir çıktı ayarlamazsanız, case tüm koşullarınızı kontrol ettikten sonra null döndürür (null değerleri Patrona'da boş değerler olarak görüntülenir).

Aşağıdaki durumlarda case ifadesini kullanın:

Sözdizimi
case(koşul1, çıktı1, koşul2, çıktı2, ..., varsayılan_çıktı)
Karşılanan ilk koşuldan çıktıyı döndürür.
Örnek
case(isempty("bardak yarı dolu"), "boş bardak", isnull("bardak yarı dolu"), "kayıp bardak", "bardak yarı dolu")
"bardak yarı dolu"

Sıklık tabloları veya histogramlar için verileri gruplandırma

MiktarKova
60-9
1810-19
3130-39
5750+

burada Kova, şu ifadeye sahip özel bir sütundur:

case([Amount] >= 0  AND [Amount] <=  9,  "0-9",
[Amount] >= 10 AND [Amount] <= 19, "10-19",
[Amount] >= 20 AND [Amount] <= 29, "20-29",
[Amount] >= 30 AND [Amount] <= 39, "30-39",
[Amount] >= 40 AND [Amount] <= 49, "40-49", "50+")

Birden çok sütundan koşullara göre bir satırı etiketleme

Gözlem KimliğiKanatları VarYüzü VarGözlem Türü
1DoğruDoğruKuş
2DoğruYanlışUçak
3YanlışYanlışSüperman
4YanlışDoğruBilinmeyen

burada Gözlem Türü, şu ifadeye sahip özel bir sütundur:

case([Has Wings] = TRUE  AND [Has Face] = TRUE,  "Kuş",
[Has Wings] = TRUE AND [Has Face] = FALSE, "Uçak",
[Has Wings] = FALSE AND [Has Face] = TRUE, "Süperman", "Bilinmeyen")

"Etiketlerinizi" tutan sütunları şunlar için kullanabilirsiniz:

Birden çok sütundan koşullara göre verileri toplama

Yalnızca koşullarınızı karşılayan satırları toplamak için case'i toplama fonksiyonlarıyla birleştirebilirsiniz.

Örneğin, her sipariş tarihi için benzersiz sipariş sayısını saymak istiyorsak, ancak yalnızca "Gönderildi" durumuna sahip olanları:

Sipariş KimliğiSipariş TarihiDurum
12022-04-01Ödendi
12022-04-03Gönderildi
22022-05-12Ödendi
22022-05-12İptal Edildi
  1. distinct(case([Status] = "Shipped", [Order ID])) özel ifadesini oluşturun ve "Toplam Gönderilen Siparişler" olarak adlandırın.
  2. Sipariş Tarihi'ni gruplandırma sütunu olarak seçin.
  3. Sonucu döndürmek için Görselleştir'e tıklayın:
Sipariş TarihiToplam Gönderilen Siparişler
2022-04-011
2022-05-010

Kabul edilen veri türleri

Veri türücase ile çalışır
Dize
Sayı
Zaman Damgası
Boolean
JSON

Sınırlamalar

Tüm çıktıların aynı veri türüne sahip olması gerekir.

Kaçının::

case(koşul1, "dize", koşul2, TRUE, koşul3, 1)

Yapın::

case(koşul1, "dize", koşul2, "TRUE", koşul3, "1")

İlgili fonksiyonlar

Bu bölüm, Patrona case ifadesiyle değiştirilebilir şekilde kullanılabilen fonksiyonları ve formülleri kapsar ve kullanım durumunuz için en iyi seçeneği nasıl seçeceğinize dair notlar içerir.

Patrona ifadeleri

Diğer araçlar

Coalesce

Coalesce: Değerleri birleştirme örneğinden tabloyu kullanarak:

NotlarYorumlarcoalesce([Notes], [Comments] "No notes or comments.")
Bir notum var.Bir yorumum var.Bir notum var.
Bir yorumum var.Bir yorumum var.
Bir notum var.Bir notum var.
Not veya yorum yok.

Patrona coalesce ifadesi

coalesce([Notes], [Comments] "No notes or comments.")

case ifadesine eşdeğerdir

case(ISBLANK([Notes]) = FALSE AND ISBLANK([Comments]) = FALSE, [Notes],
ISBLANK([Notes]) = TRUE AND ISBLANK([Comments]) = False, [Comments],
ISBLANK([Notes]) = FALSE AND ISBLANK([Comments]) = TRUE, [Notes],
ISBLANK([Notes]) = TRUE AND ISBLANK([Comments]) = TRUE, "No notes or comments")

Her iki sütununuz da boş olmadığında ilk değeri almayı umursamıyorsanız, coalesce yazmak çok daha güzeldir. Bu durum için belirli bir çıktı tanımlamak istiyorsanız case kullanın (örneğin, "Bir notum ve bir yorumum var" gibi).

Countif

Verileri toplama örneğinden tabloyu kullanarak:

Sipariş KimliğiSipariş TarihiDurum
12022-04-01Ödendi
12022-04-03Gönderildi
22022-05-12Ödendi
22022-05-12İptal Edildi

Patrona countif ifadesi

countif(case([Status] = "Shipped"))

case ifadesine eşdeğerdir:

count(case([Status] = "Shipped", [Row ID]))

countif, koşullarınızı karşılayan tablodaki tüm satırları saydığınızda case'e eşdeğerdir. Koşullarınızı karşılayan benzersiz satırları saymak istiyorsanız eşdeğer değildir.

Sumif

Verileri toplama örneğinden tablonun genişletilmiş bir sürümünü kullanarak:

Satır KimliğiSipariş KimliğiSipariş TarihiDurumMiktar
112022-04-01Ödendi$20
212022-04-03Gönderildi$20
322022-05-12Ödendi$80
422022-05-12İptal Edildi$80

Patrona sumif ifadesi

sumif([Amount], [Status] = "Shipped")

case ifadesine eşdeğerdir:

sum(case([Status] = "Shipped", [Amount]))

sumif, tek bir koşul için tek bir sütunu topladığınızda case'e eşdeğerdir.

Durum = "Gönderildi" olduğunda Miktar sütununu ve Durum = "İade Edildi" olduğunda (varsayımsal) başka bir sütunu, örneğin İade Edilen Miktar'ı toplamak istiyorsanız case kullanmalısınız.

SQL

Çoğu durumda (bir NoSQL veritabanı kullanmıyorsanız), not defteri düzenleyicisinden oluşturulan sorular, veritabanınıza veya veri ambarınıza karşı çalışan SQL sorgularına dönüştürülür. Patrona case ifadeleri, SQL CASE WHEN ifadelerine dönüştürülür.

Satırları etiketleme örneğinden tabloyu kullanarak:

Gözlem KimliğiKanatları VarYüzü VarGözlem Türü
1DoğruDoğruKuş
2DoğruYanlışUçak
3YanlışYanlışSüperman
4YanlışDoğruBilinmeyen

SQL CASE WHEN ifadesi:

SELECT
CASE WHEN "Has Wings" = TRUE AND "Has Face" = TRUE THEN "Kuş"
WHEN "Has Wings" = TRUE AND "Has Face" = FALSE THEN "Uçak"
WHEN "Has Wings" = FALSE AND "Has Face" = TRUE THEN "Süperman"
ELSE "Bilinmeyen" END
FROM mystery_sightings

Gözlem Türü için kullanılan case ifadesine eşdeğerdir:

case([Has Wings] = TRUE  AND [Has Face] = TRUE,  "Kuş",
[Has Wings] = TRUE AND [Has Face] = FALSE, "Uçak",
[Has Wings] = FALSE AND [Has Face] = TRUE, "Süperman", "Bilinmeyen")

Örneğin, çubuk grafiklerini sıralamak için bu SQL hilesi bunun yerine bir Patrona case ifadesi kullanılarak yazılabilir.

E-Tablolar

Satırları etiketleme örneğinden tabloyu kullanarak:

Gözlem KimliğiKanatları VarYüzü VarGözlem Türü
1DoğruDoğruKuş
2DoğruYanlışUçak
3YanlışYanlışSüperman
4YanlışDoğruBilinmeyen

E-tablo formülü

=IF(AND(B2 = TRUE, C2 = TRUE), "Kuş",
IF(AND(B2 = TRUE, C2 = FALSE), "Uçak",
IF(AND(B2 = FALSE, C2 = TRUE), "Süperman", "Bilinmeyen")
)
)

Gözlem Türü için kullanılan case ifadesine eşdeğerdir:

case([Has Wings] = TRUE  AND [Has Face] = TRUE,  "Kuş",
[Has Wings] = TRUE AND [Has Face] = FALSE, "Uçak",
[Has Wings] = FALSE AND [Has Face] = TRUE, "Süperman", "Bilinmeyen")

Python

Python kullanarak koşullu mantığı uygulamak için birçok yol vardır. Patrona case ifadelerine dönüştürmek mantıklı olan yaklaşımları ele alacağız.

Satırları etiketleme örneğinden tabloyu kullanarak (ve df adlı bir veri çerçevesinde olduğunu varsayarak):

Gözlem KimliğiKanatları VarYüzü VarGözlem Türü
1DoğruDoğruKuş
2DoğruYanlışUçak
3YanlışYanlışSüperman
4YanlışDoğruBilinmeyen

numpy select()

conditions = [
(df["has_wings"] == True) & (df["has_face"] == True),
(df["has_wings"] == True) & (df["has_face"] == False),
(df["has_wings"] == False) & (df["has_face"] == True)]

outputs = ["Kuş", "Uçak", "Süperman"]

df["Gözlem Türü"] = np.select(conditions, outputs, default="Bilinmeyen")

pandas apply() ile yardımcı fonksiyon

def Identify(df):
if ((df["has_wings"] == True) & (df["has_face"] == True)):
return "Kuş"
elif ((df["has_wings"] == True) & (df["has_face"] == False)):
return "Uçak"
elif ((df["has_wings"] == False) & (df["has_face"] == True)):
return "Süperman"
else:
return "Bilinmeyen"

df["Gözlem Türü"]= df.apply(Identify, axis=1)

Yukarıdaki yaklaşımlar, Gözlem Türü için kullanılan case ifadesine eşdeğerdir:

case([Has Wings] = TRUE  AND [Has Face] = TRUE,  "Kuş",
[Has Wings] = TRUE AND [Has Face] = FALSE, "Uçak",
[Has Wings] = FALSE AND [Has Face] = TRUE, "Süperman", "Bilinmeyen")

Daha fazla okuma