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:
- Bir değer aralığını gruplandırmak,
- Veri kümenizdeki satırları etiketlemek veya
- Koşullu mantığa göre satırları toplamak.
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
Miktar | Kova |
---|---|
6 | 0-9 |
18 | 10-19 |
31 | 30-39 |
57 | 50+ |
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ği | Kanatları Var | Yüzü Var | Gözlem Türü |
---|---|---|---|
1 | Doğru | Doğru | Kuş |
2 | Doğru | Yanlış | Uçak |
3 | Yanlış | Yanlış | Süperman |
4 | Yanlış | Doğru | Bilinmeyen |
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:
- Veri kümelerinize iş tanımları veya iş mantığı uygulamak.
- Bir filtreyi güçlendirmek.
- Veri koruma alanı için verileri segmentlere ayırmak.
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ği | Sipariş Tarihi | Durum |
---|---|---|
1 | 2022-04-01 | Ödendi |
1 | 2022-04-03 | Gönderildi |
2 | 2022-05-12 | Ödendi |
2 | 2022-05-12 | İptal Edildi |
distinct(case([Status] = "Shipped", [Order ID]))
özel ifadesini oluşturun ve "Toplam Gönderilen Siparişler" olarak adlandırın.- Sipariş Tarihi'ni gruplandırma sütunu olarak seçin.
- Sonucu döndürmek için Görselleştir'e tıklayın:
Sipariş Tarihi | Toplam Gönderilen Siparişler |
---|---|
2022-04-01 | 1 |
2022-05-01 | 0 |
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.
Diğer araçlar
Coalesce
Coalesce: Değerleri birleştirme örneğinden tabloyu kullanarak:
Notlar | Yorumlar | coalesce([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. |
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ği | Sipariş Tarihi | Durum |
---|---|---|
1 | 2022-04-01 | Ödendi |
1 | 2022-04-03 | Gönderildi |
2 | 2022-05-12 | Ödendi |
2 | 2022-05-12 | İptal Edildi |
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ği | Sipariş Kimliği | Sipariş Tarihi | Durum | Miktar |
---|---|---|---|---|
1 | 1 | 2022-04-01 | Ödendi | $20 |
2 | 1 | 2022-04-03 | Gönderildi | $20 |
3 | 2 | 2022-05-12 | Ödendi | $80 |
4 | 2 | 2022-05-12 | İptal Edildi | $80 |
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ği | Kanatları Var | Yüzü Var | Gözlem Türü |
---|---|---|---|
1 | Doğru | Doğru | Kuş |
2 | Doğru | Yanlış | Uçak |
3 | Yanlış | Yanlış | Süperman |
4 | Yanlış | Doğru | Bilinmeyen |
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ği | Kanatları Var | Yüzü Var | Gözlem Türü |
---|---|---|---|
1 | Doğru | Doğru | Kuş |
2 | Doğru | Yanlış | Uçak |
3 | Yanlış | Yanlış | Süperman |
4 | Yanlış | Doğru | Bilinmeyen |
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ği | Kanatları Var | Yüzü Var | Gözlem Türü |
---|---|---|---|
1 | Doğru | Doğru | Kuş |
2 | Doğru | Yanlış | Uçak |
3 | Yanlış | Yanlış | Süperman |
4 | Yanlış | Doğru | Bilinmeyen |
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")