Episode ini membahas otomasi laporan: scheduled dashboard, email report, dan pipeline refresh dengan Airflow atau cloud scheduler. Kalian akan menyusun jadwal yang benar, membangun laporan harian otomatis, dan memahami praktik monitoring agar otomasi tidak diam-diam rusak

Laporan yang dikirim manual setiap pagi adalah kebiasaan yang menguras waktu analis — dan rawan lupa, rawan salah, rawan telat. Di episode ini kalian mengotomasi pekerjaan berulang itu: data diperbarui sendiri, dashboard menyegarkan sendiri, dan laporan terkirim sendiri. Analis yang mengotomasi reporting mengubah waktunya dari "mengerjakan laporan" menjadi "menganalisis hasil".
Episode ini membangun otomasi berlapis: dari yang paling sederhana (scheduled refresh di BI tool) hingga pipeline data dengan Airflow atau cloud scheduler. Prinsip yang dibawa pulang: otomasi yang tidak dimonitoring hanyalah kesalahan yang berjalan otomatis.
Otomasi analis terdiri dari tiga lapisan, masing-masing semakin kompleks:
| Lapisan | Contoh | Kapan dibutuhkan |
|---|---|---|
| Scheduled refresh | BI tool menyegarkan query tiap jam/hari | Dataset siap, perlu segar |
| Email report | Ringkasan KPI terkirim otomatis tiap pagi | Stakeholder butuh update rutin |
| Pipeline data | dbt/Airflow menjalankan transformasi lalu dashboard | Data perlu diproses dulu |
Jangan langsung loncat ke Airflow jika yang dibutuhkan hanya refresh harian. Gunakan alat sesederhana yang menyelesaikan masalah — pelajaran yang sama dengan pivot vs Python di episode 10.
Metabase (dari episode 0) bisa menyegarkan dan mengirim ringkasan dashboard otomatis:
Metabase → Dashboard → Share → Schedule it:
- Frequency : Setiap hari pukul 07.00
- Target : email tim (marketing@..., finance@...)
- Attach : CSV terlampir (opsional)Prinsip yang sama di semua BI tool modern — Tableau, Power BI, Looker semuanya punya fitur scheduled subscription. Ini lapisan pertama yang langsung menghemat jam kerja: dashboard yang selalu segar tanpa disentuh.
Laporan otomatis yang baik bukan menyalin seluruh dashboard ke email — ia mengirim ringkasan eksekutif: angka KPI, perubahan vs kemarin, dan satu catatan penting.
Subject : Daily Sales Report — 2026-08-17
Revenue : Rp 850 juta (▲ 3.2% vs kemarin)
Orders : 4.210 (▲ 1.1%)
AOV : Rp 201.900 (▲ 2.1%)
Catatan : Kenaikan didorong kampanye flash sale kanal paid social.Prinsipnya kembali ke episode 13: penerima butuh kesimpulan, bukan dump data. Email report yang efektif bisa dibaca dalam 15 detik di ponsel.
Saat data perlu diproses dulu sebelum dashboard (transformasi dbt, misalnya), jadwalkan pipeline-nya. Dua opsi paling umum:
Cron expression standar untuk jadwal periodik:
# Setiap hari 06.00 UTC
schedule: "0 6 * * *"
# Setiap Senin-Jumat 08.00
schedule: "0 8 * * 1-5"
# Setiap akhir bulan pukul 05.00
schedule: "0 5 28-31 * *"Saat dependensi antar job rumit — "jalankan transformasi X setelah data Y tiba" — gunakan orchestrator. Contoh DAG sederhana di Airflow:
from airflow import DAG
from airflow.operators.bash import BashOperator
from airflow.operators.empty import EmptyOperator
from datetime import datetime
with DAG(
dag_id="daily_analytics_refresh",
schedule="0 6 * * *",
start_date=datetime(2026, 1, 1),
catchup=False,
) as dag:
mulai = EmptyOperator(task_id="mulai")
dbt_run = BashOperator(task_id="dbt_run", bash_command="dbt build")
selesai = EmptyOperator(task_id="selesai")
mulai >> dbt_run >> selesaiAirflow mengelola urutan, retry, dan riwayat eksekusi — menjawab pertanyaan "kenapa pipeline tadi malam gagal?" dengan satu klik.
Note
Pilih berdasarkan kebutuhan: cloud scheduler cukup untuk trigger rutin tanpa dependensi; Airflow/Dagster diperlukan saat banyak job saling tergantung dan perlu observabilitas. Memulai dengan Airflow untuk satu laporan harian adalah over-engineering klasik.
Otomasi yang tidak dimonitoring lebih berbahaya daripada tidak otomasi: orang mengandalkan laporan yang ternyata sudah dua minggu gagal diam-diam. Tiga praktik monitoring minimum:
| Praktik | Contoh |
|---|---|
| Alert kegagalan | Notifikasi saat pipeline gagal / data tidak update |
| Data freshness check | Test dbt: WHERE max(order_date) >= today - 1 |
| Anomaly check | Peringatan jika revenue turun drastis vs ekspektasi |
Contoh freshness test di dbt (dari episode 18):
SELECT order_date, SUM(amount) AS revenue
FROM {{ ref('fct_orders_daily') }}
WHERE order_date = CURRENT_DATE - 1
HAVING COUNT(*) = 0 -- gagal jika tidak ada data kemarinJika test ini gagal di dbt build malam ini, kalian tahu sebelum pagi — bukan setelah stakeholder bertanya.
Alur lengkap membangun otomasi laporan harian:
fct_orders_daily selalu ter-update (scheduled run).Setelah stabil, kalian tidak pernah lagi membuka laptop untuk "membuat laporan pagi" — waktu itu berpindah ke analisis yang sebenarnya.
Inti yang harus dibawa pulang:
Di episode 25 selanjutnya kalian mengemas semua keterampilan menjadi bukti nyata: Portofolio & Studi Kasus — membangun 2-3 case study end-to-end dari dataset mentah hingga dashboard dan storytelling yang siap ditunjukkan ke perekrut. Otomasi sudah meringankan kerja kalian; sekarang saatnya membangun bukti karir!