Cheat Sheet Power BI
Terakhir diperbarui
Ukuran, kolom, dan tabel
Ukuran dihitung untuk setiap sel visual; kolom terhitung dihitung sekali per baris lalu disimpan.
| Fungsinya | DAX |
|---|---|
| Membuat ukuran | Total Sales = SUM ( Sales[Amount] ) |
| Membuat kolom terhitung (satu nilai per baris) | Line Total = Sales[Quantity] * Sales[Unit Price] |
| Membuat tabel terhitung | Top Customers = TOPN ( 10, Customer, [Total Sales] ) |
| Merujuk kolom: nama tabel, lalu nama kolom dalam kurung siku | Sales[Amount] |
| Memberi tanda kutip pada nama tabel yang berisi spasi atau berupa kata yang dicadangkan | 'Date'[Date] |
| Merujuk ukuran: cukup kurung siku | [Total Sales] |
| Memakai ukuran di dalam ukuran lain | Average Price = DIVIDE ( [Total Sales], [Total Units] ) |
Fungsi agregasi
Masing-masing merangkum satu kolom dalam konteks filter saat ini.
| Fungsinya | DAX |
|---|---|
| Menjumlahkan kolom | SUM ( Sales[Amount] ) |
| Rata-rata kolom | AVERAGE ( Sales[Amount] ) |
| Nilai terkecil | MIN ( Sales[Order Date] ) |
| Nilai terbesar | MAX ( Sales[Order Date] ) |
| Menghitung baris tabel | COUNTROWS ( Sales ) |
| Menghitung nilai kolom yang tidak kosong | COUNT ( Sales[Amount] ) |
| Menghitung nilai unik | DISTINCTCOUNT ( Sales[Customer Key] ) |
| Membagi dengan aman: hasilnya kosong, bukan error, saat penyebutnya 0 | DIVIDE ( [Total Sales], [Total Units] ) |
| Membagi dengan nilai yang ditampilkan saat penyebutnya 0 | DIVIDE ( [Profit], [Total Sales], 0 ) |
Iterator (fungsi X)
Fungsi ini menelusuri tabel baris demi baris, menghitung ekspresi untuk setiap baris, lalu mengagregasi hasilnya.
| Fungsinya | DAX |
|---|---|
| Mengalikan per baris, lalu menjumlahkan | SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Rata-rata dari hasil per baris | AVERAGEX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Hasil per baris yang terbesar | MAXX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Rata-rata ukuran per pelanggan | AVERAGEX ( VALUES ( Customer[Customer Key] ), [Total Sales] ) |
| Memakai kolom dari tabel yang berelasi dalam ekspresi | SUMX ( Sales, Sales[Quantity] * RELATED ( Product[Unit Cost] ) ) |
| Menghitung baris yang memenuhi syarat | COUNTROWS ( FILTER ( Sales, Sales[Quantity] >= 3 ) ) |
| Memberi peringkat setiap produk berdasarkan ukuran | RANKX ( ALL ( Product[Product] ), [Total Sales] ) |
| Peringkat tanpa celah setelah nilai seri (1, 1, 2) | RANKX ( ALL ( Product[Product] ), [Total Sales], , DESC, DENSE ) |
| Menggabungkan nilai menjadi satu teks | CONCATENATEX ( VALUES ( Product[Category] ), Product[Category], ", " ) |
CALCULATE dan fungsi filter
CALCULATE menghitung ekspresi dengan filter yang diubah. Filter pada kolom yang sama menggantikan filter lama; filter pada kolom berbeda digabung dengan AND.
| Fungsinya | DAX |
|---|---|
| Filter satu nilai | CALCULATE ( [Total Sales], Product[Category] = "Bikes" ) |
| Filter daftar nilai | CALCULATE ( [Total Sales], Product[Color] IN { "Red", "Blue" } ) |
| Dua filter (AND) | CALCULATE ( [Total Sales], Product[Color] = "Red", Store[Country] = "Spain" ) |
| OR pada dua kolom | CALCULATE ( [Total Sales], FILTER ( ALL ( Product[Color], Product[Brand] ), Product[Color] = "Red" || Product[Brand] = "Contoso" ) ) |
| Filter berdasarkan ukuran | CALCULATE ( [Total Sales], FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| Mempertahankan filter yang ada dan mengambil irisannya | CALCULATE ( [Total Sales], KEEPFILTERS ( Product[Color] IN { "Red", "Blue" } ) ) |
| Menghapus filter pada satu kolom | CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) |
| Menghapus semua filter pada tabel | CALCULATE ( [Total Sales], ALL ( Product ) ) |
| Menghapus semua filter pada tabel kecuali beberapa kolom | CALCULATE ( [Total Sales], ALLEXCEPT ( Store, Store[Country] ) ) |
| Mempertahankan pilihan slicer, mengabaikan baris visual itu sendiri | CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) |
| Memakai relasi yang tidak aktif | CALCULATE ( [Total Sales], USERELATIONSHIP ( Sales[Ship Date], 'Date'[Date] ) ) |
| Membuat filter mengalir dua arah untuk satu ukuran | CALCULATE ( COUNTROWS ( Customer ), CROSSFILTER ( Sales[Customer Key], Customer[Customer Key], BOTH ) ) |
| Filter berdasarkan tabel tanpa relasi | CALCULATE ( [Total Sales], TREATAS ( VALUES ( Budget[Category] ), Product[Category] ) ) |
Kecerdasan waktu
Fungsi ini butuh tabel tanggal: satu baris per hari, tanpa celah, dan ditandai sebagai tabel tanggal.
| Fungsinya | DAX |
|---|---|
| Sejak awal tahun | TOTALYTD ( [Total Sales], 'Date'[Date] ) |
| Sejak awal tahun, tahun fiskal berakhir 30 Juni | TOTALYTD ( [Total Sales], 'Date'[Date], "6/30" ) |
| Sejak awal tahun di dalam CALCULATE | CALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) ) |
| Sejak awal kuartal | TOTALQTD ( [Total Sales], 'Date'[Date] ) |
| Sejak awal bulan | TOTALMTD ( [Total Sales], 'Date'[Date] ) |
| Periode yang sama tahun lalu | CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) |
| Menggeser tanggal sebesar satu interval (di sini mundur satu bulan) | CALCULATE ( [Total Sales], DATEADD ( 'Date'[Date], -1, MONTH ) ) |
| Seluruh bulan sebelumnya | CALCULATE ( [Total Sales], PREVIOUSMONTH ( 'Date'[Date] ) ) |
| Seluruh periode satu tahun sebelumnya | CALCULATE ( [Total Sales], PARALLELPERIOD ( 'Date'[Date], -1, YEAR ) ) |
| 12 bulan terakhir sampai tanggal terakhir yang terlihat | CALCULATE ( [Total Sales], DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -12, MONTH ) ) |
| Rentang tanggal tetap | CALCULATE ( [Total Sales], DATESBETWEEN ( 'Date'[Date], DATE ( 2025, 1, 1 ), DATE ( 2025, 3, 31 ) ) ) |
Pola ukuran yang umum
Salin, lalu ganti nama tabel dan kolom sesuai modelmu.
| Fungsinya | DAX |
|---|---|
| Persentase dari semua kategori | Category % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) ) |
| Persentase dari yang tersisa setelah slicer | Visible % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) ) |
| Pertumbuhan dari tahun ke tahun | YoY % = VAR LastYear = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN DIVIDE ( [Total Sales] - LastYear, LastYear ) |
| Total berjalan sepanjang waktu | Running Total = CALCULATE ( [Total Sales], FILTER ( ALL ( 'Date'[Date] ), 'Date'[Date] <= MAX ( 'Date'[Date] ) ) ) |
| Rata-rata bergerak 7 hari (per hari yang ada penjualannya) | Sales 7 Day Avg = AVERAGEX ( DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -7, DAY ), [Total Sales] ) |
| Menampilkan nilai hanya untuk 5 teratas | Top 5 Sales = IF ( RANKX ( ALLSELECTED ( Product[Product] ), [Total Sales] ) <= 5, [Total Sales] ) |
| Menghitung pelanggan di atas batas tertentu | Big Customers = COUNTROWS ( FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| Membuat total sama dengan jumlah baris-barisnya | Bonus Total = SUMX ( VALUES ( Product[Category] ), [Bonus] ) |
| Menampilkan nilai hanya di satu level matriks | Category Rank = IF ( ISINSCOPE ( Product[Category] ), RANKX ( ALL ( Product[Category] ), [Total Sales] ) ) |
| Saldo akhir: tanggal terakhir yang punya nilai | Closing Units = CALCULATE ( SUM ( Inventory[Units] ), LASTNONBLANK ( 'Date'[Date], CALCULATE ( SUM ( Inventory[Units] ) ) ) ) |
Fungsi logika dan informasi
Untuk kondisi, dan untuk mengetahui isi konteks filter.
| Fungsinya | DAX |
|---|---|
| Satu kondisi | IF ( [Total Sales] > 1000, "High", "Low" ) |
| Beberapa nilai dari satu ekspresi | SWITCH ( Store[Country], "Spain", "ES", "Portugal", "PT", "Other" ) |
| Rentang, diperiksa dari atas ke bawah | SWITCH ( TRUE (), [Total Sales] >= 10000, "A", [Total Sales] >= 1000, "B", "C" ) |
| AND dan OR | IF ( Sales[Quantity] > 2 && Sales[Amount] > 50, "Big", "Small" ) |
| Apakah nilainya kosong? | ISBLANK ( [Total Sales] ) |
| Nilai pertama yang tidak kosong | COALESCE ( [Total Sales], 0 ) |
| Apakah filter menyisakan tepat satu nilai? | HASONEVALUE ( Product[Category] ) |
| Satu nilai itu, atau nilai bawaan | SELECTEDVALUE ( Product[Category], "All categories" ) |
| Apakah baris visual ini dikelompokkan menurut kolom tersebut? | ISINSCOPE ( Product[Category] ) |
| Mengembalikan nilai kosong | BLANK () |
Fungsi teks
Operator & menggabungkan teks; FORMAT mengubah angka atau tanggal menjadi teks.
| Fungsinya | DAX |
|---|---|
| Menggabungkan teks | Customer[First Name] & " " & Customer[Last Name] |
| Memformat angka | FORMAT ( [Total Sales], "#,0.00" ) |
| Memformat tanggal | FORMAT ( 'Date'[Date], "mmm yyyy" ) |
| Karakter pertama | LEFT ( Product[Code], 3 ) |
| Karakter dari posisi tertentu | MID ( Product[Code], 4, 2 ) |
| Panjang teks | LEN ( Product[Name] ) |
| Huruf kapital | UPPER ( Store[City] ) |
| Menghapus spasi berlebih | TRIM ( Customer[Name] ) |
| Mengganti teks | SUBSTITUTE ( Customer[Phone], " ", "" ) |
| Posisi teks, tanpa membedakan huruf besar dan kecil (0 jika tidak ada) | SEARCH ( "pro", Product[Name], 1, 0 ) |
Fungsi tanggal
Di baliknya, tanggal adalah angka, jadi kamu bisa menguranginya untuk mendapatkan jumlah hari.
| Fungsinya | DAX |
|---|---|
| Tanggal hari ini | TODAY () |
| Membuat tanggal | DATE ( 2025, 12, 31 ) |
| Tahun dari tanggal | YEAR ( 'Date'[Date] ) |
| Nomor bulan | MONTH ( 'Date'[Date] ) |
| Hari dalam minggu, Senin sebagai 1 | WEEKDAY ( 'Date'[Date], 2 ) |
| Nomor minggu, minggu dimulai hari Senin | WEEKNUM ( 'Date'[Date], 2 ) |
| Hari terakhir bulan | EOMONTH ( 'Date'[Date], 0 ) |
| Hari yang sama sebulan sebelumnya | EDATE ( 'Date'[Date], -1 ) |
| Jumlah hari antara dua tanggal | DATEDIFF ( Sales[Order Date], Sales[Ship Date], DAY ) |
| Tabel tanggal dari tanggal tetap | CALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) ) |
| Tabel tanggal dari tanggal di model | CALENDARAUTO () |
Relasi dan pencarian nilai
RELATED mengikuti relasi dari sisi banyak ke sisi satu.
| Fungsinya | DAX |
|---|---|
| Nilai dari sisi satu (di kolom pada tabel Sales) | RELATED ( Product[Category] ) |
| Baris sisi banyak untuk baris saat ini (di kolom pada tabel Customer) | COUNTROWS ( RELATEDTABLE ( Sales ) ) |
| Mencari nilai tanpa relasi | LOOKUPVALUE ( Product[Price], Product[SKU], Sales[SKU] ) |
| Jalur induk dan anak (untuk hierarki dan keamanan tingkat baris) | PATH ( Employee[Employee ID], Employee[Manager ID] ) |
| Pengguna yang sedang masuk, untuk keamanan tingkat baris dinamis | USERPRINCIPALNAME () |
Fungsi tabel
Fungsi ini mengembalikan tabel: pakai di tabel terhitung, di dalam CALCULATE, atau di iterator.
| Fungsinya | DAX |
|---|---|
| Nilai unik dalam filter saat ini | VALUES ( Product[Category] ) |
| Baris yang memenuhi syarat | FILTER ( Product, Product[Price] > 100 ) |
| N baris teratas berdasarkan ukuran | TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) |
| Mengelompokkan menurut kolom dan menambahkan ukuran | SUMMARIZECOLUMNS ( Product[Category], "Sales", [Total Sales] ) |
| Menambahkan kolom ke tabel | ADDCOLUMNS ( VALUES ( Product[Category] ), "Sales", [Total Sales] ) |
| Memilih dan mengganti nama kolom | SELECTCOLUMNS ( Customer, "Name", Customer[Name], "City", Customer[City] ) |
| Daftar angka | GENERATESERIES ( 1, 10, 1 ) |
| Semua kombinasi dua tabel | CROSSJOIN ( VALUES ( 'Date'[Year] ), VALUES ( Product[Category] ) ) |
| Menumpuk dua tabel dengan kolom yang sama | UNION ( 'Sales 2024', 'Sales 2025' ) |
Variabel
VAR memberi nama pada satu langkah dan menghitungnya sekali; RETURN memberikan hasilnya.
| Fungsinya | DAX |
|---|---|
| Satu variabel | Margin % = VAR Revenue = [Total Sales] RETURN DIVIDE ( Revenue - [Total Cost], Revenue ) |
| Beberapa variabel | Sales vs LY = VAR CY = [Total Sales] VAR PY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN CY - PY |
| Tabel dalam variabel | Top 5 Total = VAR Top5 = TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) RETURN CALCULATE ( [Total Sales], Top5 ) |
Langkah Power Query (M)
Power Query membentuk data sebelum dimuat. Ini rumus M di balik tombol yang paling sering dipakai.
| Fungsinya | M |
|---|---|
| Menyimpan baris yang cocok | Table.SelectRows(Source, each [Status] = "Paid") |
| Menghapus kolom | Table.RemoveColumns(Source, {"Notes", "Temp"}) |
| Mengatur tipe data kolom | Table.TransformColumnTypes(Source, {{"Amount", type number}, {"Date", type date}}) |
| Mengganti nama kolom | Table.RenameColumns(Source, {{"amt", "Amount"}}) |
| Menambahkan kolom | Table.AddColumn(Source, "Total", each [Quantity] * [Price], type number) |
| Menggabungkan (merge) dua query | Table.NestedJoin(Sales, {"ProductID"}, Products, {"ProductID"}, "Product", JoinKind.LeftOuter) |
| Menumpuk (append) query | Table.Combine({Sales2024, Sales2025}) |
| Mengubah kolom menjadi baris (unpivot) | Table.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount") |
| Mengelompokkan dan mengagregasi | Table.Group(Source, {"Category"}, {{"Sales", each List.Sum([Amount]), type number}}) |
| Mengganti error dengan nilai | Table.ReplaceErrorValues(Source, {{"Amount", 0}}) |
Cheat sheet Power BI ini merangkum DAX yang paling sering kamu tulis dalam satu halaman: agregasi, iterator X, CALCULATE dan fungsi yang mengubah filter, kecerdasan waktu, fungsi teks dan tanggal, serta pola ukuran (measure) yang bisa kamu salin, seperti persentase dari total, pertumbuhan dari tahun ke tahun, dan total berjalan.
Contohnya memakai model penjualan dengan tabel Sales, Product, Customer, dan 'Date'; ganti namanya sesuai modelmu. Semua DAX di sini sudah diurai oleh mesin di balik kursus Power BI Coddy, tempat kamu bisa menulisnya di ruang kerja Power BI langsung di browser lalu memeriksanya.
FAQ cheat sheet Power BI
Apakah cheat sheet Power BI ini gratis?
Ya. Baca di sini atau simpan sebagai bookmark; tidak perlu daftar.
Apa bedanya ukuran dan kolom terhitung?
Kolom terhitung dihitung sekali per baris saat refresh lalu disimpan, jadi kamu bisa memotong data dengannya lewat slicer. Ukuran dihitung untuk setiap sel visual, dengan filter sel itu, dan tidak menyimpan apa pun. Total dan rasio sebaiknya dibuat sebagai ukuran.
Apa fungsi CALCULATE?
CALCULATE menghitung ekspresi dengan filter yang diubah: menambahkan, mengganti, atau menghapus filter, lalu menghitung hasilnya. Sebagian besar DAX di luar total sederhana adalah CALCULATE dengan argumen filter yang tepat.
Kenapa memakai DIVIDE, bukan operator /?
DIVIDE mengembalikan nilai kosong (atau nilai pilihanmu) saat penyebutnya nol atau kosong. Operator / justru mengembalikan tak hingga atau nilai error, yang kemudian muncul di visual.Apakah aku perlu tabel tanggal untuk kecerdasan waktu?
TOTALYTD dan SAMEPERIODLASTYEAR butuh tabel dengan satu baris per hari, tanpa celah dan mencakup tahun penuh, yang berelasi dengan tabel fakta dan ditandai sebagai tabel tanggal.Apakah DAX ini berjalan di Power Pivot Excel dan Analysis Services?
Bahasa DAX-nya sama, jadi hampir semuanya juga berjalan di sana. Beberapa fungsi yang lebih baru hadir di Power BI lebih dulu.
Di mana aku bisa berlatih DAX?
Di kursus Power BI Coddy: setiap pelajaran memberimu ruang kerja Power BI di browser dan memeriksa ukuranmu pada data pelajaran dan salinan tersembunyinya.