Cara Kerja & Alur Data
Dasbor ini itu ujungnya pipa data analitik yang utuh. Sengaja dibangun pakai perkakas standar industri biar alurnya kelihatan semua, bukan cuma grafik doang.
Sumber data (gratis semua)
| Sumber | Isinya apa | Kunci |
|---|---|---|
| Open-Meteo Archive | cuaca harian per kebun — suhu, hujan, angin, lengas tanah, ET0, kelembapan | tanpa kunci |
| Open-Meteo Forecast | ramalan 7 hari per kebun (variabel sama) | tanpa kunci |
| Frankfurter (ECB) | kurs acuan harian USD → IDR | tanpa kunci |
| Nager.Date | kalender tanggal merah Indonesia | tanpa kunci |
| World Bank Pink Sheet | harga bulanan sawit & minyak kedelai | tanpa kunci |
Tiap sedot data dicoba live dulu (3x retry), gagal ya pakai data cadangan yang deterministik — jadi pipa dan CI-nya selalu bisa jalan offline. Yang penting nggak diam-diam: ingestion/load_raw.py nulis ingestion_manifest.json per sumber (live vs synthetic), dan job terjadwal GitHub Actions ngasih warning kalau ada yang cadangan. Mau galak? --require-live biar langsung gagal aja.
Lapisan olahan (dbt)
- mentah (DuckLake) — mentahan API mendarat di katalog DuckLake (
palm_lake/): file parquet + snapshot ACID. Tiap sedotan harian = satu snapshot. - staging (
stg_*) — satu model bersih per sumber - intermediate (
int_*) — logika bisnis: tulang tanggal, harga & kurs dimajuin harian (ASOF join), aturan agronomi via macroagronomy_signalsbareng-bareng - mart ramalan (
fct_estate_forecast_7day) — perencana 7 hari per kebun (H+1..7), harga dianggap stagnan - lapisan semantik — definisi metrik baku (
_marts__semantic.yml) dikompilasi jadi viewsl_metrics_daily - mart — bintang Kimball:
dim_date(flag weekend + libur),dim_region,fct_estate_operations_daily(incremental),fct_commodity_price_daily(dikontrak)
Praktik yang dipamerkan
- 4 sumber beda rupa + cek kesegaran sumber
- raw DuckLake nyuapin warehouse DuckDB
- Modelling berlapis + seeds
- Materialisasi incremental + snapshot SCD2 harga
- Kontrak model, tes kualitas data, unit test dbt
- CI/CD:
dbt buildtiap push/PR + refresh harian 00:00 UTC
Perencana 7 hari
Perencana 7 Hari pakai aturan agronomi yang sama ke jendela ramalan (H+1 → H+7). Harga dianggap stagnan di angka terakhir — jujur mana yang ramalan mana yang fakta.
Tambah kebunmu sendiri (khusus Indonesia)
Wilayah nggak di-hardcode — daftarnya di seeds/region_profile.csv. Cara nambah kebunmu:
- Tambah satu baris ke
seeds/region_profile.csv(region_key,planted_hectares,yield_t_ha,estate_manager,latitude,longitude,island) plus baris biaya pasangannya diseeds/cost_assumptions.csv. Koordinat wajib dan harus di dalam Indonesia (lat −11…6, lon 95…141) — di luar itu ditolak mentah-mentah. - Jalanin
python ingestion/load_raw.py(baca daftar itu;--regions lain.csvatauPALM_REGIONS=lain.csvbuat override) terusdbt build --profiles-dir .. - Build-nya gagal berisik kalau ada kebun yang belum ada baris biayanya (
assert_margin_covers_all_regions).
Keputusan yang dibantu
Cuaca hari ini + harga sawit rupiah → kebun mana yang gas mupuk, manen, nyemprot, dan sehari panen yang bagus itu cuannya berapa? Hari panen efektif syarat tambahannya: timnya masuk (bukan weekend/tanggal merah).
Otomatisasi & pantauan
- Jadwal: dua workflow jalan tiap
push/pull_request, plusschedule: cron '0 0 * * *'(00:00 UTC) dan tombol manualworkflow_dispatch. - E2E terjadwal: workflow Pages ngerjain semuanya —
pip install→dbt deps→python ingestion/load_raw.py→dbt build→ freshness →cp palm.duckdb→npm run build→ deploy kegh-pages. - Pantauan: tiap jalan, manifest + status kesegaran ditempel ke ringkasan Actions; kalau jadwal gagal, dibikinin Issue otomatis (nggak dobel-dobel).
