Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Ifelse
ifelse
mengevaluasi satu set if, maka pasangan ekspresi, dan mengembalikan nilai argumen then untuk argumen if pertama yang mengevaluasi ke true. Jika tidak ada argumen if yang mengevaluasi true, maka nilai argumen else dikembalikan.
Sintaks
ifelse(
if-expression-1
,then-expression-1
[,if-expression-n
,then-expression-n
...],else-expression
)
Pendapat
ifelse
membutuhkan satu atau lebih if, maka pasangan ekspresi, dan membutuhkan tepat satu ekspresi untuk argumen else.
- jika-ekspresi
-
Ekspresi yang akan dievaluasi sebagai benar atau tidak. Ini bisa berupa nama bidang seperti
address1
, nilai literal seperti'Unknown'
, atau fungsi lain sepertitoString(salesAmount)
. Contohnya adalahisNotNull(FieldName)
.Jika Anda menggunakan beberapa AND dan OR operator dalam
if
argumen, lampirkan pernyataan dalam tanda kurung untuk mengidentifikasi urutan pemrosesan. Misalnya,if
argumen berikut mengembalikan catatan dengan bulan 1, 2, atau 5 dan tahun 2000.ifelse((month = 5 OR month < 3) AND year = 2000, 'yes', 'no')
if
Argumen berikutnya menggunakan operator yang sama, tetapi mengembalikan catatan dengan bulan 5 dan tahun apa pun, atau dengan bulan 1 atau 2 dan satu tahun 2000.ifelse(month = 5 OR (month < 3 AND year = 2000), 'yes', 'no')
- kemudian ekspresi
-
Ekspresi untuk kembali jika argumen if dievaluasi sebagai benar. Ini bisa berupa nama bidang seperti
address1
, nilai literal seperti'Unknown'
, atau panggilan ke fungsi lain. Ekspresi harus memiliki tipe data yang sama denganthen
argumen danelse
argumen lainnya. - ekspresi orang lain
-
Ekspresi untuk kembali jika tidak ada argumen if yang dievaluasi sebagai benar. Ini bisa berupa nama bidang seperti
address1
, nilai literal seperti'Unknown'
, atau fungsi lain sepertitoString(salesAmount)
. Ekspresi harus memiliki tipe data yang sama dengan semuathen
argumen.
Jenis pengembalian
ifelse
mengembalikan nilai tipe data yang sama dengan nilai dalam ekspresi saat itu. Semua data yang dikembalikan kemudian dan ekspresi lain harus dari tipe data yang sama atau dikonversi ke tipe data yang sama.
Contoh
Contoh berikut menghasilkan kolom alias untuk bidangcountry
.
ifelse(country = "United States", "US", country = "China", "CN", country = "India", "IN", "Others")
Untuk kasus penggunaan seperti mengevaluasi setiap nilai dalam bidang terhadap daftar literal, dan mengembalikan hasil yang sesuai dengan nilai pencocokan pertama., sakelar fungsi disarankan untuk menyederhanakan pekerjaan Anda. Contoh sebelumnya dapat ditulis ulang ke pernyataan berikut menggunakanswitch:
switch(country,"United States","US","China","CN","India","IN","Others")
Contoh berikut mengkategorikan penjualan per pelanggan ke dalam tingkat yang dapat dibaca manusia.
ifelse(salesPerCustomer < 1000, “VERY_LOW”, salesPerCustomer < 10000, “LOW”, salesPerCustomer < 100000, “MEDIUM”, “HIGH”)
Contoh berikut menggunakanAND, OR, dan NOT untuk membandingkan beberapa ekspresi menggunakan operator bersyarat untuk menandai pelanggan teratas NOT di Washington atau Oregon dengan promosi khusus, yang membuat lebih dari 10 pesanan. Jika tidak ada nilai yang dikembalikan, nilainya 'n/a'
digunakan.
ifelse(( (NOT (State = 'WA' OR State = 'OR')) AND Orders > 10), 'Special Promotion XYZ', 'n/a')
Contoh berikut hanya menggunakan OR untuk menghasilkan kolom baru yang berisi nama benua yang sesuai dengan masing-masingcountry
.
ifelse(country = "United States" OR country = "Canada", "North America", country = "China" OR country = "India" OR country = "Japan", "Asia", "Others")
Contoh sebelumnya dapat disederhanakan seperti yang ditunjukkan pada contoh berikutnya. Contoh berikut menggunakan ifelse
dan in untuk membuat nilai dalam kolom baru untuk setiap baris di mana nilai diuji dalam daftar literal. Anda bisa menggunakannya ifelse
notIn juga.
ifelse(in(country,["United States", "Canada"]), "North America", in(country,["China","Japan","India"]),"Asia","Others")
Penulis dapat menyimpan daftar literal dalam parameter multivalue dan menggunakannya dalam fungsi in ataunotIn. Contoh berikut adalah setara dengan contoh sebelumnya, kecuali bahwa daftar literal disimpan dalam dua parameter multivalue.
ifelse(in(country,${NorthAmericaCountryParam}), "North America", in(country,${AsiaCountryParam}),"Asia", "Others")
Contoh berikut menetapkan grup ke catatan penjualan berdasarkan total penjualan. Struktur setiap if-then
frase meniru perilaku antara, kata kunci yang saat ini tidak berfungsi dalam ekspresi bidang terhitung. Misalnya, hasil perbandingan salesTotal >= 0 AND salesTotal < 500
mengembalikan nilai yang sama dengan SQL perbandingansalesTotal between 0 and 499
.
ifelse(salesTotal >= 0 AND salesTotal < 500, 'Group 1', salesTotal >= 500 AND salesTotal < 1000, 'Group 2', 'Group 3')
Contoh berikut menguji NULL nilai dengan menggunakan coalesce
untuk mengembalikan NULL non-nilai pertama. Alih-alih perlu mengingat arti dari NULL dalam bidang tanggal, Anda dapat menggunakan deskripsi yang dapat dibaca sebagai gantinya. Jika tanggal pemutusan adalahNULL, contoh mengembalikan tanggal penangguhan, kecuali keduanya. NULL Kemudian coalesce(DiscoDate, SuspendDate, '12/31/2491')
kembali'12/31/2491'
. Nilai yang dikembalikan harus sesuai dengan tipe data lainnya. Tanggal ini mungkin tampak seperti nilai yang tidak biasa, tetapi tanggal di abad ke-25 secara wajar mensimulasikan “akhir waktu,” yang didefinisikan sebagai tanggal tertinggi dalam data mart.
ifelse ( (coalesce(DiscoDate, SuspendDate, '12/31/2491') = '12/31/2491'), 'Active subscriber', 'Inactive subscriber')
Berikut ini menunjukkan contoh yang lebih kompleks dalam format yang lebih mudah dibaca, hanya untuk menunjukkan bahwa Anda tidak perlu mengompres kode Anda semua menjadi satu baris panjang. Contoh ini memberikan beberapa perbandingan nilai hasil survei. Ini menangani NULL nilai potensial untuk bidang ini dan mengkategorikan dua rentang yang dapat diterima. Ini juga memberi label satu rentang yang membutuhkan lebih banyak pengujian dan yang lain tidak valid (di luar jangkauan). Untuk semua nilai yang tersisa, ini menerapkan else
kondisi, dan memberi label baris sebagai membutuhkan pengujian ulang tiga tahun setelah tanggal pada baris itu.
ifelse ( isNull({SurveyResult}), 'Untested', {SurveyResult}=1, 'Range 1', {SurveyResult}=2, 'Range 2', {SurveyResult}=3, 'Need more testing', {SurveyResult}=99, 'Out of Range', concat ( 'Retest by ', toString ( addDateTime(3, "YYYY", {Date}) ) ) )
Contoh berikut memberikan nama wilayah “secara manual” dibuat untuk sekelompok negara bagian. Ini juga menggunakan spasi dan komentar, dibungkus/* */
, untuk membuatnya lebih mudah untuk mempertahankan kode.
ifelse ( /* NE REGION*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, 'Northeast', /* SE REGION*/ locate('Georgia, Alabama, South Carolina, Louisiana',{State}) > 0, 'Southeast', 'Other Region' )
Logika untuk penandaan wilayah rusak sebagai berikut:
-
Kami mencantumkan status yang kami inginkan untuk setiap wilayah, melampirkan setiap daftar dalam tanda kutip untuk membuat setiap daftar string, sebagai berikut:
-
'New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire'
-
'Georgia, Alabama, South Carolina, Louisiana'
-
Anda dapat menambahkan lebih banyak set, atau menggunakan negara, kota, provinsi, atau What3Words jika Anda mau.
-
-
Kami bertanya apakah nilai untuk
State
(untuk setiap baris) ditemukan dalam daftar, dengan menggunakanlocate
fungsi untuk mengembalikan nilai bukan nol jika keadaan ditemukan dalam daftar, sebagai berikut.locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) and locate('Georgia, Alabama, South Carolina, Louisiana',{State})
-
locate
Fungsi mengembalikan angka bukanTRUE
atauFALSE
, tetapiifelse
membutuhkan nilaiTRUE
/FALSE
Boolean. Untuk menyiasatinya, kita bisa membandingkan hasilnyalocate
dengan angka. Jika negara ada dalam daftar, nilai pengembalian lebih besar dari nol.-
Tanyakan apakah negara ada.
locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0
-
Jika ada wilayah tersebut, beri label sebagai wilayah tertentu, dalam hal ini wilayah Timur Laut.
/*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast',
-
-
Karena kami memiliki status yang tidak ada dalam daftar, dan karena
ifelse
memerlukan satuelse
ekspresi, kami menyediakan'Other Region'
sebagai label untuk status sisa./*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast', /*The else expression:*/ 'Other Region'
-
Kami membungkus semua itu dalam
ifelse( )
fungsi untuk mendapatkan versi final. Contoh berikut menyisakan negara bagian wilayah Tenggara yang asli. Anda dapat menambahkannya kembali sebagai pengganti
tag.<insert more regions here>
Jika Anda ingin menambahkan lebih banyak wilayah, Anda dapat membuat lebih banyak salinan dari dua baris tersebut dan mengubah daftar negara agar sesuai dengan tujuan Anda. Anda dapat mengubah nama wilayah menjadi sesuatu yang cocok untuk Anda, dan mengubah nama bidang dari
State
apa pun yang Anda butuhkan.ifelse ( /*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast', /*
<insert more regions here>
*/ /*The else expression:*/ 'Other Region' )catatan
Ada cara lain untuk melakukan perbandingan awal untuk ekspresi if. Misalnya, anggaplah Anda mengajukan pertanyaan “Status apa yang tidak hilang dari daftar ini?” daripada “Negara bagian mana yang ada dalam daftar?” Jika Anda melakukannya, Anda mungkin mengungkapkannya secara berbeda. Anda dapat membandingkan pernyataan locate ke nol untuk menemukan nilai yang hilang dari daftar, dan kemudian menggunakan NOT operator untuk mengklasifikasikannya sebagai “tidak hilang,” sebagai berikut.
/*The if expression:*/ NOT (locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) = 0),
Kedua versi itu benar. Versi yang Anda pilih harus paling masuk akal bagi Anda dan tim Anda, sehingga Anda dapat mempertahankannya dengan mudah. Jika semua opsi tampak sama, pilih yang paling sederhana.