Skip to Content

20 Formula DAX yang Menyelamatkan Dashboard Power BI (dan Kewarasan) Saya

Pernahkah Anda menatap kosong ke bar formula DAX di Power BI seperti sedang melihat bahasa alien? Tenang, Anda tidak sendiri. Saya juga pernah berada di posisi yang sama - terjaga hingga pukul 2 pagi, mencari-cari "cara menulis DAX" di Google, berharap dataset saya akan menjelaskan dirinya sendiri secara ajaib.

Tapi ada kabar baik: begitu Anda menguasai beberapa pola DAX yang powerful, Anda akan menyadari bahwa ini bukan sihir - hanya logika data dengan sedikit sentuhan khusus.

Saya bergelut dengan data, tak terhitung berapa kali formula DAX menyelamatkan proyek dan reputasi saya. Izinkan saya berbagi 20 formula DAX paling berharga yang tidak hanya menyelamatkan dashboard Power BI saya, tetapi juga menjaga kewarasan saya ketika deadline mendekat.

1. TOTALYTD - Karena Waktu Terus Berjalan

text

Total Penjualan YTD = TOTALYTD(SUM(Penjualan[Jumlah]), Kalender[Tanggal])

Cerita dari Lapangan: Masih teringat jelas ketika CEO perusahaan retail terbesar di Indonesia tiba-tiba meminta saya menunjukkan performa penjualan tahun berjalan dibandingkan target tahunan. Dengan satu formula TOTALYTD, saya bisa menampilkan data tersebut dalam hitungan detik, mengesankan semua orang di ruangan rapat.

Actionable Insight: 

Selalu siapkan terlebih dahulu perhitungan Year-to-Date untuk metrik utama bisnis Anda. Ini adalah pertanyaan yang hampir pasti akan diajukan oleh manajemen, dan dengan mempersiapkannya sebelumnya, Anda terlihat sangat profesional.

2. CALCULATE - Pisau Swiss DAX

text

Penjualan Region Timur = CALCULATE(SUM(Penjualan[Jumlah]), Region[Nama] = "Timur")

Cerita dari Lapangan: Saat bekerja dengan retailer multi-cabang, saya perlu mengisolasi performa toko di Indonesia Timur yang mengalami penurunan. Dengan CALCULATE, saya bisa dengan cepat menampilkan angka penjualan spesifik untuk region tersebut dan mengidentifikasi bahwa masalah sebenarnya adalah keterlambatan pengiriman, bukan penurunan permintaan.

Actionable Insight: 

Kuasai CALCULATE seperti Anda menguasai pernapasan. Ini adalah fungsi DAX paling serbaguna dan menjadi pondasi 70% formula kompleks lainnya. Latihan membuat 10 variasi CALCULATE berbeda untuk data Anda akan membuat pemahaman Anda tentang filter context menjadi solid.

3. FILTER - "Jika Ini, Maka Itu" untuk Tabel

text

Penjualan Nilai Tinggi = CALCULATE(SUM(Penjualan[Jumlah]), FILTER(Penjualan, Penjualan[Jumlah] > 1000000))

Contoh Konkret: Pada analisis e-commerce, saya menggunakan FILTER untuk mengisolasi transaksi bernilai tinggi (>Rp1 juta) dan menemukan pola bahwa 78% pembelian bernilai besar terjadi antara pukul 20:00-22:00, mengarah pada strategi flash sale malam yang sangat sukses.

Actionable Insight: 

Buat "katalog FILTER" untuk bisnis Anda - kumpulan kode FILTER yang siap pakai untuk segmentasi data yang sering Anda gunakan (pelanggan VIP, produk margin tinggi, transaksi bermasalah).

4. PREVIOUSMONTH - Karena Perbandingan adalah Kunci

text

Penjualan Bulan Lalu = CALCULATE(SUM(Penjualan[Jumlah]), PREVIOUSMONTH(Kalender[Tanggal]))

Cerita Nyata: Selama pandemi, fluktuasi penjualan sebuah apotek online yang saya konsultasikan sangat tinggi. Dengan PREVIOUSMONTH, kami membuat dashboard yang secara otomatis menampilkan perbandingan dengan bulan sebelumnya, membantu mengidentifikasi dengan cepat kategori produk mana yang tumbuh atau menurun drastis.

Actionable Insight: 

Kombinasikan PREVIOUSMONTH dengan visualisasi small multiples untuk membuat dashboard perbandingan yang powerful - tempatkan bulan ini dan bulan lalu berdampingan untuk setiap KPI utama.

5. SAMEPERIODLASTYEAR - Perbandingan YoY Tanpa Kerumitan

text

Penjualan Tahun Lalu = CALCULATE(SUM(Penjualan[Jumlah]), SAMEPERIODLASTYEAR(Kalender[Tanggal]))

Kisah dari Pengalaman: Ketika membantu brand fashion lokal menganalisis dampak kampanye Ramadhan, menggunakan SAMEPERIODLASTYEAR memungkinkan kami melihat bahwa meskipun penjualan selama Ramadhan meningkat 45%, pertumbuhan ini sebenarnya lebih rendah dibanding tahun lalu yang mencapai 60% - insight yang mengubah strategi promosi mereka.

Trik Praktis: 

Buat selalu versi YoY untuk metrik utama Anda, lalu buat visualisasi "% Perubahan" menggunakan:

text

Perubahan YoY % = DIVIDE([Penjualan] - [Penjualan Tahun Lalu], [Penjualan Tahun Lalu], 0)

6. DIVIDE - Penyelamat dari Pembagian dengan Nol

text

Margin Keuntungan = DIVIDE(Penjualan[Profit], Penjualan[Pendapatan], 0)

Cerita Nyata: Dashboard pengeluaran marketing sebuah startup fintech terus crash karena pembagian dengan nol saat menghitung ROI dari kampanye baru yang belum menghasilkan pendapatan. DIVIDE dengan parameter ketiga "0" menyelamatkan dashboard dan memungkinkan tracking kampanye baru tanpa error.

Actionable Insight: 

Audit formula DAX Anda yang mengandung pembagian dan ganti semua dengan DIVIDE untuk mencegah error. Parameter ketiga (fallback value) sebaiknya selalu diisi, biasanya dengan 0 atau BLANK().

7. RANKX - Karena Peringkat Penting

text

Peringkat Produk = RANKX(ALL(Produk[Nama]), SUM(Penjualan[Jumlah]), , DESC)

Pengalaman Pribadi: Saat mempresentasikan analisis saluran distribusi ke board of directors sebuah FMCG, mereka lebih tertarik pada "siapa 5 distributor teratas" daripada tabel panjang data. RANKX membantu saya menampilkan informasi ini dengan cepat, memfokuskan diskusi pada strategi nyata.

Actionable Insight: 

Buat visual "Top N & Others" menggunakan RANKX untuk menyederhanakan dataset besar. Ini membuat laporan Anda lebih tajam dan mudah dicerna:

text

Top 5 Flag = IF(RANKX(ALL(Produk), [Total Penjualan],,DESC) <= 5, Produk[Nama], "Lainnya")

8. RELATED - Hubungkan Tabel Tanpa VLOOKUP

text

Kota Pelanggan = RELATED(Kota[NamaKota])

Contoh Nyata: Membangun model data penjualan multi-level untuk perusahaan distribusi dengan hierarki wilayah yang kompleks. RELATED memungkinkan saya menarik informasi hierarki wilayah ke tabel transaksi tanpa duplikasi data, membuat model 60% lebih efisien.

Tips Praktis: 

Gunakan RELATED dalam calculated columns untuk "memperkaya" tabel fakta Anda dengan informasi deskriptif dari tabel dimensi, tetapi ingat bahwa ini meningkatkan ukuran model. Untuk kalkulasi dinamis, lebih baik gunakan RELATED dalam measures.

9. DATEDIFF - Ketika Waktu adalah Uang

text

Hari untuk Penyelesaian = DATEDIFF(Kesempatan[TanggalDibuat], Kesempatan[TanggalDitutup], DAY)

Kisah Nyata: Tim layanan pelanggan bank ternama kesulitan memahami mengapa resolusi tiket customer service mereka lambat. Dengan DATEDIFF, saya membuat visual distribusi waktu penyelesaian, mengungkap bahwa tiket yang dieskalasi ke departemen tertentu rata-rata tertahan 3x lebih lama.

Actionable Insight: 

Buat scatter plot yang membandingkan "waktu penyelesaian" vs "nilai transaksi" untuk mengidentifikasi apakah ada korelasi antara nilai pelanggan dan kecepatan layanan.

10. DATEADD - Pergeseran Periode Tanpa Pusing

text

Penjualan Kuartal Lalu = CALCULATE(SUM(Penjualan[Jumlah]), DATEADD(Kalender[Tanggal], -1, QUARTER))

Pengalaman Nyata: Ketika membantu retailer multiformat menganalisis dampak promosi musiman, DATEADD memungkinkan kami membandingkan periode yang sama persis tahun lalu, mengungkap bahwa promosi "Awal Bulan" lebih efektif daripada "Akhir Bulan" di quarter 3.

Praktik Terbaik: 

Untuk analisis seasonality, buat measures yang membandingkan dengan periode yang sama di masa lalu:

text

Q-o-Q Growth = DIVIDE([Current Quarter Sales] - [Previous Quarter Sales], [Previous Quarter Sales], 0)

11. CONCATENATEX - Selamat Tinggal Summary Membosankan

text

Daftar Produk = CONCATENATEX(VALUES(Produk[Nama]), Produk[Nama], ", ")

Contoh Kasus: Dashboard monitoring stok sebuah apotek menampilkan daftar obat yang hampir habis dalam format teks yang mudah dibaca, bukan tabel yang memakan tempat. CEO bisa langsung melihat "Paracetamol, Amoxicillin, Vitamin C" alih-alih scrolling tabel panjang.

Cara Kreatif Menggunakan: 

Buat "kalimat insight otomatis" yang membuat data Anda berbicara:

text

Insight Teks = "Top performer bulan ini adalah " & CONCATENATEX(TOPN(3, VALUES(Produk[Nama]), [Penjualan]), Produk[Nama], ", ", Produk[Nama], DESC)

12. ALLSELECTED - Persentase yang Cerdas

text

% dari Total (Terfilter) = DIVIDE(SUM(Penjualan[Jumlah]), CALCULATE(SUM(Penjualan[Jumlah]), ALLSELECTED(Produk)))

Pengalaman Nyata: Dashboard regional sebuah bank menunjukkan pencapaian target per cabang, tapi manajemen ingin tahu kontribusi relatif setiap cabang dalam region yang dipilih. ALLSELECTED membuat persentase kontribusi dinamis, selalu berjumlah 100% dalam konteks filter apapun.

Insight Praktis: 

Gunakan ALLSELECTED untuk membuat "total dinamis" yang beradaptasi dengan filter pengguna. Ini mencegah kebingungan ketika total tidak sesuai dengan yang diharapkan pengguna.

13. ISFILTERED - Berikan Visual Anda Kepribadian

text

Region Difilter? = IF(ISFILTERED(Region[Nama]), "Data Region Terfilter", "Semua Region")

Cerita dari Lapangan: Dashboard C-level sebuah perusahaan e-commerce sering disalahpahami ketika eksekutif lupa bahwa mereka telah menerapkan filter. Menambahkan indikator "Difilter/Tidak Difilter" dengan ISFILTERED mengurangi kesalahpahaman sebesar 80%.

Trik Cerdas: 

Buat "watermark" dinamis di dashboard Anda yang menampilkan filter aktif:

text

Filter Status = "Filter aktif: " & IF(ISFILTERED(Produk[Kategori]), "Kategori, ", "") & IF(ISFILTERED(Region[Nama]), "Region, ", "")

14. HASONEVALUE - Untuk Title Card yang Dinamis

text

Produk Terpilih = IF(HASONEVALUE(Produk[Nama]), VALUES(Produk[Nama]), "Beberapa Produk")

Contoh Aplikasi: Dashboard performa manajer cabang bank yang memperlihatkan KPI individual ketika satu cabang dipilih, tapi menampilkan ringkasan perbandingan ketika beberapa cabang dipilih. HASONEVALUE membuat transisi ini mulus.

Implementasi Cerdas: 

Kombinasikan dengan format kondisional untuk mengubah tampilan KPI berdasarkan jumlah item yang dipilih:

text

Card Title = IF(HASONEVALUE(Cabang[Nama]), "KPI untuk " & VALUES(Cabang[Nama]), "Perbandingan " & COUNTROWS(VALUES(Cabang[Nama])) & " Cabang")

15. SELECTEDVALUE - Ringkas dan Jelas

text

Region Terpilih = SELECTEDVALUE(Region[Nama], "Semua Region")

Kisah Nyata: Dashboard executive untuk jaringan retail dengan 500+ toko perlu adaptif tergantung toko mana yang dipilih. SELECTEDVALUE menyederhanakan conditional formatting dan judul dinamis, membuat dashboard langsung menampilkan nama toko yang dipilih tanpa logika kompleks.

Tips Implementasi: 

SELECTEDVALUE lebih ringkas daripada kombinasi HASONEVALUE+VALUES. Gunakan untuk membuat elemen dinamis di dashboard:

text

Pesan Selamat Datang = "Selamat datang di dashboard " & SELECTEDVALUE(Store[Nama], "Semua Toko")

16. ALL - Reset Filter dengan Elegansi

text

Total Penjualan (Abaikan Filter) = CALCULATE(SUM(Penjualan[Jumlah]), ALL(Region))

Contoh Konkret: Dashboard regional bank menampilkan pencapaian cabang dibandingkan dengan target, tapi juga perlu menampilkan pencapaian terhadap total nasional. ALL memungkinkan menghitung total nasional meskipun user memfilter region tertentu.

Trik Advanced: 

Gunakan ALL untuk membuat perbandingan "Part-to-Whole":

text

% dari Total Nasional = DIVIDE([Penjualan Region], CALCULATE([Penjualan Region], ALL(Region)), 0)

17. BLANK - Atasi Nilai Kosong dengan Elegan

text

Penanganan Null = IF(ISBLANK(Penjualan[Jumlah]), 0, Penjualan[Jumlah])

Pengalaman Pribadi: Dashboard inventory perusahaan manufaktur menampilkan "holes" ketika produk tidak terjual di hari tertentu. Menggunakan formula ISBLANK untuk mendeteksi dan mengatasi missing values membuat trend line menjadi mulus dan lebih mudah diinterpretasi.

Implementasi Cerdas: 

Buat visualisasi yang membedakan antara "nol nyata" vs "data tidak ada":

text

Status Data = IF(ISBLANK([Penjualan]), "Data Tidak Tersedia", IF([Penjualan] = 0, "Tidak Ada Penjualan", "Ada Penjualan"))

18. SWITCH - Ucapkan Selamat Tinggal pada IF Bertingkat

text

Segmen Kategori = SWITCH(TRUE(), Penjualan[Jumlah] > 1000000, "Premium", Penjualan[Jumlah] > 500000, "Menengah", "Standar")

Cerita dari Lapangan: Segmentasi pelanggan untuk program loyalitas sebuah department store membutuhkan 7 tingkatan berbeda. Awalnya saya menggunakan IF bertingkat yang rumit, tapi beralih ke SWITCH membuat formula 60% lebih ringkas dan jauh lebih mudah dimodifikasi.

Teknik Praktis: 

Gunakan SWITCH(TRUE(), ...) sebagai pengganti IF bertingkat. Ini membuat logika konditional Anda lebih bersih dan memudahkan pemeliharaan jangka panjang.

19. COUNTROWS - Sederhana tapi Powerful

text

Jumlah Pesanan = COUNTROWS(Penjualan)

Implementasi Konkret: Dashboard operasional sebuah fulfillment center e-commerce menggunakan COUNTROWS untuk tracking volume order real-time. Kombinasi dengan time intelligence functions memungkinkan perbandingan "volume hari ini vs kemarin pada jam yang sama" yang menjadi trigger otomatis untuk penambahan staf.

Teknik Lanjutan: 

Gunakan COUNTROWS dengan FILTER untuk menghitung berdasarkan kriteria kompleks:

text

Pesanan Bermasalah = COUNTROWS(FILTER(Pesanan, Pesanan[Status] = "Delayed" || Pesanan[ComplaintFlag] = TRUE()))

20. USERELATIONSHIP - Karena Satu Model Bisa Punya Banyak Perspektif

text

Pendapatan berdasarkan Tanggal Pengiriman = CALCULATE(SUM(Penjualan[Pendapatan]), USERELATIONSHIP(Penjualan[TanggalKirim], Kalender[Tanggal]))

Pengalaman Nyata: Model data e-commerce dengan multiple date tables (order date, ship date, delivery date) awalnya membingungkan pengguna. USERELATIONSHIP memungkinkan kami membuat satu dashboard yang bisa diswitch antar perspektif tanggal, memberikan insight komprehensif tentang operasional.

Implementasi Praktis: 

Saat model data Anda memiliki multiple date perspectives, buat measure untuk setiap perspektif dan visualisasi toggle yang memungkinkan pengguna beralih antar perspektif tanggal.

Final Thoughts

DAX bukan sekadar tentang syntax. Ini tentang bagaimana Anda berpikir tentang data - filter, relasi, konteks, dan logika. Begitu Anda memahami itu, Anda berhenti sekadar menulis formula dan mulai bercerita melalui data.

Jadi, baik Anda sedang membangun laporan untuk rapat direksi atau sekadar ingin mengesankan tim, 20 formula DAX ini seperti memiliki kode rahasia untuk Power BI.

Cobalah beberapa. Rusak mereka. Bangun kembali. Dan yang terpenting - jadikan mereka milik Anda sendiri.

Karena, seperti yang selalu saya katakan kepada analis : "Data tanpa DAX hanyalah angka. Data dengan DAX adalah cerita yang mengubah bisnis."


Glosarium DAX untuk Pemula

1. DAX (Data Analysis Expressions)

Bahasa formula dan kueri yang digunakan dalam Power BI, Power Pivot, dan SQL Server Analysis Services untuk membuat kalkulasi dan analisis data.

2. Measure

Kalkulasi yang dievaluasi secara dinamis berdasarkan konteks filter report. Berbeda dengan calculated column yang dihitung sekali dan disimpan dalam model.

3. Calculated Column

Kolom yang dibuat menggunakan formula DAX dan hasilnya dihitung sekali saat data diperbarui, kemudian disimpan dalam model data.

4. Filter Context

Lingkungan penyaringan di mana formula DAX dievaluasi, ditentukan oleh filter yang diterapkan pada visual atau report.

5. Row Context

Digunakan saat DAX mengevaluasi baris demi baris dalam ekspresi iterasi seperti SUMX atau kalkulasi pada calculated column.

6. Time Intelligence Functions

Kelompok fungsi DAX yang memungkinkan analisis data berdasarkan periode waktu, seperti TOTALYTD, SAMEPERIODLASTYEAR, dll.

7. Iterator Functions

Fungsi yang beroperasi pada tabel dan mengevaluasi ekspresi untuk setiap baris, seperti SUMX, AVERAGEX, MINX, dll.

8. Table Constructor

Metode untuk membuat tabel sementara dalam DAX menggunakan kurung kurawal, misalnya: { 1, 2, 3 } atau { ("Red"), ("Blue"), ("Green") }.

9. Relationship

Koneksi antara dua tabel dalam model data, biasanya menggunakan kolom kunci. Digunakan untuk menyebarkan filter antar tabel.

10. EVALUATE

Kata kunci yang diperlukan untuk memulai query DAX, diikuti oleh ekspresi tabel yang akan menghasilkan tabel hasil.


Citations:

  1. https://www.linkedin.com/pulse/22-powerful-dax-formulas-functions-beginners-deep-bi-samson
  2. https://learn.microsoft.com/en-us/power-bi/transform-model/desktop-quickstart-learn-dax-basics
  3. https://learn.microsoft.com/id-id/dax/dax-queries
  4. https://learn.microsoft.com/en-us/dax/dax-glossary
  5. https://learn.microsoft.com/id-id/dax/dax-glossary
  6. https://datasciencedojo.com/blog/data-analysis-expressions/
  7. https://learn.microsoft.com/en-us/dax/dax-queries
  8. https://www.kyvosinsights.com/glossary/dax-queries/
  9. https://www.beehexa.com/blog/25-power-bi-dax-formulas-n-functions/
  10. https://testbook.com/interview/power-bi-dax-interview-questions
  11. https://www.datacamp.com/cheat-sheet/dax-cheat-sheet
  12. https://learn.microsoft.com/id-id/power-bi/transform-model/dax-query-view
  13. https://blog.enterprisedna.co/using-ranking-dax-measures-to-extract-unique-insights-in-power-bi/
  14. https://learn.microsoft.com/en-us/dax/dax-function-reference
  15. https://www.youtube.com/watch?v=9fb1k3eS_u4
  16. https://stoneridgesoftware.com/power-bi-basics-turn-data-into-actionable-insights/
  17. https://www.youtube.com/watch?v=vm3NlQaEG0Y
  18. https://www.youtube.com/watch?v=fIZiBc7ev18
  19. https://www.upfrontoperations.com/blog/advanced-analytics-with-power-bi
  20. https://www.pythian.com/blog/technical-track/top-10-power-bi-dax-functions-for-efficient-data-analysis
  21. https://kelas.work/blogs/catat-formula-syntax-dan-variabel-pada-data-analysis-expressions
  22. https://radacad.com/basics-of-dax-expression-in-power-bi
  23. https://learn.microsoft.com/id-id/dax/dax-syntax-reference
  24. https://learn.microsoft.com/en-us/dax/dax-overview
  25. https://www.linkedin.com/pulse/dax-beginners-guide-understanding-data-analysis-expressions-asit-das-ekqmc
  26. https://institutocpe.edu.uy/wp-content/uploads/2020/03/DAX-Functions-List-Quick-Reference.pdf
  27. https://powerbi.id/glossary-powerbi/
  28. https://www.beehexa.com/blog/25-power-bi-dax-formulas-n-functions/
  29. https://en.wikipedia.org/wiki/Data_Analysis_Expressions
  30. https://www.linkedin.com/pulse/22-powerful-dax-formulas-functions-beginners-deep-bi-samson
  31. https://powerbi.id/tag/glossary/
  32. https://gcomsolutions.co.uk/common-dax-patterns/
  33. https://www.youtube.com/watch?v=PQ5lALdFHCU
  34. https://learn.microsoft.com/en-us/power-bi/transform-model/dax-query-view
  35. https://multishoring.com/blog/unlocking-dax-functions-in-power-bi/
  36. https://assets.datacamp.com/production/repositories/6027/datasets/35197e987758e15f94c6fc336e348f0bb54e71dc/DAX%20Cheatsheet.pdf
  37. https://dax.guide
  38. https://learn.microsoft.com/en-us/dax/
  39. https://databear.com/common-power-bi-dax-measures/

Pengalamanku Menganalisis 1 Miliar Baris Data
Rahasia Menjadi Data Scientist Kelas Dunia yang Tak Pernah Diajarkan di Kampus