Apa yang Abbas Akan Pelajari

Spreadsheet adalah alat yang dipakai analis data di hampir setiap organisasi, termasuk sekolah, kantin, dan kantor pemerintah. Bulan ini Abbas belajar menggunakan Google Sheets secara serius, bukan hanya untuk mengetik data, tapi untuk menganalisis, membersihkan, dan merangkum data secara efisien.

Materi bulan ini adalah jembatan antara konsep statistik yang dipelajari di Bulan 2 dengan kemampuan teknis Python dan SQL yang akan datang. Banyak pekerjaan analis data nyata dimulai dari spreadsheet, jadi menguasai ini adalah investasi langsung ke karier.

Kenapa Spreadsheet dulu sebelum Python lanjut?

Google Sheets memaksa Abbas berpikir dalam bentuk baris dan kolom, referensi sel, dan transformasi data secara visual. Pola pikir ini langsung berguna saat belajar Pandas di Bulan 5, karena DataFrame di Python bekerja dengan logika yang sangat mirip.

Kompetensi yang Akan Abbas Kuasai

  • Menavigasi Google Sheets dengan cepat: shortcut keyboard, freeze panes, named ranges, dan filter tampilan
  • Menggunakan formula dasar analisis data: SUM, AVERAGE, COUNT, COUNTA, MIN, MAX, dan variasinya
  • Menulis formula kondisional: COUNTIF, SUMIF, AVERAGEIF, dan versi jamak COUNTIFS/SUMIFS
  • Menggunakan VLOOKUP dan INDEX-MATCH untuk menggabungkan data dari dua tabel berbeda
  • Membersihkan data kotor: menghapus duplikat, memperbaiki format teks, mengisi nilai kosong dengan benar
  • Membuat dan menginterpretasi Pivot Table untuk merangkum data besar tanpa formula manual
  • Memvalidasi data dengan Data Validation dan mengidentifikasi outlier secara visual via Conditional Formatting
  • Mengekspor data bersih dari Sheets ke format CSV yang siap dipakai di Python atau SQL

Minggu 1: Navigasi dan Formula Dasar Google Sheets

Abbas mulai dari dasar yang benar. Banyak orang pakai spreadsheet bertahun-tahun tapi tidak tahu shortcut dan formula yang bisa menghemat jam kerja. Minggu ini membangun fondasi itu.

Hari 1 Struktur Google Sheets dan Navigasi Cepat

Abbas membuka Google Sheets dan belajar bergerak efisien, bukan hanya klik sana-sini.

  • Membuat spreadsheet baru, mengatur nama sheet, mengunci baris header dengan Freeze
  • Berlatih shortcut: Ctrl+End (sel terakhir berisi data), Ctrl+Shift+End (seleksi ke bawah), Ctrl+G (Go to cell)
  • Memahami perbedaan referensi relatif (A1), absolut ($A$1), dan campuran ($A1 atau A$1)
  • Membuat dataset latihan: 20 baris data nilai ujian dengan kolom nama, kelas, mata pelajaran, nilai, dan tanggal
= Referensi sel di Google Sheets =

Relatif  : =A1        โ†’ bergerak saat dicopy ke baris/kolom lain
Absolut  : =$A$1      โ†’ selalu menunjuk ke A1 walau dicopy ke mana saja
Campuran : =$A1       โ†’ kolom A dikunci, baris ikut bergerak
           =A$1       โ†’ baris 1 dikunci, kolom ikut bergerak

Contoh pakai: menghitung persentase tiap nilai terhadap total
=B2/$B$22   โ†’ B22 adalah sel total, dikunci agar tidak bergeser
Tip Produktivitas: Setelah freeze baris header, coba Ctrl+Shift+L untuk langsung aktifkan filter di semua kolom. Abbas bisa langsung sortir dan saring data tanpa menu.
Hari 2 Formula Agregasi: SUM, AVERAGE, COUNT, MIN, MAX

Formula ini adalah tulang punggung analisis deskriptif di spreadsheet. Abbas mempraktikkannya di dataset nilai yang dibuat kemarin.

  • Menulis SUM, AVERAGE, MIN, MAX untuk kolom nilai, lalu bandingkan hasilnya dengan statistik Bulan 2
  • Membedakan COUNT (hanya angka) vs COUNTA (semua sel tidak kosong) vs COUNTBLANK (sel kosong)
  • Menggunakan MEDIAN dan MODE untuk melengkapi AVERAGE, lalu diskusikan mana yang lebih representatif
  • Membuat baris ringkasan di bawah tabel yang otomatis update saat data bertambah
= Agregasi dasar di rentang nilai (kolom D, baris 2-21) =

Total nilai   : =SUM(D2:D21)
Rata-rata     : =AVERAGE(D2:D21)
Nilai tertinggi : =MAX(D2:D21)
Nilai terendah  : =MIN(D2:D21)
Median          : =MEDIAN(D2:D21)
Jumlah siswa    : =COUNTA(A2:A21)
Jumlah kosong   : =COUNTBLANK(D2:D21)

Catatan: gunakan D:D (seluruh kolom) jika data terus bertambah,
tapi pastikan baris header tidak masuk hitungan.
Latihan: Dari dataset nilai 20 siswa, hitung berapa persen siswa yang mendapat nilai di atas rata-rata. Tulis formulanya tanpa melihat jawaban dulu. Petunjuk: gabungkan COUNTIF dengan hasil AVERAGE di sel lain.
Hari 3 Formula Kondisional: COUNTIF, SUMIF, AVERAGEIF

Ini adalah lompatan besar dari sekedar menghitung semua data menjadi menghitung data yang memenuhi syarat tertentu.

  • Memahami struktur COUNTIF: rentang kondisi, lalu kondisinya apa
  • Menggunakan SUMIF untuk total nilai per kelas atau per mata pelajaran
  • Menggunakan AVERAGEIF untuk rata-rata nilai hanya untuk siswa kelas tertentu
  • Menggabungkan beberapa kondisi dengan COUNTIFS dan SUMIFS (pakai huruf S di akhir)
= Formula kondisional =

Hitung siswa kelas 10A:
=COUNTIF(B2:B21, "10A")

Total nilai mata pelajaran Matematika:
=SUMIF(C2:C21, "Matematika", D2:D21)

Rata-rata nilai kelas 10B:
=AVERAGEIF(B2:B21, "10B", D2:D21)

Hitung siswa kelas 10A yang dapat nilai >= 75:
=COUNTIFS(B2:B21, "10A", D2:D21, ">=75")

Total nilai Matematika untuk kelas 10A saja:
=SUMIFS(D2:D21, C2:C21, "Matematika", B2:B21, "10A")
Refleksi: Abbas sudah bisa menghitung rata-rata nilai per kelas. Sekarang bayangkan sebuah sekolah punya 30 kelas dan 10 mata pelajaran. Apakah formula ini masih cukup efisien? Apa yang kira-kira lebih cocok untuk skala itu?
Hari 4 VLOOKUP dan INDEX-MATCH untuk Menggabungkan Data

Analis data jarang bekerja hanya dengan satu tabel. VLOOKUP dan INDEX-MATCH adalah cara menarik data dari tabel referensi ke tabel utama.

  • Membuat tabel kedua berisi data siswa: nama, kelas, dan informasi tambahan seperti wali kelas atau alamat
  • Menggunakan VLOOKUP untuk menarik nama wali kelas ke tabel nilai berdasarkan nama siswa
  • Memahami kelemahan VLOOKUP: hanya bisa mencari ke kanan, dan rapuh jika kolom disisipkan
  • Menulis ulang dengan INDEX-MATCH yang lebih fleksibel dan tidak bergantung posisi kolom
= VLOOKUP vs INDEX-MATCH =

Struktur VLOOKUP:
=VLOOKUP(nilai_cari, tabel_referensi, nomor_kolom_hasil, 0)

Contoh: cari wali kelas berdasarkan nama siswa
=VLOOKUP(A2, 'Data Siswa'!A:C, 3, 0)
โ†’ cari A2 di kolom A sheet "Data Siswa", ambil kolom ke-3

Kelemahan: jika kolom disisipkan, nomor kolom bergeser, formula salah.

INDEX-MATCH (lebih aman):
=INDEX(kolom_hasil, MATCH(nilai_cari, kolom_kunci, 0))

Contoh yang sama:
=INDEX('Data Siswa'!C:C, MATCH(A2, 'Data Siswa'!A:A, 0))
โ†’ tidak bergantung nomor kolom, aman walau tabel berubah struktur
Latihan: Buat tabel ketiga berisi daftar mata pelajaran dan nilai KKM-nya. Gunakan INDEX-MATCH untuk menampilkan KKM di sebelah nilai setiap siswa. Lalu tambahkan kolom "Lulus/Tidak" yang otomatis bandingkan nilai dengan KKM.
Hari 5 Pivot Table: Rangkum Data Besar Tanpa Formula Manual

Pivot Table adalah fitur terkuat di spreadsheet untuk analisis cepat. Abbas belajar membuatnya dari nol dan menginterpretasi hasilnya.

  • Menyiapkan data yang bersih sebagai sumber Pivot: header jelas, tidak ada baris kosong di tengah
  • Membuat Pivot Table melalui menu Insert, atur Rows ke kelas, Columns ke mata pelajaran, Values ke rata-rata nilai
  • Mengubah fungsi agregasi di Values antara SUM, AVERAGE, dan COUNT untuk melihat perspektif berbeda
  • Menambahkan filter Pivot untuk melihat hanya kelas tertentu atau semester tertentu
= Cara membuat Pivot Table di Google Sheets =

1. Klik sel mana saja di dalam data
2. Menu: Insert โ†’ Pivot Table
3. Pilih rentang data (biasanya otomatis terdeteksi)
4. Pilih: "New sheet" agar tidak merusak data asli

Konfigurasi panel Pivot Table Editor:
- Rows    : Kelas           โ†’ daftar kelas sebagai baris
- Columns : Mata Pelajaran  โ†’ tiap mapel jadi kolom
- Values  : Nilai           โ†’ pilih "Average" bukan "SUM"
- Filter  : (opsional) Semester, Tahun Ajaran

Hasilnya: tabel silang rata-rata nilai per kelas per mapel,
diperbarui otomatis saat data asli berubah.
Refleksi: Pivot Table yang Abbas buat barusan menggantikan berapa banyak formula AVERAGEIF yang harus ditulis secara manual? Apa implikasinya untuk pekerjaan seorang analis data yang bekerja di sekolah besar?

Minggu 2: Data Cleaning di Google Sheets

Data nyata selalu kotor. Ada nama yang salah ketik, angka yang diisi sebagai teks, duplikat tersembunyi, dan sel kosong di tempat yang tidak terduga. Minggu ini Abbas belajar mendeteksi dan memperbaiki semua itu.

Hari 1 Mendeteksi dan Menghapus Duplikat

Duplikat adalah musuh analisis yang sering tidak terlihat. Satu baris data yang masuk dua kali bisa menggelembungkan total penjualan atau jumlah siswa.

  • Menggunakan menu Data โ†’ Data Cleanup โ†’ Remove Duplicates untuk duplikat sederhana
  • Menulis formula COUNTIF untuk menandai baris yang memiliki nilai duplikat sebelum dihapus
  • Menggunakan Conditional Formatting berbasis formula untuk mewarnai baris duplikat secara visual
  • Memahami kapan menghapus duplikat tidak tepat: misalnya satu siswa bisa punya dua nilai untuk ujian susulan
= Deteksi duplikat dengan formula =

Tandai baris yang nilainya muncul lebih dari sekali di kolom A:
=COUNTIF($A$2:$A$21, A2) > 1
โ†’ hasilnya TRUE jika A2 adalah duplikat

Pakai formula ini di Conditional Formatting:
1. Pilih seluruh tabel (A2:E21)
2. Format โ†’ Conditional formatting
3. Pilih "Custom formula is"
4. Masukkan: =COUNTIF($A$2:$A$21,$A2)>1
5. Pilih warna highlight merah

Sekarang semua baris duplikat langsung terlihat sebelum Abbas memutuskan mana yang dihapus.
Konsep Penting: Duplikat Fungsional vs Duplikat Identik

Duplikat identik: semua kolom persis sama, hampir pasti error input. Duplikat fungsional: nama siswa sama tapi nilai berbeda karena ujian susulan, ini bukan error. Pastikan Abbas selalu tanya: "duplikat ini bermakna atau memang salah input?"

Hari 2 Membersihkan Data Teks: TRIM, UPPER, LOWER, PROPER, SUBSTITUTE

Teks yang tidak konsisten adalah sumber error yang paling sering di spreadsheet. "kelas 10A", "Kelas 10A", dan "KELAS 10A" dianggap berbeda oleh formula, tapi sama di mata manusia.

  • Menggunakan TRIM untuk menghapus spasi ekstra di awal, akhir, dan tengah teks
  • Menggunakan PROPER untuk mengubah nama menjadi format Huruf Besar Di Tiap Kata
  • Menggunakan SUBSTITUTE untuk mengganti teks tertentu, misalnya mengganti "kls" menjadi "Kelas"
  • Menggabungkan beberapa fungsi dalam satu formula untuk membersihkan teks sekaligus
= Fungsi pembersih teks =

Hapus spasi berlebih:
=TRIM("  Ahmad  Fauzi  ")     โ†’ "Ahmad Fauzi"

Ubah ke Title Case:
=PROPER("ahmad fauzi")        โ†’ "Ahmad Fauzi"

Ubah semua ke huruf kecil:
=LOWER("KELAS 10A")           โ†’ "kelas 10a"

Ubah semua ke huruf besar:
=UPPER("kelas 10a")           โ†’ "KELAS 10A"

Ganti teks tertentu:
=SUBSTITUTE("kls 10A","kls","Kelas")  โ†’ "Kelas 10A"

Gabungan: bersihkan nama yang kotor
=PROPER(TRIM(A2))
โ†’ hapus spasi ekstra, lalu jadikan Title Case
Latihan: Buat kolom baru di sebelah kanan kolom nama yang berisi nama sudah dibersihkan. Gunakan PROPER(TRIM()) untuk semua baris. Setelah puas dengan hasilnya, copy kolom baru, paste sebagai "Values only" ke kolom nama asli, lalu hapus kolom helper. Ini adalah alur data cleaning yang nyata.
Hari 3 Menangani Nilai Kosong dan Format Angka yang Salah

Nilai kosong (blank) dan angka yang tersimpan sebagai teks adalah dua jenis masalah yang berbeda tapi sama-sama membuat formula agregasi memberikan hasil yang salah.

  • Menggunakan ISBLANK dan IF untuk mendeteksi dan mengisi nilai kosong dengan nilai default yang masuk akal
  • Menggunakan IFERROR untuk menangani formula yang menghasilkan error karena data tidak lengkap
  • Mengidentifikasi angka tersimpan sebagai teks: tanda segitiga hijau di pojok kiri atas sel
  • Mengubah teks ke angka dengan VALUE() atau dengan trik multiply-by-1 di kolom helper
= Menangani nilai kosong dan teks-sebagai-angka =

Cek apakah sel kosong:
=ISBLANK(D2)      โ†’ TRUE jika D2 kosong

Isi nilai kosong dengan rata-rata kolom:
=IF(ISBLANK(D2), AVERAGE($D$2:$D$21), D2)

Hindari error di VLOOKUP:
=IFERROR(VLOOKUP(A2, 'Referensi'!A:C, 3, 0), "Tidak ditemukan")

Ubah teks "75" menjadi angka 75:
=VALUE(D2)
atau pakai trik: =D2*1

Cek apakah sel berisi angka atau teks:
=ISNUMBER(D2)    โ†’ TRUE jika angka sungguhan
=ISTEXT(D2)      โ†’ TRUE jika teks (termasuk angka bertipe teks)
Tip: Paste Special untuk Konversi Massal

Jika ada 200 baris angka tersimpan sebagai teks, jangan pakai VALUE() satu per satu. Ketik angka 1 di sel kosong, Copy, pilih semua sel bermasalah, lalu Paste Special โ†’ Multiply. Semua teks angka akan dikonversi sekaligus.

Hari 4 Data Validation dan Conditional Formatting untuk Kontrol Kualitas

Lebih baik mencegah data kotor masuk dari awal daripada membersihkannya nanti. Data Validation adalah cara memasang penjaga di pintu input data.

  • Mengatur Data Validation di kolom nilai: hanya izinkan angka antara 0 dan 100
  • Mengatur Data Validation di kolom kelas: hanya izinkan nilai dari dropdown list kelas yang sudah ditentukan
  • Membuat Conditional Formatting untuk mewarnai nilai di bawah KKM dengan merah dan di atas 90 dengan hijau
  • Menggunakan Color Scale di Conditional Formatting untuk visualisasi distribusi nilai secara cepat
= Data Validation: batasi input di kolom nilai =

1. Pilih kolom D (nilai)
2. Menu: Data โ†’ Data Validation
3. Kriteria: "Number" โ†’ "is between" โ†’ 0 dan 100
4. On invalid data: "Show warning" (lebih ramah) atau "Reject input" (lebih ketat)
5. Centang "Show validation help text" lalu tulis: "Masukkan nilai antara 0-100"

= Data Validation: dropdown kelas =

1. Pilih kolom B (kelas)
2. Criteria: "Dropdown (from a range)" โ†’ pilih sel yang berisi daftar kelas
   atau "Dropdown" โ†’ ketik manual: 10A,10B,10C,11A,11B
3. On invalid data: "Reject input"

= Conditional Formatting: nilai di bawah KKM =

1. Pilih D2:D21
2. Format โ†’ Conditional formatting
3. Format cells if: "Less than" โ†’ 75
4. Pilih warna latar merah muda
Refleksi: Abbas baru saja memasang "penjaga" yang mencegah data salah masuk ke spreadsheet. Sekarang bayangkan aplikasi input nilai sekolah yang sesungguhnya. Validasi apa saja yang perlu dipasang agar data yang masuk selalu bersih dan konsisten?
Hari 5 Ekspor Data Bersih ke CSV dan Koneksi ke Proyek P2

Data yang sudah bersih di Sheets perlu bisa dipakai di alat lain. Hari ini Abbas menyiapkan pipeline sederhana dari Sheets ke CSV yang siap dianalisis di Python.

  • Meninjau kembali seluruh sheet, pastikan tidak ada duplikat, tidak ada sel kosong yang tidak disengaja, dan semua teks konsisten
  • Mengekspor sheet aktif ke format CSV melalui File โ†’ Download โ†’ CSV
  • Membuka CSV di editor teks untuk verifikasi: cek apakah koma sebagai pemisah, apakah header ada di baris pertama
  • Menghubungkan latihan ini ke Proyek P2 (Penjualan Kantin): Abbas mulai mengumpulkan atau membuat data penjualan fiktif yang akan dianalisis minggu depan
= Cek kualitas data sebelum ekspor =

Checklist akhir sebelum export ke CSV:

[ ] Tidak ada baris header ganda
[ ] Tidak ada baris kosong di tengah data
[ ] Kolom angka tidak ada yang bertipe teks (cek dengan ISNUMBER)
[ ] Tidak ada spasi tersembunyi di kolom teks kunci (cek dengan LEN vs TRIM)
[ ] Nama kolom tidak mengandung karakter khusus atau spasi ganda

Cek panjang teks setelah TRIM vs sebelum:
=LEN(A2) - LEN(TRIM(A2))
โ†’ jika hasilnya > 0, ada spasi tersembunyi

Cara ekspor:
File โ†’ Download โ†’ Comma Separated Values (.csv)
File tersimpan di folder Downloads, siap dibuka dengan Python atau tools lain.
Latihan Integrasi: Buat spreadsheet baru untuk Proyek P2. Isi 30 baris data penjualan kantin fiktif dengan kolom: tanggal, nama item, kategori, jumlah terjual, harga satuan, dan total. Pasang Data Validation di kolom kategori (Makanan/Minuman/Snack) dan di kolom harga (hanya angka positif). Ekspor ke CSV. Simpan file ini karena akan dipakai lagi di Minggu 3.
Minggu 3

Pivot Table dan Chart

Abbas mulai memahami cara meringkas data besar dengan Pivot Table dan menyajikannya secara visual dengan Chart di Google Sheets.

Hari 1

Mengenal Pivot Table

Pivot Table adalah alat yang meringkas data besar menjadi tabel yang mudah dibaca. Abbas belajar membuat Pivot Table pertamanya dari data transaksi sederhana.

  • Siapkan data mentah: kolom Tanggal, Produk, Kategori, Jumlah, Harga
  • Buka Insert > Pivot Table, pilih range data
  • Tambahkan Rows: Kategori, Values: SUM(Jumlah)
  • Amati bagaimana data diringkas otomatis
-- Contoh data yang disiapkan di Sheet1:
Tanggal     | Produk   | Kategori | Jumlah | Harga
2024-01-01  | Pensil   | ATK      | 10     | 2000
2024-01-01  | Buku     | ATK      | 5      | 15000
2024-01-02  | Meja     | Furnitur | 2      | 500000

-- Pivot Table hasilnya:
Kategori  | SUM of Jumlah
ATK       | 15
Furnitur  | 2
Challenge: Buat Pivot Table yang menampilkan total Harga per Kategori. Tambahkan filter agar hanya menampilkan transaksi bulan Januari.
Hari 2

Pivot Table Multi-Dimensi

Abbas belajar menambahkan beberapa dimensi ke Pivot Table: Rows, Columns, dan Values sekaligus untuk melihat perbandingan antar kategori dan waktu.

  • Tambahkan Columns: Bulan ke Pivot Table yang ada
  • Atur Values: SUM(Harga) dan AVG(Jumlah) sekaligus
  • Gunakan fitur Sort untuk mengurutkan nilai terbesar
  • Coba opsi Show Totals untuk baris dan kolom
-- Pivot Table 2 dimensi:
Kategori  | Jan       | Feb       | Total
ATK       | 150,000   | 200,000   | 350,000
Furnitur  | 1,000,000 | 500,000   | 1,500,000

-- Formula bantu untuk ekstrak bulan:
=TEXT(A2,"MMMM")
-- atau
=MONTH(A2)
Challenge: Buat Pivot Table yang membandingkan total penjualan per Produk di setiap bulan. Urutkan dari produk dengan penjualan tertinggi.
Hari 3

Membuat Chart dari Data

Abbas membuat visualisasi pertamanya: Bar Chart, Line Chart, dan Pie Chart langsung dari data Pivot Table dan data mentah di Google Sheets.

  • Pilih range data yang sudah diringkas
  • Insert > Chart, pilih tipe: Bar Chart untuk perbandingan
  • Atur Chart title, label sumbu X dan Y
  • Buat Line Chart untuk tren data time-series
  • Buat Pie Chart untuk proporsi per kategori
-- Kapan pakai chart apa:
Bar/Column Chart  --> Perbandingan antar kategori
Line Chart        --> Tren waktu (naik/turun)
Pie/Donut Chart   --> Proporsi dari keseluruhan
Scatter Plot      --> Hubungan 2 variabel numerik
Area Chart        --> Tren + volume kumulatif

-- Tip: pilih data dulu, baru Insert Chart
-- Sheets akan otomatis menyarankan tipe chart
Challenge: Buat 3 chart berbeda dari data yang sama: (1) Bar chart total per kategori, (2) Line chart tren harian, (3) Pie chart proporsi produk. Beri judul yang informatif.
Hari 4

Kustomisasi Chart

Chart yang informatif bukan hanya soal data, tapi juga tampilan. Abbas belajar mengatur warna, label data, gridlines, dan legenda agar chart mudah dipahami pembaca.

  • Klik chart, masuk ke Chart Editor > Customize
  • Ubah warna series agar konsisten dengan tema
  • Aktifkan Data Labels agar nilai terlihat langsung di chart
  • Atur font size dan style untuk judul dan label
  • Hilangkan gridlines yang tidak perlu
-- Prinsip desain chart yang baik:
1. Judul jelas: "Total Penjualan per Kategori - Jan 2024"
2. Label sumbu: selalu ada satuan (Rp, unit, %)
3. Warna: maksimal 5-6 warna, konsisten
4. Data labels: aktifkan jika nilai penting
5. Legenda: taruh di atas atau kanan, bukan bawah
6. Hindari 3D chart: menyesatkan persepsi ukuran
Challenge: Ambil chart Bar yang dibuat kemarin. Kustomisasi: warna merah untuk kategori tertinggi, aktifkan data labels, tambahkan catatan sumber data di bawah chart.
Hari 5

Dashboard Mini dengan Pivot + Chart

Abbas menggabungkan semua skill minggu ini: membuat sheet dashboard yang menampilkan ringkasan data dari Pivot Table dan beberapa chart sekaligus dalam satu tampilan.

  • Buat sheet baru bernama "Dashboard"
  • Susun 2-3 chart dari Pivot Table di sheet terpisah
  • Tambahkan KPI angka besar dengan formula seperti SUM, MAX, COUNTIF
  • Rapikan layout agar mudah dibaca dalam satu layar
  • Uji: ubah data di sheet sumber, pastikan dashboard ikut update
-- Formula KPI summary di Dashboard:
Total Transaksi: =COUNTA(Data!A2:A)
Total Penjualan: =SUM(Data!E2:E)
Transaksi Hari Ini: =COUNTIF(Data!A2:A,TODAY())
Produk Terlaris: =INDEX(Data!B2:B,MATCH(MAX(Data!D2:D),Data!D2:D,0))

-- Cara referensi antar sheet:
=NamaSheet!A1
=SUM(DataPenjualan!B2:B100)
Challenge: Buat dashboard 1 halaman dengan 4 KPI (total transaksi, total nilai, rata-rata per transaksi, produk terlaris) dan 2 chart. Share link ke mentor untuk review.
Minggu 4

Advanced Sheets dan Mini Project

Abbas memperdalam kemampuan Google Sheets dengan formula tingkat lanjut, validasi data, conditional formatting, dan mengakhiri bulan dengan mini project analisis nyata.

Hari 1

VLOOKUP dan HLOOKUP

Abbas belajar menggabungkan data dari dua tabel berbeda menggunakan VLOOKUP dan HLOOKUP, skill paling dibutuhkan analis data di dunia kerja nyata.

  • Pahami struktur VLOOKUP: nilai cari, tabel referensi, kolom hasil, exact match
  • Buat tabel Master Produk dan tabel Transaksi terpisah
  • Gunakan VLOOKUP untuk mengambil nama produk dari ID
  • Coba IFERROR + VLOOKUP untuk menangani data tidak ditemukan
-- Struktur VLOOKUP:
=VLOOKUP(nilai_cari, range_tabel, nomor_kolom, [FALSE])

-- Contoh: ambil nama produk berdasarkan ID
=VLOOKUP(A2, MasterProduk!A:C, 2, FALSE)

-- Gabung dengan IFERROR agar tidak error #N/A:
=IFERROR(VLOOKUP(A2, MasterProduk!A:C, 2, FALSE), "Produk tidak ditemukan")

-- INDEX + MATCH (lebih fleksibel dari VLOOKUP):
=INDEX(MasterProduk!B:B, MATCH(A2, MasterProduk!A:A, 0))
Challenge: Buat tabel transaksi dengan 20 baris dan tabel master produk terpisah. Gunakan VLOOKUP untuk mengisi kolom Nama Produk dan Harga Satuan dari ID produk.
Hari 2

Conditional Formatting dan Validasi Data

Abbas belajar membuat spreadsheet yang interaktif dan bebas error: Conditional Formatting untuk highlight otomatis, dan Data Validation untuk membatasi input yang boleh dimasukkan.

  • Format > Conditional Formatting: warna merah jika nilai di bawah target
  • Buat color scale untuk membandingkan performa kolom angka
  • Data > Data Validation: buat dropdown list untuk kolom Status
  • Tambahkan pesan error kustom jika input tidak valid
-- Conditional Formatting custom formula:
-- Highlight baris jika nilai D < 50:
=$D2 < 50  --> warna merah

-- Highlight duplikat di kolom A:
=COUNTIF($A:$A, A1) > 1  --> warna kuning

-- Data Validation (dropdown):
Pilih range > Data > Data Validation
Criteria: List of items
Isi: "Pending,Proses,Selesai,Batal"

-- Validasi angka positif saja:
Criteria: Number > Greater than > 0
Challenge: Di tabel transaksi, buat: (1) Conditional formatting merah jika jumlah di bawah 5 unit, (2) Dropdown validasi untuk kolom Status dengan 4 pilihan, (3) Color scale untuk kolom Total Harga.
Hari 3

Array Formula dan QUERY

Abbas naik level dengan Array Formula dan fungsi QUERY yang memungkinkan filtering dan agregasi data seperti SQL langsung di Sheets tanpa Pivot Table.

  • Pahami Array Formula: satu formula menghasilkan banyak nilai
  • Gunakan ARRAYFORMULA untuk menghitung seluruh kolom sekaligus
  • Belajar QUERY dengan SELECT, WHERE, ORDER BY, GROUP BY
  • Bandingkan hasil QUERY dengan Pivot Table untuk kasus yang sama
-- Array Formula: kalikan 2 kolom sekaligus
=ARRAYFORMULA(B2:B100 * C2:C100)

-- QUERY syntax dasar:
=QUERY(data_range, "query_string", [header_baris])

-- Contoh QUERY:
=QUERY(A1:E100, "SELECT B, SUM(D) WHERE C = 'ATK' GROUP BY B ORDER BY SUM(D) DESC", 1)

-- QUERY dengan filter tanggal:
=QUERY(A1:E100, "SELECT A,B,D WHERE A >= date '2024-01-01' AND A <= date '2024-01-31'", 1)

-- Hitung jumlah per kategori:
=QUERY(A1:E100, "SELECT C, COUNT(A) GROUP BY C LABEL COUNT(A) 'Total'", 1)
Challenge: Gunakan QUERY untuk membuat: (1) Daftar transaksi bulan ini saja, (2) Total penjualan per kategori diurutkan terbesar, (3) Produk dengan jumlah terjual di atas rata-rata.
Hari 4

Membersihkan Data Kotor

Data nyata selalu kotor: ada spasi tersembunyi, huruf besar-kecil tidak konsisten, duplikat, dan nilai kosong. Abbas belajar teknik cleaning data langsung di Sheets.

  • TRIM untuk menghapus spasi berlebih di awal/akhir/tengah teks
  • LOWER, UPPER, PROPER untuk standarisasi kapitalisasi
  • SUBSTITUTE untuk mengganti karakter tertentu
  • UNIQUE dan COUNTIF untuk deteksi dan hapus duplikat
  • ISBLANK dan IF untuk menangani nilai kosong
-- Bersihkan spasi berlebih:
=TRIM(A2)

-- Standarisasi nama: huruf kapital di awal kata:
=PROPER(TRIM(A2))

-- Ganti karakter (misal titik jadi koma):
=SUBSTITUTE(A2, ".", ",")

-- Deteksi duplikat:
=COUNTIF($A:$A, A2) > 1  --> TRUE = duplikat

-- Hapus nilai kosong dari list:
=FILTER(A2:A100, A2:A100 <> "")

-- Isi nilai kosong dengan nilai sebelumnya:
=IF(A2="", A1, A2)
Challenge: Download dataset nama produk yang sengaja dibuat kotor (spasi tidak konsisten, caps tidak rata, ada duplikat). Buat kolom baru dengan data bersih menggunakan kombinasi TRIM + PROPER + SUBSTITUTE.
Hari 5

Mini Project: Laporan Penjualan Bulanan

Abbas mengerjakan mini project yang mensimulasikan pekerjaan analis data nyata: membersihkan data, menganalisis dengan Pivot Table dan QUERY, lalu menyajikan hasil dalam dashboard dan laporan ringkas.

  • Dataset: 100 baris data penjualan toko online selama 3 bulan
  • Tahap 1 Cleaning: hapus duplikat, standarisasi nama, tangani nilai kosong
  • Tahap 2 Analisis: Pivot Table per kategori, QUERY tren bulanan, top 5 produk
  • Tahap 3 Visualisasi: 3 chart utama (tren, komposisi, perbandingan)
  • Tahap 4 Dashboard: susun KPI + chart di sheet terpisah
  • Tahap 5 Presentasi: tuliskan 3 insight utama dalam kalimat singkat
-- Struktur file mini project:
Sheet "Raw Data"    --> Data asli, jangan diubah
Sheet "Clean Data"  --> Hasil cleaning dengan formula
Sheet "Analisis"    --> Pivot Table dan QUERY
Sheet "Dashboard"   --> KPI, chart, insight
Sheet "Catatan"     --> Dokumentasi asumsi dan langkah

-- Contoh insight yang diharapkan:
"Kategori Elektronik menyumbang 45% total penjualan,
 namun volumenya turun 12% di bulan Maret dibanding Februari."

"Produk X adalah produk terlaris dengan 234 unit terjual,
 dengan rata-rata nilai transaksi Rp 187.000 per order."
Mini Project Summary: Kumpulkan file Sheets mini project. Tulis 1 paragraf (maks 100 kata) yang menjelaskan: dataset yang dipakai, proses yang dilakukan, dan 2 temuan terpenting. Ini adalah latihan menulis insight seperti analis data profesional.

Buku Pendukung Bulan 03

Referensi bacaan yang memperkuat pemahaman Abbas tentang spreadsheet, visualisasi data, dan fondasi analisis data.

S

Storytelling with Data

Cole Nussbaumer Knaflic

Buku wajib untuk memahami cara membuat chart yang benar-benar komunikatif. Abbas belajar prinsip chart type selection, label data, dan menghilangkan elemen yang mengganggu persepsi pembaca. Langsung berlaku saat membuat chart di Minggu 3.

D

Data Smart: Using Data Science to Transform Information into Insight

John W. Foreman

Seluruh buku ini menggunakan Excel/Spreadsheet sebagai medium analisis data, termasuk teknik clustering dan forecasting tanpa coding. Cocok untuk Abbas yang sedang membangun intuisi data lewat Sheets sebelum pindah ke Python.

E

Excel 2019 Bible

Michael Alexander, Richard Kusleika

Meskipun judulnya Excel, konsep Pivot Table, VLOOKUP, dan formula array di buku ini 95% berlaku juga di Google Sheets. Abbas bisa gunakan sebagai referensi teknis saat stuck di formula Advanced Sheets Minggu 4.

H

How Charts Lie: Getting Smarter About Visual Information

Alberto Cairo

Abbas belajar bukan hanya cara membuat chart yang baik, tapi juga cara membaca chart yang menyesatkan. Penting untuk membangun nalisis kritis terhadap visualisasi data yang sering disalahgunakan di media dan laporan bisnis.

Tools yang Digunakan

Semua tools di Bulan 3 berbasis browser dan gratis, tidak perlu instalasi. Fokus pada penguasaan Sheets secara mendalam sebelum pindah ke tools lain.

S

Google Sheets

Platform utama Bulan 3. Abbas menggunakan Sheets untuk Pivot Table, chart, formula advanced (VLOOKUP, QUERY, ARRAYFORMULA), validasi data, dan conditional formatting.

F

Google Forms

Dipakai untuk membuat form input data yang terhubung langsung ke Google Sheets. Abbas berlatih membuat sistem pengumpulan data sederhana yang datanya bisa langsung dianalisis.

L

Looker Studio (Data Studio)

Tool visualisasi gratis dari Google yang terhubung langsung ke Sheets. Abbas membuat dashboard interaktif pertamanya sebagai pelengkap dashboard manual di Sheets.

K

Kaggle Datasets

Sumber dataset publik untuk mini project. Abbas mengunduh dataset CSV nyata (penjualan, e-commerce, atau demografi) untuk dipraktikkan langsung di Sheets tanpa perlu membuat data fiktif.

C

ChatGPT / Claude

Dipakai sebagai asisten debugging formula. Saat Abbas stuck dengan syntax QUERY atau ARRAYFORMULA yang tidak bekerja, AI membantu menjelaskan error dan menyarankan pendekatan alternatif.

N

Notion / Google Docs

Dipakai untuk mendokumentasikan proses analisis dan menulis insight mini project. Abbas membiasakan diri menulis penjelasan di samping angka, bukan hanya menyajikan data mentah.

Tips Praktis dan Jebakan Pemula

Setelah Abbas menguasai formula dasar, Pivot Table, dan QUERY, bagian ini mengumpulkan tips dari analis data yang sering diabaikan pemula dan jebakan yang membuat formula tiba-tiba salah tanpa alasan yang jelas.

Tip 1: Named Range agar Formula Tidak Misterius

Formula panjang seperti =SUMIF($C$2:$C$500,"Matematika",$D$2:$D$500) sulit dimengerti setelah seminggu tidak dibuka. Named Range mengubah koordinat sel menjadi nama yang bermakna.

Cara membuat Named Range:
1. Pilih rentang: C2:C500
2. Menu: Data > Named ranges
3. Beri nama: KolomMataPelajaran
4. Simpan

Formula menjadi:
=SUMIF(KolomMataPelajaran, "Matematika", KolomNilai)

Jauh lebih mudah dibaca dan diaudit oleh orang lain.
Nama range tidak berubah walau baris disisip atau dihapus.
Tip 2: IMPORTRANGE untuk Tarik Data dari Spreadsheet Lain

Jika data nilai ada di spreadsheet yang berbeda (misalnya setiap guru punya file sendiri), IMPORTRANGE bisa menarik data itu ke satu file terpusat tanpa copy-paste manual setiap hari.

Sintaks IMPORTRANGE:
=IMPORTRANGE("url_spreadsheet", "NamaSheet!A1:E100")

Contoh nyata: tarik data nilai dari file Bu Sari ke file rekap:
=IMPORTRANGE(
  "https://docs.google.com/spreadsheets/d/ID_FILE_BU_SARI",
  "Nilai Harian!A2:E200"
)

Catatan penting:
- Pertama kali dipakai, klik "Allow access" di prompt yang muncul
- Jika file sumber diupdate, data di file rekap ikut update otomatis
- IMPORTRANGE hanya bisa membaca, tidak bisa menulis ke file sumber
- Untuk gabungkan beberapa sumber sekaligus, bungkus dengan kurung kurawal:

=QUERY(
  {IMPORTRANGE("URL_GURU_A","Sheet1!A2:F200");
   IMPORTRANGE("URL_GURU_B","Sheet1!A2:F200")},
  "SELECT * WHERE Col1 IS NOT NULL",
  0
)
Jebakan 1: VLOOKUP Gagal karena Spasi Tersembunyi

Abbas menulis VLOOKUP dengan benar tapi hasilnya #N/A. Penyebab paling umum: nilai yang dicari punya spasi tersembunyi di awal atau akhir, sehingga tidak cocok dengan data di tabel referensi.

Cara deteksi spasi tersembunyi:
=LEN(A2) hasilnya berbeda dari =LEN(TRIM(A2))
Jika LEN(A2) lebih besar, ada spasi ekstra di dalam sel.

Solusi: bungkus nilai cari dengan TRIM
=VLOOKUP(TRIM(A2), MasterProduk!A:C, 2, FALSE)

Solusi lebih kuat: bersihkan seluruh kolom kunci dengan ARRAYFORMULA
=ARRAYFORMULA(TRIM(MasterProduk!A2:A100))
Taruh di kolom helper, lalu gunakan kolom helper itu sebagai sumber VLOOKUP.
Jebakan 2: Angka Tersimpan sebagai Teks

SUM menghasilkan 0 padahal kolom terlihat berisi angka. Ini hampir selalu berarti angkanya tersimpan sebagai teks. Tandanya: ada segitiga hijau kecil di pojok kiri atas sel, dan angka rata kiri bukan rata kanan.

Cara deteksi:
=ISNUMBER(D2)    hasilnya FALSE jika angka tersimpan sebagai teks
=ISTEXT(D2)      hasilnya TRUE untuk konfirmasi

Cara perbaiki satu sel:
=VALUE(D2)       mengkonversi teks "75" menjadi angka 75

Cara perbaiki massal tanpa helper column:
1. Ketik angka 1 di sel kosong mana saja
2. Copy sel tersebut (Ctrl+C)
3. Pilih seluruh kolom yang bermasalah
4. Paste Special (Ctrl+Shift+V) > pilih "Multiply"
5. Semua teks angka sekarang jadi angka sungguhan
6. Hapus sel angka 1 yang tadi diketik
Tip 3: QUERY Lebih Fleksibel dari Kombinasi SUMIFS untuk Kasus Kompleks

Ketika Abbas butuh filter tiga kondisi sekaligus plus mengurutkan hasilnya plus menghitung agregasi, QUERY jauh lebih ringkas. SUMIFS tidak bisa ORDER BY dan tidak bisa menghasilkan tabel multi-kolom.

Pertanyaan: "Rata-rata Nilai Akhir per kelas, untuk Matematika saja,
             hanya siswa yang lulus (nilai >= 70), diurutkan dari tertinggi"

Dengan SUMIFS: tidak bisa langsung. Butuh AVERAGEIFS per kelas secara manual.

Dengan QUERY (satu formula):
=QUERY(DataNilai!A1:F200,
  "SELECT B, AVG(F), COUNT(A)
   WHERE C = 'Matematika' AND F >= 70
   GROUP BY B
   ORDER BY AVG(F) DESC
   LABEL B 'Kelas', AVG(F) 'Rata-rata', COUNT(A) 'Jumlah Lulus'",
  1)

QUERY dengan filter tanggal (format khusus):
=QUERY(DataNilai!A1:F200,
  "SELECT A, B, D, F
   WHERE A >= date '2024-01-15' AND A <= date '2024-02-15'
   ORDER BY A ASC",
  1)
Tip 4: Debug Formula secara Bertahap dari Dalam ke Luar

Ketika formula kompleks memberikan hasil yang salah, jangan langsung hapus. Evaluasi lapisan per lapisan, dari fungsi paling dalam ke luar.

Formula yang error (contoh):
=SUMIF(TRIM(C2:C200), "Matematika", VALUE(D2:D200))

Langkah debug yang benar:
1. Tes TRIM dulu di kolom bantu sementara: =TRIM(C2)
   Apakah hasilnya "Matematika" persis? Cek spasi dan kapital.

2. Tes VALUE dulu: =VALUE(D2)
   Apakah hasilnya angka? Jika error, D2 bukan teks angka.

3. Tes SUMIF tanpa wrapper:
   =SUMIF(C2:C200, "Matematika", D2:D200)
   Jika ini benar, tambahkan TRIM dan VALUE satu per satu.

4. Pakai sheet baru sebagai sandbox debug,
   jangan langsung di atas data produksi yang sedang dipakai.
Tip 5: Apps Script untuk Otomasi Tugas yang Berulang Setiap Minggu

Jika Abbas melakukan langkah yang sama setiap minggu (copy data, bersihkan, format ulang, kirim email), Apps Script bisa mengotomasi semua itu. Tidak perlu jago coding untuk memulai.

Cara membuka Apps Script:
Menu Extensions > Apps Script

Script sederhana: tandai baris yang nilai di bawah KKM (70) dengan warna kuning

function tandaiBawahKKM() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getDataRange();
  var data = dataRange.getValues();

  for (var i = 1; i < data.length; i++) {
    var nilai = data[i][3]; // kolom D, indeks mulai dari 0
    if (nilai < 70 && nilai !== '') {
      sheet.getRange(i + 1, 1, 1, data[0].length)
           .setBackground('#FFF3CD');
    } else {
      sheet.getRange(i + 1, 1, 1, data[0].length)
           .setBackground(null);
    }
  }
  SpreadsheetApp.getUi().alert(
    'Selesai! Baris kuning = nilai di bawah KKM 70.'
  );
}

Jalankan via: Run > Run function.
Buat tombol di sheet: Insert > Drawing > klik kanan > Assign script.
Jebakan 3: Jangan Edit Data Asli Secara Langsung

Alur yang aman: Raw Data (tidak boleh disentuh) > Clean Data (formula dari Raw) > Analisis (Pivot atau QUERY dari Clean). Jika Abbas langsung mengedit di Raw Data, tidak ada cara untuk kembali ke kondisi semula.

Buat kolom helper di sheet terpisah, bukan di samping data asli. Setelah yakin hasilnya benar, baru paste as "Values only" ke tempat yang tepat. Ini adalah prinsip non-destructive workflow yang dipakai semua analis data profesional.

Latihan Tambahan: Tantangan Lebih Jauh

Latihan berikut dirancang lebih menantang dari yang ada di setiap minggu. Abbas bisa mengerjakannya setelah selesai Minggu 4 atau menggunakannya sebagai soal review sebelum masuk Bulan 4 tentang SQL.

Latihan A QUERY Multi-Kondisi: Laporan Nilai Ujian Akhir Semester 4 Kelas

Abbas mendapat file nilai ujian akhir semester dari 4 kelas (10A, 10B, 11A, 11B) dan 5 mata pelajaran, dengan 25 siswa per kelas. Total sekitar 500 baris data. Tugasnya: buat semua laporan ringkasan menggunakan QUERY saja, tanpa Pivot Table.

Struktur sheet "DataNilai":
A: Nama Siswa
B: Kelas           (10A / 10B / 11A / 11B)
C: Mata Pelajaran  (Matematika / IPA / IPS / Bahasa Indonesia / Inggris)
D: Nilai UTS       (0-100)
E: Nilai UAS       (0-100)
F: Nilai Akhir     =ARRAYFORMULA(IF(A2:A="","",D2:D*0.4+E2:E*0.6))

Isi minimal 50 baris dengan data realistis, mix acak antar kelas.

Formula QUERY yang harus Abbas tulis (4 query berbeda):

1. Rata-rata Nilai Akhir per Kelas, diurutkan dari tertinggi:
=QUERY(DataNilai!A1:F200,
  "SELECT B, AVG(F)
   GROUP BY B
   ORDER BY AVG(F) DESC
   LABEL B 'Kelas', AVG(F) 'Rata-rata Nilai Akhir'",
  1)

2. Siswa yang belum lulus (Nilai Akhir < 70) di kelas 10A saja:
=QUERY(DataNilai!A1:F200,
  "SELECT A, C, F
   WHERE B = '10A' AND F < 70
   ORDER BY F ASC
   LABEL A 'Nama', C 'Mata Pelajaran', F 'Nilai Akhir'",
  1)

3. Statistik per Mata Pelajaran (rata-rata, minimum, maksimum):
=QUERY(DataNilai!A1:F200,
  "SELECT C, AVG(F), MIN(F), MAX(F), COUNT(A)
   GROUP BY C
   ORDER BY AVG(F) DESC
   LABEL C 'Mapel', AVG(F) 'Rata-rata',
         MIN(F) 'Terendah', MAX(F) 'Tertinggi', COUNT(A) 'Jumlah Siswa'",
  1)

4. Jumlah siswa per kelas yang Nilai Akhir di atas 80:
=QUERY(DataNilai!A1:F200,
  "SELECT B, COUNT(A)
   WHERE F > 80
   GROUP BY B
   LABEL B 'Kelas', COUNT(A) 'Siswa di atas 80'",
  1)
Verifikasi Hasil: Bandingkan output Query nomor 1 dengan Pivot Table yang dibuat dari data yang sama (Rows: Kelas, Values: AVG Nilai Akhir). Hasilnya harus identik. Jika berbeda, ada kesalahan di salah satu pendekatan.
Latihan B IMPORTRANGE: Konsolidasi Laporan Penjualan dari 3 Kantin

Sekolah punya 3 kantin di gedung berbeda. Setiap kantin punya spreadsheet sendiri dengan format kolom yang sama. Abbas bertugas membuat file rekap terpusat yang otomatis menarik data dari ketiganya tanpa copy-paste.

Struktur setiap file kantin (kolom identik):
A: Tanggal
B: Nama Item
C: Kategori  (Makanan / Minuman / Snack)
D: Jumlah Terjual
E: Harga Satuan
F: Total Penjualan  (=D*E)

Langkah 1: Di file rekap, buat 3 sheet import:

Sheet "Kantin_A":
=IMPORTRANGE("URL_FILE_KANTIN_A", "Penjualan!A2:F200")

Sheet "Kantin_B":
=IMPORTRANGE("URL_FILE_KANTIN_B", "Penjualan!A2:F200")

Sheet "Kantin_C":
=IMPORTRANGE("URL_FILE_KANTIN_C", "Penjualan!A2:F200")

Langkah 2: Gabungkan semua di sheet "Rekap_Semua" dengan array curly braces:
=QUERY(
  {Kantin_A!A2:F200;
   Kantin_B!A2:F200;
   Kantin_C!A2:F200},
  "SELECT * WHERE Col1 IS NOT NULL ORDER BY Col1 ASC",
  0
)

Langkah 3: Buat ringkasan kategori dari rekap gabungan:
=QUERY(Rekap_Semua!A:F,
  "SELECT Col3, SUM(Col6), COUNT(Col1)
   WHERE Col3 IS NOT NULL
   GROUP BY Col3
   ORDER BY SUM(Col6) DESC
   LABEL Col3 'Kategori', SUM(Col6) 'Total Omset', COUNT(Col1) 'Jumlah Transaksi'",
  1)

Catatan: karena QUERY pada array pakai Col1, Col2 (bukan nama kolom asli).
Simulasi tanpa 3 file berbeda: Jika Abbas tidak punya 3 file terpisah, buat 3 sheet dalam satu file (Kantin_A, Kantin_B, Kantin_C) dan gunakan referensi biasa. Konsep QUERYnya tetap sama, dan ini tetap melatih pola pikir konsolidasi data yang penting.
Latihan C Apps Script: Laporan Mingguan Otomatis ke Sheet Arsip

Abbas diminta membuat sistem yang setiap Jumat otomatis menghitung ringkasan data minggu ini dan menyimpannya ke sheet arsip. Ini mensimulasikan pipeline data engineer skala kecil yang nyata.

Script Apps Script (buka via Extensions > Apps Script):

function arsipkanMingguIni() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetData = ss.getSheetByName('DataHarian');
  var sheetArsip = ss.getSheetByName('Arsip');

  // Buat sheet Arsip jika belum ada
  if (!sheetArsip) {
    sheetArsip = ss.insertSheet('Arsip');
    sheetArsip.appendRow([
      'Tanggal Arsip', 'Periode', 'Total Baris', 'Total Nilai', 'Rata-rata Nilai'
    ]);
  }

  var data = sheetData.getDataRange().getValues();
  var jumlahBaris = 0;
  var totalNilai = 0;
  var sekarang = new Date();

  // Hitung data 7 hari terakhir
  for (var i = 1; i < data.length; i++) {
    var tanggal = new Date(data[i][0]);
    var selisihHari = (sekarang - tanggal) / (1000 * 60 * 60 * 24);
    if (selisihHari <= 7 && data[i][3] !== '') {
      jumlahBaris++;
      totalNilai += Number(data[i][3]); // kolom D = nilai
    }
  }

  var rataRata = jumlahBaris > 0 ? (totalNilai / jumlahBaris).toFixed(1) : 0;
  var periode = Utilities.formatDate(sekarang, 'Asia/Jakarta', 'dd/MM/yyyy');

  // Simpan ringkasan ke sheet Arsip
  sheetArsip.appendRow([sekarang, periode, jumlahBaris, totalNilai, rataRata]);

  SpreadsheetApp.getUi().alert(
    'Arsip selesai!\n' +
    jumlahBaris + ' baris data minggu ini.\n' +
    'Total nilai: ' + totalNilai + '\n' +
    'Rata-rata: ' + rataRata
  );
}

// Cara jadwalkan otomatis setiap Jumat:
// Apps Script > klik ikon Triggers (jam) > Add Trigger
// Pilih fungsi: arsipkanMingguIni
// Event source: Time-driven
// Type: Week timer > Every Friday > pukul 15.00-16.00
Tantangan Lanjutan: Modifikasi script agar ringkasan juga dikirim ke email menggunakan MailApp.sendEmail("email@gmail.com", "Laporan Mingguan", "Isi pesan"). Abbas bisa mengganti isi pesan dengan data yang sudah dihitung dari script di atas.
Latihan D ASCII Table Challenge: Rancang Struktur Tabel sebelum Buka Sheets

Analis data yang baik merancang struktur output terlebih dahulu sebelum mulai menulis formula. Latihan ini memaksa Abbas berpikir tentang struktur laporan sebelum membuka Sheets.

Skenario: Abbas diminta buat laporan "Performa Kelas per Mata Pelajaran" untuk rapat guru. Sebelum buka Sheets, rancang dulu tabel outputnya.

Target output yang diinginkan (desain dulu, baru buat):

+--------+------+------+------+-------+------+---------+
| Kelas  | MTK  | IPA  | IPS  | B.IND | ING  | Rata2   |
+--------+------+------+------+-------+------+---------+
| 10A    | 78.2 | 82.1 | 75.0 | 80.5  | 77.3 | 78.6    |
| 10B    | 74.8 | 79.4 | 80.2 | 76.1  | 72.9 | 76.7    |
| 11A    | 83.0 | 85.2 | 79.8 | 84.1  | 81.6 | 82.7    |
| 11B    | 80.5 | 81.0 | 82.3 | 79.4  | 78.8 | 80.4    |
+--------+------+------+------+-------+------+---------+
| Avg    | 79.1 | 81.9 | 79.3 | 80.0  | 77.7 | 79.6    |
+--------+------+------+------+-------+------+---------+

Ini adalah format "crosstab" (tabulasi silang). Cara terbaik di Sheets:

Pendekatan 1: Pivot Table (paling mudah, otomatis)
- Rows: Kelas
- Columns: Mata Pelajaran
- Values: AVG(Nilai Akhir)
- Show row totals: aktifkan
- Show column totals: aktifkan

Pendekatan 2: Formula manual per sel (lebih kontrol tapi banyak formula)
=AVERAGEIFS(NilaiAkhir, KolomKelas, "10A", KolomMapel, "Matematika")
Perlu 20 formula untuk 4 kelas x 5 mapel.

Pendekatan 3: QUERY mendekati crosstab (tapi terbatas di Sheets)
=QUERY(DataNilai!A:F,
  "SELECT B, AVG(F) WHERE C = 'Matematika' GROUP BY B LABEL B 'Kelas'", 1)
Lalu buat 5 QUERY terpisah, satu per mapel, letakkan berdampingan.

Kesimpulan: untuk tabel silang kelas x mapel, Pivot Table adalah
pilihan terbaik di Google Sheets karena satu konfigurasi menghasilkan
seluruh tabel sekaligus.
Kebiasaan Profesional: Setiap menerima permintaan laporan, Abbas sebaiknya luangkan 5 menit menggambar tabel output di kertas atau notepad sebelum membuka Sheets. Kebiasaan ini menghemat waktu karena Abbott sudah tahu persis formula apa yang dibutuhkan.
Latihan E Mini Pipeline: Google Form ke Sheets ke Dashboard Otomatis

Ini adalah latihan integrasi penuh yang mensimulasikan sistem pengumpulan data real-time. Banyak sekolah dan UMKM menggunakan Google Form sebagai cara gratis untuk input data terstruktur yang langsung terhubung ke Sheets.

Skenario: Sistem pencatatan nilai ulangan harian guru

Langkah 1: Buat Google Form di forms.google.com
- Pertanyaan 1: Nama Siswa (Short answer)
- Pertanyaan 2: Kelas (Multiple choice: 10A, 10B, 11A, 11B)
- Pertanyaan 3: Mata Pelajaran (Dropdown, isi 5 mapel)
- Pertanyaan 4: Nilai (Short answer, validasi angka 0-100)
- Pertanyaan 5: Tanggal Ulangan (Date)
- Klik "Responses" > ikon Sheets hijau > Create spreadsheet

Form otomatis terhubung ke Sheets. Setiap submit = satu baris baru.

Langkah 2: Tambahkan kolom kalkulasi otomatis di Sheets
Di kolom G (Status Kelulusan):
=ARRAYFORMULA(IF(F2:F="","",IF(F2:F >= 70,"Lulus","Remedial")))

Di kolom H (Grade Huruf):
=ARRAYFORMULA(IF(F2:F="","",
  IF(F2:F >= 90,"A",
  IF(F2:F >= 80,"B",
  IF(F2:F >= 70,"C",
  IF(F2:F >= 60,"D","E"))))))

Kolom G dan H mengisi diri otomatis setiap ada submit baru.

Langkah 3: Dashboard sheet terpisah yang update sendiri
=QUERY(A:H,
  "SELECT B, COUNT(A), AVG(F), COUNTIF(G,'Lulus')
   WHERE B IS NOT NULL
   GROUP BY B
   ORDER BY AVG(F) DESC
   LABEL B 'Kelas', COUNT(A) 'Total Siswa', AVG(F) 'Rata-rata',
         COUNTIF(G,'Lulus') 'Jumlah Lulus'",
  1)

KPI summary di atas dashboard:
=COUNTA(A2:A)             total submission hari ini
=COUNTIF(G2:G,"Lulus")   total siswa lulus
=AVERAGE(F2:F)            rata-rata nilai semua kelas
Mengapa Ini Penting: Pipeline Form ke Sheets ke Dashboard adalah sistem nyata yang dipakai di banyak sekolah dan kantor. Abbas sudah bisa membangun ini sepenuhnya dengan tools gratis, tanpa coding backend. Ini adalah skill yang bisa langsung dipakai membantu organisasi atau dijadikan portofolio freelance pertama Abbas.