Bahasa Indonesia

SQL dan Desain Dasbor yang Membangun Kepercayaan Pemangku Kepentingan

CEO membuka dasbor revenue pada Senin pagi. Ada 14 grafik. Tiga di antaranya memiliki kata "revenue" di judulnya. Ketiganya menampilkan angka yang berbeda. Dia mengirim pesan Slack: "tunggu, apa arti revenue di sini?" Kamu menghabiskan 30 menit menjelaskan perbedaan antara booked, recognized, dan collected. Dia berterima kasih, menutup tab, dan kembali ke ekspor Stripe yang dikirim finance lead-nya karena setidaknya angka itu tidak bertentangan dengan dirinya sendiri.

Dasbor itu tidak gagal karena terlalu banyak grafik. Ia gagal karena dua grafik itu mengatakan hal yang berbeda dan tidak ada orang di ruangan yang bisa mempertahankan keduanya.

Kesulitan dalam pekerjaan BA bukan soal volume. Ini soal fakta bahwa setiap dasbor yang kamu kirimkan adalah sebuah janji (ini adalah angkanya, kamu bisa bertindak berdasarkan ini), dan sebagian besar BA mengirim janji itu tanpa melakukan pekerjaan yang membuatnya bisa dipertahankan. Bagian ini membahas pekerjaan tersebut. Pola SQL, pilihan tata letak, kebersihan dbt, dan disiplin penghapusan yang mengubah kitchen sink 14 grafik menjadi satu angka yang mau dipertaruhkan anggaran satu kuartal oleh pemangku kepentingan.

Desain dasbor: satu keputusan per dasbor

Satu pertanyaan paling berguna sebelum kamu membangun apapun: tindakan apa yang didorong dasbor ini?

Kalau pemangku kepentingan tidak bisa melengkapi kalimat "setelah melihat ini, saya akan..." dalam bahasa yang mudah dipahami, kamu tidak punya dasbor. Kamu punya wallpaper. Hapus atau bagi.

Satu keputusan per dasbor. Bukan tiga. Dasbor ARR menjawab "apakah kita sesuai rencana di kuartal ini." Dasbor cakupan pipeline menjawab "apakah kita punya cukup deal untuk mencapai kuartal berikutnya." Itu adalah keputusan yang berbeda, audiens yang berbeda, frekuensi yang berbeda. Keduanya tidak perlu ada di canvas yang sama hanya karena keduanya melibatkan sales.

Hierarki visual: aturan 2 detik

Ketika dasbor dimuat, mata pemangku kepentingan seharusnya mendarat pada jawabannya dalam waktu kurang dari 2 detik. Artinya:

  • Kiri atas: angka utama. Besar, tebal, dengan perbandingan yang sudah tersemat ($4,2M ARR · +6% vs rencana). Bukan "Revenue YTD" dengan grafik garis di bawahnya yang harus dibaca.
  • Di bawah angka utama: 2-4 pecahan pendukung yang menjelaskan mengapa angka utama seperti itu. Berdasarkan segmen, region, motion. Bukan 12 pecahan. Empat.
  • Drill-down dalam tab atau klik-terus: siapapun yang menginginkan detail bisa sampai ke sana. Jangan biarkan tampilan default menanggungnya.

Kalau angka utama dasbor kamu ada di grafik ke-7 dari 14, kamu sudah membalik piramida. Kebanyakan BA melakukan ini karena takut melewatkan sesuatu. Jadilah lebih takut jika pemangku kepentingan tidak tahu apa yang harus dilihat.

Disiplin warna: berhenti membuat kantong permen

Kebanyakan dasbor BA terlihat seperti kantong permen warna-warni. Delapan warna kategorikal, tiga warna aksen, sebuah heatmap, dua palet yang berbeda, dan sebuah lampu lalu lintas semua ada di satu halaman. Itu kebisingan, bukan sinyal.

Pilih batasan dan pertahankan:

  • Satu warna aksen untuk "baik" (biasanya hijau atau biru merek).
  • Satu warna aksen untuk "peringatan" (biasanya merah atau oranye).
  • Segalanya lainnya dalam abu-abu netral.

Kalau kamu mencapai warna keempat, masalahnya bukan kamu butuh lebih banyak warna. Masalahnya adalah kamu mencoba menampilkan terlalu banyak hal dalam satu grafik. Bagi grafiknya.

Anotasi lebih baik dari legenda

Legenda adalah sesuatu yang harus dibaca, didekodekan, dan diingat oleh pemangku kepentingan. Anotasi adalah grafik yang berbicara langsung kepada mereka.

Keterangan dua baris di samping penurunan Q3 ("Penurunan Q3 = perubahan harga diluncurkan 14 Agustus, diperkirakan pulih pada Q4") mencegah 80% pesan Slack tindak lanjut. 20% lainnya adalah tentang sesuatu yang dasbor tidak dirancang untuk menjawab, yang juga merupakan informasi berguna.

Jadikan anotasi sebagai kebiasaan. Setiap grafik dengan bentuk yang tidak jelas mendapat penjelasan satu kalimat di dalam grafik itu sendiri, bukan di dokumen terpisah yang tidak dibaca siapapun.

Praktik SQL yang menghasilkan kepercayaan

Dasbor adalah pintu depan. SQL di bawahnya adalah fondasinya. Pemangku kepentingan tidak melihat SQL, tapi mereka merasakannya setiap kali angka berubah dan kamu tidak bisa menjelaskan mengapa.

CTE daripada subquery bersarang

Bandingkan dua query berikut yang melakukan hal yang sama:

-- Versi subquery bersarang (jangan lakukan ini)
SELECT customer_id,
       SUM(amount) AS revenue
FROM (
  SELECT *
  FROM orders
  WHERE status = 'paid'
    AND created_at >= '2026-01-01'
    AND customer_id IN (
      SELECT id FROM customers
      WHERE region = 'NA'
        AND tier IN ('enterprise', 'mid-market')
    )
) paid_orders
GROUP BY customer_id;
-- Versi CTE (lakukan ini)
WITH na_target_customers AS (
  SELECT id
  FROM customers
  WHERE region = 'NA'
    AND tier IN ('enterprise', 'mid-market')
),

paid_orders_2026 AS (
  SELECT customer_id, amount
  FROM orders
  WHERE status = 'paid'
    AND created_at >= '2026-01-01'
)

SELECT po.customer_id,
       SUM(po.amount) AS revenue
FROM paid_orders_2026 po
JOIN na_target_customers c
  ON po.customer_id = c.id
GROUP BY po.customer_id;

Hasil yang sama. Versi CTE memiliki nama. Seorang rekan bisa membacanya dalam 30 detik. Versi bersarang adalah sebuah teka-teki. Query yang tidak bisa dibaca rekan dalam 30 detik adalah query yang akan diam-diam rusak dalam 6 bulan ketika seseorang mengubah definisi tier pelanggan dan tidak ada yang menyadarinya karena tidak bisa menemukan filter-nya.

CTE menghabiskan empat baris ekstra dan menghasilkan query yang bertahan dari pergantian tim.

Model dbt sebagai sumber kebenaran tunggal

Kalau revenue dihitung di empat dasbor, itu akan berbeda di empat dasbor. Bukan "mungkin." Pasti akan. Seseorang akan mengubahnya untuk mengecualikan refund. Orang lain akan mengubahnya untuk menyertakan konversi trial. Enam bulan kemudian, empat dasbor menampilkan empat angka dan kepercayaan hilang.

Sentralisasikan metrik dalam model dbt. Satu file. Satu definisi. Kemudian setiap dasbor, setiap Looker explore, setiap notebook Hex merujuk model itu dan hanya model itu. Kalau finance ingin mengubah cara revenue dihitung, mereka mengubahnya sekali, dan setiap artefak downstream diperbarui.

Ini bukan sesuatu yang bagus untuk dimiliki. Ini adalah perbedaan antara tim BA yang berkembang dan tim BA yang menghabiskan Q4 setiap tahun untuk merekonsiliasi angka yang tidak dipercaya siapapun.

Pengujian bernama pada setiap model metrik

dbt memberimu empat pengujian bawaan yang menangkap sebagian besar pergeseran diam-diam:

version: 2

models:
  - name: fct_revenue_recognized
    description: "Revenue yang diakui sesuai kebijakan GAAP perusahaan. Pemilik: finance-data."
    columns:
      - name: order_id
        tests:
          - not_null
          - unique
      - name: customer_id
        tests:
          - not_null
          - relationships:
              to: ref('dim_customers')
              field: customer_id
      - name: revenue_status
        tests:
          - accepted_values:
              values: ['recognized', 'deferred', 'refunded']

Jalankan pengujian ini pada setiap PR. Kalau seseorang menambahkan nilai revenue_status baru di upstream dan lupa memperbarui model, pengujian gagal sebelum dasbor gagal. Pertama kali pengujian not_null menangkap bug dalam data produksi, kamu akan bertanya-tanya bagaimana kamu pernah mengirimkan tanpa itu.

Komentari mengapa, bukan apa

-- Buruk: memberitahu apa yang sudah dikatakan kode
WHERE status = 'paid'

-- Baik: memberitahu mengapa aturan itu ada
-- Finance mengecualikan refund yang diproses lebih dari 30 hari setelah order
-- sesuai kebijakan revenue v3 (ditandatangani oleh CFO pada 2025-Q4).
WHERE status = 'paid'
  AND NOT (status_changed_at > created_at + INTERVAL '30 days'
           AND status = 'refunded')

Komentar yang buruk adalah kebisingan. Komentar yang baik adalah satu-satunya hal yang akan menyelamatkan BA berikutnya yang mewarisi query ini dalam setahun. Tulis mengapanya. Terutama untuk setiap aturan bisnis yang tidak jelas dari nama kolomnya.

Diagnostik "dua definisi revenue"

Ini adalah langkah membangun kepercayaan paling berguna yang bisa dilakukan BA dalam 90 hari pertama, dan tidak melibatkan penulisan satu dasbor pun.

Pergi ke finance lead kamu. Tanyakan kepada mereka, dalam sebuah panggilan, "bagaimana kita menghitung revenue?" Tulis jawabannya.

Pergi ke sales lead kamu. Ajukan pertanyaan yang sama. Tulis jawabannya.

Keduanya akan memberimu dua jawaban yang berbeda.

Sales akan memberi tahu kamu tentang ACV yang booked: deal yang ditutup, kontrak yang ditandatangani, angka di papan skor. Finance akan memberi tahu kamu tentang revenue yang recognized: kas yang terkumpul bersih dari refund, dideferred sesuai kebijakan, angka yang dilaporkan ke dewan. Keduanya benar. Keduanya nyata. Mereka menjawab pertanyaan yang berbeda. Dan saat ini, di suatu tempat di perusahaanmu, ada dasbor yang menampilkan salah satunya dan menyebutnya "revenue" tanpa mengatakan yang mana.

Dokumentasikan keduanya. Namai dengan jelas dalam model dbt:

-- fct_revenue_finance.sql -- recognized sesuai kebijakan GAAP v3
-- fct_revenue_sales_booked.sql -- ACV booked pada tanggal deal-close

Expose keduanya di layer BI kamu. Biarkan pemangku kepentingan memilih yang sesuai dengan pertanyaan mereka. Ketika CEO bertanya "bagaimana perkembangan revenue," kamu bertanya balik: "booked atau recognized?" Mereka akan berhenti sejenak. Mereka akan berpikir. Mereka akan memberi kamu jawaban yang tepat, dan dari saat itu kamu adalah orang yang mereka percaya karena kamu membuat mereka merasa kompeten, bukan bingung.

Diagnostik ini juga memberi tahu kamu organisasi mana yang lebih longgar dalam hal definisi, yang merupakan intelijen yang akan kamu gunakan selama dua tahun ke depan.

Dasbor vs. satu kali: kapan membangun, kapan screenshot

Tidak setiap pertanyaan layak mendapat dasbor. Default di sebagian besar organisasi BA adalah "jawaban atas pertanyaan adalah dasbor baru," dan itulah cara kamu berakhir dengan 200+ dasbor dan tidak tahu 30 mana yang benar-benar digunakan.

Heuristiknya sederhana. Apakah pertanyaan ini akan ditanyakan lagi dalam 30 hari?

  • Ya maka buat dasbor. Layak mendapat komitmen pemeliharaan.
  • Tidak maka buat query SQL, screenshot, kirim di Slack, selesai. Jangan mencemari perpustakaan dasbor dengan satu kali pakai untuk persiapan dewan.

Setiap dasbor yang kamu bangun adalah komitmen pemeliharaan 6 bulan. Tabel sumber berubah. Definisi bergeser. Pemangku kepentingan berpindah tim. Kamu akan diminta untuk memperbaikinya. Tolak dengan bijaksana.

Skrip menolak dasbor:

"Saya dengan senang hati menarik ini untuk kamu sebagai satu kali pakai. Saya akan mengirimkan grafiknya di Slack sebelum EOD. Kalau ini menjadi pertanyaan berulang (kamu menanyakannya lagi bulan depan), mari kita tinjau ulang dan saya akan membangunnya dengan benar beserta dokumentasinya. Saat ini, membangun dasbor untuk pertanyaan sekali pakai akan menambahkan overhead pemeliharaan yang tidak sebanding."

Kirim itu ke pemangku kepentingan sekali dan mereka akan lebih menghormatimu, bukan sebaliknya. Membangun segalanya adalah tanda bahwa kamu tidak menghargai waktumu sendiri, yang berarti mereka pun tidak akan menghargainya.

Version control dan disiplin change log

Semua SQL tersimpan di git. Ya, LookML Looker kamu. Ya, notebook Hex kamu (atau salin SQL ke dalam repo). Ya, model dbt kamu, jelas. Kalau sebuah angka di dasbor bisa berubah, perubahan itu harus bisa ditinjau.

Dua aturan yang menangkap sebagian besar bencana:

  1. Review dua orang untuk perubahan metrik. Setiap PR yang menyentuh model fct_* atau dim_* ditinjau oleh satu analis lain sebelum merge. Bukan manajer. Rekan yang benar-benar akan membaca SQL-nya. Ini menangkap pergeseran definisi diam-diam yang menghancurkan kepercayaan.

  2. Kartu change log yang dipasang di setiap dasbor. Di bagian atas dasbor, selalu terlihat:

Change Log: ARR Tracker
2026-04-15: Beralih sumber revenue dari Stripe ke NetSuite.
            Angka mungkin berbeda dari screenshot sebelumnya sekitar 2%.
            Pemilik: camellia. PR: #1842.
2026-02-03: Menambahkan pecahan enterprise-tier.
2025-11-20: Build awal.

Ketika pemangku kepentingan men-screenshot dasbor di Maret dan bertanya mengapa berbeda di Mei, change log menjawab pertanyaan tanpa kamu harus terlibat.

Review penghapusan 6 bulan

Sebagian besar organisasi BA memiliki 200+ dasbor dan menggunakan 30. Sisanya 170 adalah beban mati: membingungkan karyawan baru, membuat eksekutif meragukan yang aktif, menghabiskan kredit query di gudang. Membersihkan adalah pekerjaannya.

Atur pengingat kalender setiap 6 bulan. Jalankan query terhadap log audit alat BI kamu:

-- Contoh Looker
SELECT dashboard.title,
       dashboard.id,
       MAX(history.created_at) AS last_opened,
       COUNT(DISTINCT history.user_id) AS unique_viewers_180d
FROM history
JOIN dashboard ON history.dashboard_id = dashboard.id
WHERE history.created_at > CURRENT_DATE - INTERVAL '180 days'
GROUP BY 1, 2
ORDER BY last_opened ASC;

Output mengurutkan dasbor kamu dari yang paling usang ke yang paling tidak usang. Terapkan aturan:

  • Tidak dibuka dalam 90 hari: arsipkan. Tanpa diskusi.
  • Dibuka oleh 1-2 orang: DM mereka. "Masih butuh ini? Kalau ya, saya akan mempertahankannya. Kalau tidak, saya mengarsipkan pada Jumat." Kebanyakan akan bilang arsipkan.
  • Dibuka oleh 5+ orang secara teratur: pertahankan, dan pastikan ada dalam daftar pemeliharaanmu.

Posting daftar penghapusan di channel Slack publik sebelum kamu mengarsipkan. Memberi pemangku kepentingan 48 jam untuk keberatan. Mereka hampir tidak pernah melakukannya.

Tim BA yang melakukan ini dua kali setahun turun dari 200 dasbor menjadi 40, dan 40 yang tersisa adalah yang benar-benar dilihat eksekutif. Peningkatan rasio sinyal terhadap kebisingan sangat besar, dan kamu menjadi dikenal sebagai tim yang menghasilkan lebih sedikit, yang terdengar berlawanan dengan intuisi sampai kamu melihat meteran kepercayaan bergerak.

Penutup: kepercayaan adalah output keahlian

Kepercayaan bukan sifat kepribadian. Bukan soal menjadi karismatik dalam rapat pemangku kepentingan, atau selalu berkata ya, atau menjadi BA yang membantu. Hal-hal itu membantu, tapi mereka memudar. Yang bertahan adalah keahlian.

BA yang bisa menjawab "dari mana ini berasal, siapa lagi yang menggunakannya, kapan terakhir kali berubah" dalam 10 detik adalah BA yang dipertahankan eksekutif untuk proyek strategis. BA yang tidak bisa secara diam-diam diturunkan menjadi "query monkey ad hoc" dan tidak pernah pulih, tidak peduli seberapa ramah mereka.

Bangun untuk satu keputusan. Pertahankan batas warna. Sentralisasikan metrikmu. Uji mereka. Komentari mengapanya. Tanyakan kedua definisi revenue. Tolak dasbor yang tidak memberikan nilai sepadan. Pasang change log. Arsipkan sesuai jadwal.

Itulah keseluruhan pekerjaannya. Terapkan langkah-langkah itu secara konsisten selama dua tahun dan kamu tidak perlu meminta kursi di meja strategi. Mereka akan menyiapkannya untukmu.

Pelajari Lebih Lanjut