Episode ini membahas performance tuning BI: optimasi query, incremental refresh, dan caching — bagaimana menemukan bottleneck, mempercepat dashboard yang lambat, dan menjaga performa tetap stabil seiring data dan pengguna yang bertambah

Episode 23 menyinggung satu syarat embedded analytics yang sering disepelekan: performa. Episode ini membahasnya tuntas — performance tuning BI. Dashboard yang indah dan insight yang tajam tidak ada artinya jika pengguna menunggu 2 menit untuk memuatnya. Setiap detik yang hilang adalah perhatian dan kepercayaan yang hilang.
Mengapa ini penting? Karena performa adalah syarat adopsi. Riset konsisten menunjukkan: interaksi yang lambat membuat pengguna berhenti memakai dashboard — mereka kembali ke spreadsheet manual. Sebagai BI Analyst, mengoptimalkan kecepatan bukan bonus; itu bagian dari tanggung jawab utama kalian, terutama saat data tumbuh besar dan jumlah pengguna meningkat.
Mulailah dengan angka konkret. Tentukan performance budget untuk dashboard kalian:
| Interaksi | Target |
|---|---|
| Perpindahan visual / filter | kurang dari 1 detik |
| Muat halaman dashboard | 3-5 detik |
| Refresh data (disediakan terjadwal) | sesuai SLA bisnis |
Faktor yang membuat dashboard lambat biasanya berlapis. Jangan langsung menyalahkan query — bisa jadi masalahnya di data model, volume data, atau cara tool merender visual. Proses tuning yang benar selalu ukur dulu, baru optimasi.
Query yang berat adalah penyebab paling umum dashboard lambat. Prinsip dasarnya sederhana: minta sesedikit mungkin data dari database.
Buruk:
SELECT * FROM fact_orders
WHERE order_date >= '2024-01-01'
Baik:
SELECT region, category, SUM(sales) AS revenue
FROM fact_orders
WHERE order_date >= '2024-01-01'
GROUP BY region, categoryPola query yang wajib diterapkan:
SELECT * lalu memotong di dashboard.Important
Perhatikan juga jumlah visual per halaman. Sepuluh visual yang masing-masing menjalankan query sendiri akan lambat meskipun tiap querynya ringan. Kurangi jumlah visual, atau pastikan beberapa visual berbagi satu sumber data yang sama (reduksi query).
Data model menentukan seberapa banyak kerja yang harus dilakukan query di setiap interaksi. Dua perbaikan paling berdampak:
Khusus untuk Power BI dan Tableau, perhatikan measure yang ditulis tanpa perhitungan yang tepat — misalnya fungsi iterasi per baris (SUMX, RANKX) yang dipakai di tempat SUM/AVERAGE biasa. Ini sumber "bug performa" yang paling sering ditemui:
// Lambat: iterasi baris demi baris
GrossMargin = SUMX('FactOrder', 'FactOrder'[Sales] - 'FactOrder'[Cost])
// Efisien: agregasi langsung
GrossMargin = SUM('FactOrder'[Sales]) - SUM('FactOrder'[Cost])Semakin besar data, refresh penuh (memuat ulang seluruh tabel) semakin tidak masuk akal. Incremental refresh hanya memproses data baru/berubah sejak refresh terakhir — sisanya diambil dari cache.
Tanpa incremental:
- Setiap refresh: muat 5 juta baris fact_orders → 40 menit, 2x sehari
Dengan incremental (7 hari terakhir + 2 tahun history):
- Refresh 1: muat history penuh
- Refresh berikutnya: hanya baris baru sejak kemarin → 2 menitDampaknya ganda: refresh jauh lebih cepat dan beban database turun drastis. Di Power BI ini dikonfigurasi langsung di model; di database, konsepnya sama dengan tabel partisi per bulan (episode 6) sehingga query harian hanya membaca partisi yang relevan.
Caching menyimpan hasil query sehingga permintaan berikutnya tidak perlu menghitung ulang. Bayangkan dapur restoran: koki menyiapkan hidangan sekali, lalu menyajikan ulang dari lemari penyimpanan — jauh lebih cepat daripada memasak dari nol untuk setiap pelanggan.
Lokasi cache yang umum di arsitektur BI:
| Lapisan | Apa yang Di-cache | Keuntungan |
|---|---|---|
| Database | Hasil query agregat (materialized view) | Query berikutnya instan |
| BI server | Hasil query per visual | Semua pengguna menikmati |
| Dashboard | Data visual saat load | Navigasi antar halaman cepat |
| CDN/edge | Report statis | User global, latensi rendah |
Caching bukan sihir gratis: ada tradeoff dengan kesegaran data (staleness). Cache yang terlalu lama membuat angka basi; terlalu pendek membuat beban database naik. Atur TTL (time-to-live) sesuai SLA bisnis — laporan mingguan tidak perlu data 5 menit terakhir.
Optimasi tanpa pengukuran adalah menebak. Alur yang benar:
1. Profil: buka dashboard, ukur waktu tiap visual (developer tools / usage metrics)
2. Identifikasi: visual mana yang paling lambat? query mana yang paling berat?
3. Prioritaskan: perbaiki yang berdampak paling besar untuk pengguna paling banyak
4. Optimasi: query → data model → incremental refresh → caching
5. Ukur ulang: apakah sudah memenuhi performance budget? catat baselineMonitoring berkelanjutan itu penting: gunakan query log dan usage analytics dari tool BI (Power BI usage metrics, Tableau Performance Recorder) untuk menemukan dashboard yang performanya menurun seiring data bertambah.
Gunakan dashboard revenue yang kalian bangun di episode 8-9 sebagai bahan latihan:
Praktik:
1. Ukur baseline: berapa lama dashboard memuat? catat angkanya
2. Periksa query terberat: kolom tak terpakai? filter kurang selektif?
3. Perbaiki data model: rapikan star schema, ringkas cardinality
4. Terapkan incremental refresh pada fact_orders
5. Aktifkan caching di tool BI dengan TTL yang masuk akal
6. Ukur ulang: bandingkan dengan baseline — catat perbedaannyaTarget latihan: dashboard yang tadinya 15 detik menjadi di bawah 5 detik. Jika sudah tercapai, kalian sudah menguasai skill yang paling dicari tim data.
SELECT * dan filter terlambat: data besar ditarik ke client hanya untuk dibuang di visual.Inti yang harus dibawa pulang:
Di episode 25 selanjutnya kita akan membahas BI strategy & operating model — maturity model, struktur organisasi BI, dan ROI. Performa yang cepat tidak ada artinya tanpa arah strategi yang jelas: dashboard yang cepat untuk keputusan yang salah tetap sia-sia. Pastikan tetap semangat!