Analisis Data

ARRAY_CONSTRAIN ARRAYFORMULA di Google Sheets (2026)

ModelMonkey11 Juli 20266 menit baca

Sintaksnya: =ARRAY_CONSTRAIN(array_or_range, num_rows, num_cols)

Hanya itu fungsinya. Kekuatan sesungguhnya ada pada apa yang Anda masukkan ke dalamnya.

Mengapa Output ARRAYFORMULA yang Tidak Terbatas Berisiko bagi Model

ARRAYFORMULA menghasilkan baris sebanyak data sumbernya. Ketika sumber data Anda adalah tab transaksi mentah dengan 4.200 baris di kuartal ini dan 3.800 baris di kuartal lalu, ukuran outputnya ikut berfluktuasi. Formula di hilir yang merujuk ke rentang tetap, misalnya =SUM(Ringkasan!B2:B9) atau named range yang dikunci ke 8 baris, langsung rusak begitu array melampaui batas yang diharapkan.

Dalam model tiga laporan keuangan (three-statement model), ini bukan masalah kecil. Tab FCFF Anda merujuk ke blok beban operasional di tab P&L. Jika blok itu adalah ARRAYFORMULA yang tumbuh tanpa batas setiap kali data sumber diperbarui, laporan arus kas Anda bisa seimbang di satu bulan dan diam-diam tidak seimbang di bulan berikutnya, tanpa pesan error apa pun.

ARRAY_CONSTRAIN adalah pengamannya. Bungkus di sekeliling array dan outputnya akan selalu berukuran tepat seperti yang Anda tentukan, apa pun yang terjadi pada data dasarnya.

Penggunaan Dasar: Membatasi Hasil FILTER

Misalnya Anda sedang menyusun ringkasan board pack yang menampilkan 5 cost center teratas berdasarkan pengeluaran Q2 2026, diambil dari tab P&L mentah:

=ARRAY_CONSTRAIN(
  SORT(
    FILTER('P&L'!B:D, 'P&L'!A:A="Q2 2026"),
    3, FALSE
  ),
  5, 3
)

Formula ini memfilter baris Q2, mengurutkan secara menurun berdasarkan kolom ketiga (pengeluaran), lalu menyerahkan hasilnya ke ARRAY_CONSTRAIN yang menghasilkan tepat 5 baris dan 3 kolom. Jika Q2 memiliki 47 cost center, Anda mendapat 5. Jika hanya ada 3 (misalnya karena spin-off di tengah tahun), Anda mendapat 3. ARRAY_CONSTRAIN tidak pernah mengisi kekurangan dengan nol atau melempar error ketika sumber lebih kecil dari batasnya, ia hanya mengembalikan apa yang ada.

Perilaku terakhir ini penting untuk dipahami. INDEX dengan nomor baris di luar jangkauan akan mengembalikan #REF!. ARRAY_CONSTRAIN dengan num_rows yang lebih besar dari array cukup mengembalikan seluruh array. Jauh lebih aman untuk input yang dinamis.

Kombinasi dengan ARRAYFORMULA untuk Kolom Kalkulasi

Pola yang lebih umum dalam model keuangan adalah menggunakan ARRAYFORMULA untuk menghitung kolom turunan, lalu membatasinya ke jumlah baris yang tepat sesuai kebutuhan model Anda.

Berikut adalah kalkulasi contribution margin per SKU, dibatasi ke 12 baris untuk blok ringkasan yang sudah tetap:

=ARRAY_CONSTRAIN(
  ARRAYFORMULA(
    SUMIFS('Pendapatan'!D:D, 'Pendapatan'!B:B, 'Master SKU'!A2:A, 'Pendapatan'!C:C, Asumsi!$B$3)
    - SUMIFS('HPP'!D:D, 'HPP'!B:B, 'Master SKU'!A2:A, 'HPP'!C:C, Asumsi!$B$3)
  ),
  12, 1
)

Formula ini menghitung contribution margin per SKU untuk periode yang tercantum di Asumsi!$B$3 (misalnya "Q2 2026"), lalu membatasi outputnya ke 12 baris. Jika Master SKU memiliki 18 SKU aktif, Anda tetap mendapat 12 baris, yang tepat cocok dengan blok 12 baris yang dirujuk tab Analisis Retur. Enam SKU sisanya ada di sumber tapi tidak menyentuh blok model.

Tanpa ARRAY_CONSTRAIN, penambahan 2 SKU baru ke Master SKU di tengah kuartal akan mendorong output array ke baris ke-14, langsung menimpa apa pun yang ada di sana.

Soal Performa

ARRAY_CONSTRAIN sendiri sangat ringan secara komputasi. Fungsi ini hanyalah pemotongan pasca-pemrosesan terhadap array yang sudah dievaluasi, bukan satu tahap kalkulasi tambahan. Berdasarkan dokumentasi Google Sheets (per Juli 2026), fungsi ini dikategorikan sebagai non-volatile, artinya tidak dihitung ulang setiap kali ada perubahan di sheet seperti halnya NOW() atau OFFSET(). Bagian yang berat adalah formula yang ada di dalamnya.

Namun perlu dicatat: membungkus ARRAYFORMULA besar yang memanggil SUMIFS lintas 50.000 baris di dalam ARRAY_CONSTRAIN tidak membuat SUMIFS menjadi lebih cepat. Itu hanya membatasi seberapa banyak hasil yang ditampilkan. Jika waktu kalkulasi ulang yang menjadi hambatan, solusinya ada pada formula di dalam, bukan pada batasnya.

Untuk beban kerja FP&A pada umumnya, yaitu 5.000 hingga 15.000 baris transaksi dengan 8 hingga 15 tab yang saling terhubung, kombinasi ini berjalan di bawah 3 detik saat kalkulasi ulang. Model dengan lebih dari 200.000 baris mulai menunjukkan waktu kalkulasi ulang 8 hingga 12 detik, terlepas dari apakah ARRAY_CONSTRAIN digunakan atau tidak.

ARRAY_CONSTRAIN vs. INDEX untuk Memotong Array

Keduanya bisa membatasi jumlah baris array. Perbedaannya ada pada perilaku di batas.

SkenarioARRAY_CONSTRAININDEX
Sumber memiliki lebih banyak baris dari batasMengembalikan N baris pertamaMengembalikan N baris pertama
Sumber memiliki lebih sedikit baris dari batasMengembalikan semua baris (tanpa error)Mengembalikan #REF!
Sumber kosongMengembalikan kosongMengembalikan #REF!
Kompleksitas sintaksLebih sederhanaLebih kompleks

Untuk sumber data dinamis yang jumlah barisnya bisa turun di bawah batas yang diharapkan, misalnya model runway di mana asumsi headcount berubah atau katalog SKU di mana produk sudah tidak aktif, ARRAY_CONSTRAIN lebih aman. INDEX lebih tepat digunakan ketika Anda memang ingin memastikan bahwa N baris harus ada, karena #REF! akan memunculkan celah data secara eksplisit alih-alih menyembunyikannya secara diam-diam.

Padanan di Excel

ARRAY_CONSTRAIN tidak ada di Excel. Padanannya sejak pembaruan dynamic array Microsoft 365 pada 2022 adalah TAKE():

=TAKE(SORT(FILTER(Pendapatan[Jumlah], Pendapatan[Periode]="Q2 2026"), 1, -1), 5)

TAKE menerima nilai negatif untuk mengambil dari akhir array, sesuatu yang tidak bisa dilakukan ARRAY_CONSTRAIN tanpa preprocessing SORT. Jika model Anda digunakan di Sheets sekaligus Excel, ini salah satu perbedaan yang perlu ditandai secara eksplisit. Kedua fungsi memiliki kegunaan serupa tapi tidak bisa saling menggantikan, dan versi Sheets sudah ada beberapa tahun lebih dulu dibanding Excel.

Kapan Fungsi Ini Benar-Benar Dibutuhkan

Kasus penggunaan paling bernilai yang sering ditemui:

Ringkasan board pack. Blok "10 Pelanggan Teratas berdasarkan Pendapatan" yang selalu tetap 10 baris meski data CRM memiliki 340 pelanggan. Blok ini dirujuk oleh template presentasi dan tidak boleh berubah ukurannya.

Tabel sensitivitas. ARRAYFORMULA yang menghitung IRR di 8 skenario leverage, dibatasi ke 8x1. Label skenario dikodekan secara tetap di kolom A dan blok formula harus cocok persis.

Tampilan periode bergulir. Tampilan arus kas 13 minggu yang selalu menampilkan tepat 13 kolom, terlepas dari berapa minggu aktual yang sudah ada di tab sumber.

Dalam setiap kasus di atas, ARRAY_CONSTRAIN melakukan satu pekerjaan saja: membuat formula dinamis menghasilkan ukuran output yang bisa diprediksi. Prediktabilitas itulah yang membuat bagian model lainnya bisa merujuknya dengan aman.

Pertanyaan Umum