Mengenal fungsi COUNT di power BI

Perjalanan Memahami “Counting” di Power BI: Lebih dari Sekadar Menghitung

Pernahkah Anda duduk di depan layar Power BI, menatap deretan tabel yang panjangnya ribuan baris, lalu tiba-tiba bos Anda bertanya, “Berapa banyak pelanggan kita yang aktif bulan lalu?” Pertanyaan itu terdengar sangat sederhana, bukan? Tinggal hitung saja. Tapi, bagi kita yang bergelut dengan data setiap hari, kita tahu bahwa kata “hitung” punya banyak wajah.

Dulu, saat saya baru memulai perjalanan di dunia Power BI, saya pikir fungsi COUNT adalah segalanya. Saya menggunakannya untuk apa saja. Sampai akhirnya, saya menyadari hasil laporan saya seringkali selisih sedikit dengan laporan rekan tim yang lain. Ternyata, memilih fungsi COUNT yang salah bisa berujung pada keputusan bisnis yang keliru. DAX (Data Analysis Expressions) menyediakan “keluarga” fungsi penghitung yang sangat spesifik, dan memahami perbedaan kecil di antara mereka adalah kunci untuk naik level dari seorang pemula menjadi praktisi yang handal.

Di artikel ini, saya ingin mengajak Anda ngobrol santai tapi mendalam—layaknya kita sedang ngopi sore sambil membedah file .pbix—mengenai seluk-beluk fungsi penghitung di Power BI. Kita akan bahas kapan harus memakai yang satu, dan kapan harus menghindari yang lain.

1. COUNT: Si Klasik yang Sering Disalahpahami

Fungsi COUNT adalah pondasi dasar. Tugasnya sederhana: menghitung jumlah sel dalam sebuah kolom yang berisi angka. Ingat, kuncinya ada pada kata “angka”.

Seringkali, rekan-rekan baru mencoba menggunakan COUNT pada kolom yang berisi teks atau tanggal, dan mereka bingung kenapa hasilnya terkadang tidak sesuai ekspektasi. Fungsi COUNT di DAX secara spesifik dirancang untuk kolom angka, tanggal, dan boolean (True/False). Jika Anda mencoba menghitung kolom yang berisi data teks murni, Power BI mungkin akan memberikan hasil, tapi secara teknis, ada fungsi lain yang lebih tepat untuk itu.

Satu hal yang perlu dicatat: COUNT tidak akan menghitung BLANK (sel kosong). Jika dalam 100 baris ada 5 sel yang benar-benar kosong, maka COUNT akan mengembalikan angka 95. Ini sangat penting saat kita berhadapan dengan data transaksi yang mungkin memiliki nilai null di bagian diskon atau catatan tambahan.

“Satu tips kecil dari saya: Jika Anda ingin menghitung jumlah transaksi dan kolom ID Transaksi Anda adalah angka, COUNT sangat aman digunakan. Tapi jika ID-nya mengandung huruf, hati-hati.”

2. COUNTA: Teman Setia untuk Segala Jenis Data

Nah, jika COUNT agak pemilih soal tipe data, COUNTA jauh lebih fleksibel. Huruf ‘A’ di belakangnya bisa kita anggap sebagai “All” atau “Anything”. Fungsi ini akan menghitung kolom apa pun, baik itu teks, angka, maupun tanggal.

Sama seperti saudaranya, COUNTA juga mengabaikan baris yang kosong (Blank). Dalam praktik sehari-hari, saya lebih sering menggunakan COUNTA saat saya bekerja dengan kolom kategori, seperti Nama Produk, Wilayah, atau Status Pesanan. Gunakan COUNTA jika Anda tidak yakin apakah tipe data di kolom tersebut akan berubah di masa depan (misal, dari angka menjadi teks karena ada perubahan sistem di database asal).

3. COUNTROWS: Standard Emas bagi Praktisi

Jika Anda bertanya pada saya fungsi mana yang paling sering saya pakai di proyek nyata, jawabannya adalah COUNTROWS. Mengapa? Karena fungsi ini tidak peduli pada kolom tertentu; dia menghitung keseluruhan baris dalam sebuah tabel atau hasil dari sebuah filter.

Ada keindahan tersendiri dalam COUNTROWS('Sales'). Fungsi ini jauh lebih eksplisit. COUNTROWS tetap menghitung baris meskipun semua kolom di baris tersebut berisi nilai BLANK. Ini sangat krusial jika tujuan Anda adalah mengetahui jumlah entri di tabel, bukan jumlah nilai di satu kolom tertentu.

Dari sisi performa, banyak yang berargumen bahwa COUNTROWS sedikit lebih cepat karena engine Power BI (VertiPaq) hanya perlu melihat metadata tabel untuk mengetahui jumlah baris, tanpa harus memindai nilai di setiap sel dalam satu kolom.

“Biasakan menggunakan COUNTROWS jika niat Anda adalah menghitung entitas (seperti jumlah transaksi, jumlah karyawan, atau jumlah log), bukan menghitung keberadaan nilai di kolom spesifik.”

4. COUNTBLANK: Mencari yang Hilang

Fungsi ini sering terlupakan, padahal kegunaannya sangat besar untuk urusan data cleaning atau audit. COUNTBLANK hanya menghitung sel yang kosong.

Bayangkan Anda sedang mengelola data pendaftaran pelanggan. Anda ingin tahu berapa banyak pelanggan yang belum mengisi nomor telepon mereka. Alih-alih membuat logika yang rumit, Anda cukup menggunakan COUNTBLANK(Pelanggan[NomorTelepon]). COUNTBLANK adalah alat detektif terbaik untuk menemukan lubang dalam data Anda sebelum data tersebut disajikan ke level manajemen.

5. Pertempuran Sengit: DISTINCTCOUNT vs. DISTINCTCOUNTNOBLANK

Di sinilah keadaan mulai menjadi menarik. Dalam bisnis, kita hampir selalu butuh menghitung nilai yang unik. “Berapa jumlah pelanggan unik yang berbelanja?” bukan “Berapa kali transaksi terjadi?”.

DISTINCTCOUNT akan menghitung nilai yang unik dalam sebuah kolom. Namun, ada satu perilaku unik dari fungsi ini: dia menghitung BLANK sebagai salah satu nilai unik. Jadi, jika Anda punya daftar ID Pelanggan yang terdiri dari 10 ID berbeda dan beberapa sel kosong, DISTINCTCOUNT akan menghasilkan angka 11.

Di sinilah DISTINCTCOUNTNOBLANK masuk sebagai pahlawan. Seperti namanya, dia melakukan hal yang sama tapi dengan tegas mengabaikan nilai kosong. Dalam banyak skenario pelaporan keuangan atau operasional, DISTINCTCOUNTNOBLANK seringkali memberikan hasil yang lebih ‘jujur’ secara bisnis karena biasanya kita tidak ingin menghitung ‘kekosongan’ sebagai sebuah entitas unik.

Contoh Kasus:
Jika Anda sedang menghitung jumlah toko yang melakukan penjualan hari ini, dan ada beberapa baris penjualan tanpa ID Toko (karena kesalahan input), DISTINCTCOUNT akan menghitung baris “Tanpa ID” itu sebagai satu toko. Jika itu bukan yang Anda mau, gunakanlah versi NOBLANK.

6. Membedah Iterasi dengan COUNTX dan COUNTAX

Sekarang, mari kita naik satu tingkat ke fungsi yang memiliki akhiran “X”. Fungsi-fungsi ini disebut sebagai Iterator Functions. Jika fungsi COUNT biasa langsung melihat satu kolom, fungsi X ini bekerja dengan cara yang berbeda: mereka menyisir tabel baris demi baris, mengevaluasi sebuah ekspresi, lalu baru menghitung hasilnya.

COUNTX( tabel, ekspresi )

Kenapa kita butuh ini? Bayangkan Anda punya tabel penjualan, tapi Anda hanya ingin menghitung transaksi yang nilainya di atas Rp 1.000.000. Anda bisa saja memfilter tabelnya dulu, lalu menghitungnya. Dengan COUNTX, Anda bisa melakukan itu dalam satu langkah cerdas.

Contoh skenario:
Jumlah Transaksi Besar = COUNTX( FILTER('Penjualan', 'Penjualan'[Total] > 1000000), 'Penjualan'[ID] )

Fungsi X memberikan fleksibilitas luar biasa karena memungkinkan kita menyisipkan logika perhitungan sebelum angka tersebut dijumlahkan. Namun, perlu diingat, karena ia bekerja baris demi baris, penggunaan yang berlebihan pada tabel dengan jutaan baris bisa sedikit membebani performa jika ekspresi di dalamnya terlalu kompleks.

7. Studi Kasus Nyata: Kasus Toko “Sejahtera Bersama”

Mari kita terapkan ilmu ini dalam skenario dunia nyata. Bayangkan kita sedang membantu Toko “Sejahtera Bersama” menganalisis data mereka. Kita punya tabel Penjualan dengan kolom: OrderID, CustomerID, ProductCategory, dan DiscountAmount.

  • Kebutuhan 1: Mengetahui total seluruh transaksi yang masuk.

    Solusi: COUNTROWS('Penjualan'). Mengapa? Karena setiap baris adalah satu transaksi, terlepas dari apa isinya.

  • Kebutuhan 2: Mengetahui berapa banyak pelanggan berbeda yang belanja bulan ini.

    Solusi: DISTINCTCOUNTNOBLANK('Penjualan'[CustomerID]). Kita ingin nilai unik dan tidak ingin menghitung jika ada baris yang ID pelanggannya kosong.

  • Kebutuhan 3: Mengetahui berapa banyak transaksi yang diberikan diskon.

    Solusi: COUNT('Penjualan'[DiscountAmount]). Karena fungsi COUNT tidak menghitung Blank, maka transaksi yang kolom diskonnya kosong (tidak ada diskon) otomatis tidak akan terhitung.

  • Kebutuhan 4: Mengetahui jumlah transaksi kategori “Elektronik” yang nominalnya lebih dari 5 juta.

    Solusi: COUNTX( FILTER('Penjualan', 'Penjualan'[Category] = "Elektronik" && 'Penjualan'[Amount] > 5000000), 'Penjualan'[OrderID] ).

Dari studi kasus ini, kita bisa melihat bahwa pemilihan fungsi sangat bergantung pada “pertanyaan bisnis” yang sedang kita coba jawab. Tidak ada fungsi yang benar-benar terbaik, yang ada hanyalah fungsi yang paling tepat untuk konteks tersebut.

8. Mengapa Konteks Filter Itu Penting?

Satu hal yang sering membuat pusing adalah ketika angka hasil COUNT kita berubah-ubah saat kita mengeklik slicer di laporan. Ini adalah perilaku standar Power BI yang disebut Filter Context.

Saat Anda menulis COUNTROWS('Penjualan'), Power BI tidak selalu menghitung total seluruh baris di database. Ia hanya menghitung baris yang “terlihat” oleh filter yang sedang aktif. Jika Anda memilih “Tahun 2023” di slicer, maka fungsi COUNT tersebut hanya akan menghitung data tahun 2023.

Jika Anda ingin menghitung total keseluruhan tanpa peduli pada filter yang dipilih (misal untuk menghitung persentase kontribusi), Anda perlu mengombinasikan fungsi COUNT dengan CALCULATE dan ALL.

Total Semua Transaksi = CALCULATE(COUNTROWS('Penjualan'), ALL('Penjualan'))

Insight ini seringkali menjadi momen “Aha!” bagi banyak orang. Memahami interaksi antara fungsi penghitung dan konteks filter adalah langkah terbesar untuk menguasai Power BI.

9. Kesalahan Umum yang Harus Dihindari

Dalam perjalanan saya, saya sering melihat (dan kadang melakukan sendiri) beberapa kesalahan ini:

  1. Menggunakan COUNT pada kolom teks yang memiliki nilai kosong tapi berisi spasi: Power BI menganggap spasi sebagai karakter, bukan Blank. Jadi COUNT akan tetap menghitungnya. Pastikan data Anda bersih dari trailing spaces.
  2. Terlalu sering menggunakan DISTINCTCOUNT: Fungsi ini adalah salah satu yang paling berat secara komputasi. Jika tabel Anda sangat besar (puluhan juta baris), gunakanlah dengan bijak atau cari alternatif cara pemodelan data yang lebih efisien.
  3. Lupa perbedaan antara COUNT dan COUNTA: Meskipun seringkali hasilnya sama, membiasakan diri menggunakan fungsi yang tepat sesuai tipe data akan membuat kode DAX Anda lebih mudah dibaca oleh rekan tim lain (clean code).

10. Checklist: Kapan Menggunakan Fungsi Apa?

Untuk memudahkan Anda saat bekerja nanti, saya buatkan ringkasan kecil yang bisa Anda simpan sebagai referensi cepat:

  • Gunakan COUNTROWS: Jika ingin menghitung jumlah baris/total record dalam sebuah tabel. (Pilihan paling aman dan cepat).
  • Gunakan COUNT: Jika ingin menghitung berapa banyak nilai angka/tanggal yang ada di sebuah kolom (mengabaikan sel kosong).
  • Gunakan COUNTA: Jika ingin menghitung nilai apa pun (teks/angka) dalam sebuah kolom (mengabaikan sel kosong).
  • Gunakan DISTINCTCOUNTNOBLANK: Jika ingin menghitung jumlah entitas unik (seperti jumlah orang, jumlah produk) tanpa mengikutkan baris kosong.
  • Gunakan COUNTBLANK: Jika ingin melakukan audit data untuk mencari berapa banyak data yang bolong/hilang.
  • Gunakan COUNTX: Jika Anda perlu memfilter data terlebih dahulu atau melakukan logika perhitungan tertentu sebelum menghitung barisnya.

Menutup Diskusi Kita

Menghitung di Power BI memang terlihat sepele di permukaan, tapi seperti yang kita bahas tadi, ada kedalaman yang luar biasa di baliknya. Setiap fungsi COUNT punya kepribadiannya masing-masing. Ada yang pemilih soal tipe data, ada yang sangat fleksibel, dan ada yang sangat teliti dalam melihat kekosongan.

Saran saya untuk Anda yang sedang belajar: Jangan hanya menghafal rumusnya, tapi pahamilah perilaku fungsinya terhadap data Anda. Cobalah untuk membuat satu measure dengan COUNT dan satu lagi dengan DISTINCTCOUNT pada kolom yang sama, lalu bandingkan hasilnya di sebuah card visual. Lihat bagaimana angka-angka itu berubah saat Anda mulai bermain dengan filter.

Dunia data adalah tentang ketepatan cerita yang kita sampaikan. Dengan memilih fungsi penghitung yang benar, Anda memastikan bahwa cerita yang Anda sampaikan melalui dashboard Power BI adalah cerita yang akurat dan dapat dipercaya oleh para pemangku kepentingan.

Teruslah bereksplorasi, jangan takut salah, dan yang paling penting, nikmati proses menemukan wawasan di balik tumpukan baris data tersebut. Sampai jumpa di pembahasan DAX selanjutnya!

Leave a Reply