Data Validation: Mengapa Data Kacau Lahir dari Pintu yang Tidak Dijaga
Di artikel-artikel sebelumnya, kita sudah membangun Pabrik Resik: TRIM untuk spasi liar, Text to Columns untuk pemisahan, Remove Duplicates untuk baris kembar. Tapi pernahkah Anda bertanya: mengapa kekacauan itu bisa masuk sejak awal?
Jawabannya sederhana dan menyakitkan: karena pintu masuknya tidak dijaga. Di industri ada pepatah tua: “Garbage In, Garbage Out.” Dan dua dosa asal yang paling sering terjadi:
- Semua disimpan sebagai string. Tanggal “1 janu 2025” lolos karena bagi sistem itu hanyalah teks โ tidak ada yang bertanya “apakah ini tanggal yang sah?”
- Tidak ada validasi di pintu masuk. Kolom kota berupa teks bebas adalah undangan terbuka bagi “jaksel”, “Jakarta”, “DKI Jakarta”, sampai nama desa.
Di sinilah ekonomi kualitas data bekerja โ aturan 1-10-100: mencegah satu data salah di pintu masuk biayanya 1; memperbaikinya kemudian biayanya 10; membiarkannya lolos dan jadi keputusan bisnis biayanya 100. Selama ini kita membayar di lantai 10 dan 100. Saatnya kita bangun pertahanan di lantai 1.
๐ Insight Kunci: Dropdown adalah Tabel Alias yang Dipindahkan ke Hulu
Perhatikan ini โ tabel alias yang kita bangun untuk membersihkan data itu sebenarnya adalah dropdown yang seharusnya ada di pintu masuk. Asetnya sama persis! Hanya posisinya yang beda:
๐ Tabel Alias (sama untuk dua gerbang)
| A (alias) | B (kota_baku) | |
|---|---|---|
| 1 | alias | kota_baku |
| 2 | jaksel | Jakarta Selatan |
| 3 | jakarta selatan | Jakarta Selatan |
| 4 | dki jakarta | Jakarta |
| 5 | jakarta | Jakarta |
- Di hilir (pembersihan):
tblAliasdipakai XLOOKUP untuk menerjemahkan “jaksel” โ “Jakarta Selatan”. - Di hulu (pencegahan):
tblAliasdipakai Data Validation โ List sehingga “jaksel” tidak pernah bisa diketik โ pengguna hanya bisa memilih dari dropdown.
Satu aset, dua gerbang. Itulah mengapa Named Range dan Table yang kita ajarkan di Data Pipeline bukan sekadar trik rumus โ mereka adalah bahan baku sistem pencegahan.
๐ก๏ธ Tabel Inversi: Penyakit โ Pencegahan di Pintu Masuk
๐ Dari Penyakit ke Obat (Data Validation)
| Penyakit di Data | Akar | Pencegahan (Data Validation) | |
|---|---|---|---|
| 1 | jaksel / Jakarta / DKI / desa | Teks bebas | List dari tblKotaBaku (dropdown) |
| 2 | “1 janu 2025”, “30 feb 2000” | Tanggal = string | Sel berformat Date + validasi rentang 1/1/1900โ31/12/2010 |
| 3 | kota_tujuan “0” / kosong | Tak ada aturan wajib isi | Validasi: tidak boleh blank/0 + Error Alert “Stop” |
| 4 | agama lowercase campur | Teks bebas | Dropdown 6 agama resmi |
| 5 | “L “, “laki”, “P” campur | Teks bebas | Dropdown P / L |
| 6 | Qty/angka sebagai teks | Semua string | Format Number + validasi Whole Number |
๐ ๏ธ Langkah 1: Membuat Dropdown (List Validation)
- Siapkan
tblKotaBakudi sheet terpisah (kolom A: alias, kolom B: kota_baku). - Pilih sel tempat pengguna akan mengisi kota (misal
C2:C100). - Tab Data โ Data Validation.
- Di kotak Allow, pilih List.
- Di kotak Source, ketik
=tblKotaBaku[kota_baku](kalau pakai Table) atau blok range manual. - Centang In-cell dropdown โ OK.
Sekarang pengguna tidak bisa mengetik “jaksel” โ mereka hanya bisa memilih “Jakarta Selatan” dari dropdown. Konsistensi terjamin sejak baris pertama.
Bisa buat dropdown kota yang berubah tergantung provinsi yang dipilih sebelumnya. Rumusnya: =INDIRECT(B2) di Source, dengan Named Range untuk setiap provinsi. Ini mencegah “Jakarta” terpilih saat provinsi “Banten” dipilih.
๐ ๏ธ Langkah 2: Menjaga Tanggal (Date Validation)
- Pilih sel tanggal lahir (misal
D2:D100). - Data Validation โ Allow: Date.
- Data: between. Start date:
1/1/1900. End date:=TODAY(). - Tab Error Alert โ Style: Stop. Title: “Tanggal Tidak Valid”. Message: “Tanggal lahir harus antara 1900 dan hari ini.”
- OK.
Sekarang “1 janu 2025” ditolak mentah-mentah oleh sistem โ bahkan sebelum masuk ke sel. Pengguna mendapat pesan error yang jelas, dan data tetap bersih.
๐ ๏ธ Langkah 3: Mewajibkan Isi (No Blanks)
- Pilih sel yang wajib diisi (misal
A2:A100untuk Nama). - Data Validation โ Allow: Custom.
- Di kotak Formula, ketik:
=LEN(TRIM(A2))>0 - Tab Error Alert โ Style: Stop. Title: “Wajib Diisi”. Message: “Kolom ini tidak boleh kosong.”
- OK.
Rumus LEN(TRIM(...))>0 menolak dua hal sekaligus: sel kosong dan sel yang hanya berisi spasi โ karena ” ” juga kekacauan.
๐ง Aha! Moment: Dua Lapis Pertahanan
Data Validation adalah gerbang pertama โ mencegah kekacauan masuk. Tapi bagaimana dengan data kiriman dari sistem luar yang tidak bisa kita atur pintu masuknya? Di situlah Pabrik Resik (Power Query + alias + karantina) berdiri sebagai gerbang kedua. Dua lapis pertahanan: hulu dijaga, hilir menyaring. Itulah wujud nyata Rajin dalam 5R โ sistem yang tidak hanya bersih, tapi kebal terhadap kekacauan.
๐ง Protect Sheet: Mengunci Sistem dari Tangan Jail
Setelah Data Validation dipasang, jangan lupa mengunci sheet agar pengguna tidak bisa menghapus atau mengubah aturan validasi:
- Buka sel yang boleh diedit (misal
C2:E100) โ klik kanan โ Format Cells โ tab Protection โ hilangkan centang Locked. - Tab Review โ Protect Sheet โ beri password โ OK.
Sekarang pengguna hanya bisa mengisi sel yang diizinkan, dan tidak bisa mengutak-atik Data Validation. Sistem Anda aman dari tangan jail.
๐ Hasil Akhir: Sistem yang Kebal Kekacauan
โ SESUDAH: Input Terkendali, Data Konsisten
| A (Nama) | B (Kota) | C (Tanggal Lahir) | D (Qty) | |
|---|---|---|---|---|
| 1 | Nama | Kota | Tanggal Lahir | Qty |
| 2 | Budi Santoso | Jakarta Selatan | 19-Feb-2000 | 120 |
| 3 | Siti Rahayu | Jakarta | 14-May-2000 | 45 |
Hasil: Kota konsisten (dropdown), tanggal valid (1900โhari ini), Qty angka bulat. Tidak ada “jaksel”, tidak ada “1 janu 2025”, tidak ada teks di kolom angka.
๐ฅ File Latihan
Unduh latihan-data-validation.xlsx: berisi dua sheet โ Tanpa_Penjaga (bebas mengetik apa saja) dan Dengan_Penjaga (semua Data Validation sudah terpasang). Ketik kekacauan yang sama di keduanya, dan rasakan sendiri bedanya membersihkan versus mencegah.
โฌ๏ธ Unduh File Latihan (.xlsx)
๐งช Sesi Uji di Sheet Dengan_Penjaga
- Kolom Kota: ketik
jakselโ ditolak. PilihJakarta Selatandari dropdown โ diterima. - Kolom Tanggal Lahir: ketik
1 janu 2025โ ditolak (bukan tanggal sah). Ketik1/1/2030โ ditolak (di luar rentang). Ketik1/1/2000โ diterima. - Kolom Qty: ketik
dua belasโ ditolak. Ketik12,5โ ditolak (harus bulat). Ketik12โ diterima. - Kolom Nama: biarkan kosong lalu Enter โ ditolak. Isi
Budiโ diterima.
๐ Mengapa “1 janu 2025” ditolak tapi “1/1/2000” diterima?
๐ฏ Penutup: Filosofi 5R yang Utuh
Data Pipeline 5R kini lengkap:
- Resik: bersihkan spasi, duplikat, format berantakan.
- Rapi: ubah jadi Table (Ctrl+T) agar dinamis.
- Namai: beri nama range agar rumus terbaca.
- Analisis: gunakan IF, XLOOKUP, Pivot Table.
- Rawat: jaga pintu masuk dengan Data Validation, kunci sheet dengan Protect.
Dengan filosofi ini, spreadsheet Anda bukan lagi “kanvas lukis” yang harus digambar ulang setiap bulan โ ia adalah mesin analisis yang bekerja sendiri, yang memperbarui dirinya saat data baru datang, yang kebal terhadap kekacauan.
Itulah wujud nyata Rajin โ bukan rajin membersihkan, tapi rajin mencegah agar tidak perlu dibersihkan.