Ringkasan DAX

Data Analysis Expressions (DAX) adalah bahasa ekspresi rumus yang digunakan dalam Analysis Services, Power BI, dan Power Pivot di Excel. Rumus DAX mencakup fungsi, operator, dan nilai untuk melakukan perhitungan dan kueri tingkat lanjut pada data dalam tabel dan kolom terkait dalam model data tabular.

Artikel ini hanya menyediakan pengantar dasar untuk konsep terpenting di DAX. Ini menjelaskan DAX karena berlaku untuk semua produk yang menggunakannya. Beberapa fungsionalitas mungkin tidak berlaku untuk produk atau kasus penggunaan tertentu. Lihat dokumentasi produk Anda yang menjelaskan implementasi khusus DAX.

Penghitungan

Rumus DAX digunakan dalam pengukuran, kolom terhitung, tabel terhitung, dan keamanan tingkat baris.

Tindakan

Pengukuran adalah rumus perhitungan dinamis di mana hasil berubah tergantung pada konteks. Pengukuran digunakan dalam pelaporan yang mendukung menggabungkan dan memfilter data model dengan menggunakan beberapa atribut seperti laporan Power BI atau Excel PivotTable atau PivotChart. Pengukuran dibuat dengan menggunakan bilah rumus DAX di perancang model.

Rumus dalam ukuran dapat menggunakan fungsi agregasi standar yang dibuat secara otomatis dengan menggunakan fitur Autosum, seperti COUNT atau SUM, atau Anda bisa menentukan rumus Anda sendiri dengan menggunakan bilah rumus DAX. Ukuran bernama dapat diteruskan sebagai argumen ke langkah-langkah lain.

Saat Anda menentukan rumus untuk pengukuran di bilah rumus, fitur TipsAlat memperlihatkan pratinjau tentang apa hasilnya untuk total dalam konteks saat ini, tetapi jika tidak, hasilnya tidak segera keluaran di mana saja. Alasan Anda tidak dapat melihat hasil (difilter) dari perhitungan segera adalah karena hasil pengukuran tidak dapat ditentukan tanpa konteks. Untuk mengevaluasi ukuran memerlukan aplikasi klien pelaporan yang dapat menyediakan konteks yang diperlukan untuk mengambil data yang relevan dengan setiap sel lalu mengevaluasi ekspresi untuk setiap sel. Klien tersebut mungkin merupakan Excel PivotTable atau PivotChart, laporan Power BI, atau ekspresi tabel dalam kueri DAX di SQL Server Management Studio (SSMS).

Terlepas dari klien, kueri terpisah dijalankan untuk setiap sel dalam hasil. Artinya, setiap kombinasi header baris dan kolom dalam PivotTable, atau setiap pilihan pemotong dan filter dalam laporan Power BI, menghasilkan subset data yang berbeda di mana pengukuran dihitung. Misalnya, menggunakan rumus pengukuran yang sangat sederhana ini:

Total Sales = SUM([Sales Amount])

Saat pengguna menempatkan pengukuran TotalSales dalam laporan, lalu menempatkan kolom Kategori Produk dari tabel Produk ke dalam Filter, jumlah Jumlah Penjualan dihitung dan ditampilkan untuk setiap kategori produk.

Tidak seperti kolom terhitung, sintaks untuk pengukuran menyertakan nama pengukuran sebelum rumus. Dalam contoh yang baru saja disediakan, nama Total Penjualan muncul sebelum rumus. Setelah Anda membuat ukuran, nama dan definisinya muncul dalam daftar Bidang aplikasi klien pelaporan, dan tergantung pada perspektif dan peran tersedia untuk semua pengguna model.

Untuk mempelajari selengkapnya, lihat:
Ukuran dalam Power BI Desktop
Pengukuran dalam Analysis Services
Pengukuran di Power Pivot

Kolom terhitung

Kolom terhitung adalah kolom yang Anda tambahkan ke tabel yang sudah ada (di perancang model) lalu buat rumus DAX yang menentukan nilai kolom. Saat kolom terhitung berisi rumus DAX yang valid, nilai dihitung untuk setiap baris segera setelah rumus dimasukkan. Nilai kemudian disimpan dalam model data dalam memori. Misalnya, dalam tabel Tanggal, saat rumus dimasukkan ke dalam bilah rumus:

= [Calendar Year] & " Q" & [Calendar Quarter]

Nilai untuk setiap baris dalam tabel dihitung dengan mengambil nilai dari kolom Tahun Kalender (dalam tabel Tanggal yang sama), menambahkan spasi dan huruf kapital Q, lalu menambahkan nilai dari kolom Kuartal Kalender (dalam tabel Tanggal yang sama). Hasil untuk setiap baris dalam kolom terhitung dihitung segera dan muncul, misalnya, sebagai Q1 2017. Nilai kolom hanya dihitung ulang jika tabel atau tabel terkait diproses (refresh) atau model dibongkar dari memori lalu dimuat ulang, seperti saat menutup dan membuka kembali file Power BI Desktop.

Untuk mempelajari selengkapnya, lihat:
Kolom terhitung di Power BI Desktop
Kolom terhitung di Analysis Services
Kolom Terhitung di Power Pivot.

Tabel terhitung

Tabel terhitung adalah objek komputasi, berdasarkan ekspresi rumus, berasal dari semua atau sebagian tabel lain dalam model yang sama. Alih-alih mengkueri dan memuat nilai ke dalam kolom tabel baru Anda dari sumber data, rumus DAX menentukan nilai tabel.

Tabel terhitung dapat membantu dalam dimensi pemutaran peran. Contohnya adalah tabel Tanggal, sebagai OrderDate, ShipDate, atau DueDate, tergantung pada hubungan kunci asing. Dengan membuat tabel terhitung untuk ShipDate secara eksplisit, Anda mendapatkan tabel mandiri yang tersedia untuk kueri, sepenuhnya dapat dioperasikan seperti tabel lainnya. Tabel terhitung juga berguna saat mengonfigurasi set baris yang difilter, atau subset atau superset kolom dari tabel lain yang sudah ada. Ini memungkinkan Anda untuk menjaga tabel asli tetap utuh saat membuat variasi tabel tersebut untuk mendukung skenario tertentu.

Tabel terhitung mendukung hubungan dengan tabel lain. Kolom dalam tabel terhitung Anda memiliki tipe data, pemformatan, dan bisa termasuk dalam kategori data. Tabel terhitung dapat diberi nama, dan dimunculkan atau disembunyikan sama seperti tabel lainnya. Tabel terhitung dihitung ulang jika salah satu tabel yang ditarik datanya disegarkan atau diperbarui.

Untuk mempelajari selengkapnya, lihat:
Tabel terhitung di Power BI Desktop
Tabel terhitung di Analysis Services.

Keamanan tingkat baris

Dengan keamanan tingkat baris, rumus DAX harus mengevaluasi ke kondisi Boolean TRUE/FALSE, menentukan baris mana yang dapat dikembalikan oleh hasil kueri oleh anggota peran tertentu. Misalnya, untuk anggota peran Penjualan, tabel Pelanggan dengan rumus DAX berikut:

= Customers[Country] = "USA"

Anggota peran Penjualan hanya akan dapat melihat data untuk pelanggan di AS, dan agregat, seperti SUM hanya dikembalikan untuk pelanggan di AS. Keamanan tingkat baris tidak tersedia di Power Pivot di Excel.

Saat menentukan keamanan tingkat baris dengan menggunakan rumus DAX, Anda membuat kumpulan baris yang diizinkan. Ini tidak menolak akses ke baris lain; sebaliknya, mereka tidak dikembalikan sebagai bagian dari set baris yang diizinkan. Peran lain dapat memungkinkan akses ke baris yang dikecualikan oleh rumus DAX. Jika pengguna adalah anggota peran lain, dan keamanan tingkat baris peran tersebut memungkinkan akses ke kumpulan baris tertentu, pengguna dapat melihat data untuk baris tersebut.

Rumus keamanan tingkat baris berlaku untuk baris yang ditentukan serta baris terkait. Ketika tabel memiliki beberapa hubungan, filter menerapkan keamanan untuk hubungan yang aktif. Rumus keamanan tingkat baris akan bersinggungan dengan rumus lain yang ditentukan untuk tabel terkait.

Untuk mempelajari selengkapnya, lihat:
Keamanan tingkat baris (RLS) dengan Power BI
Peran dalam Analysis Services

Kueri

Kueri DAX dapat dibuat dan dijalankan di SQL Server Management Studio (SSMS) dan alat sumber terbuka seperti DAX Studio (daxstudio.org). Tidak seperti rumus penghitungan DAX, yang hanya dapat dibuat dalam model data tabular, kueri DAX juga dapat dijalankan terhadap model Analysis Services Multidimensional. Kueri DAX sering kali lebih mudah ditulis dan lebih efisien daripada kueri Ekspresi Data Multidmensional (MDX).

Kueri DAX adalah pernyataan, mirip dengan pernyataan SELECT di T-SQL. Jenis kueri DAX yang paling mendasar adalah pernyataan evaluasi . Contohnya,

EVALUATE
 ( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC

Mengembalikan dalam Hasil tabel yang hanya mencantumkan produk tersebut dengan Brankas tyStockLevel kurang dari 200, dalam urutan naik menurut EnglishProductName.

Anda bisa membuat pengukuran sebagai bagian dari kueri. Pengukuran hanya ada selama durasi kueri. Untuk mempelajari selengkapnya, lihat Kueri DAX.

Rumus

Rumus DAX sangat penting untuk membuat perhitungan dalam kolom dan pengukuran terhitung, dan mengamankan data Anda dengan menggunakan keamanan tingkat baris. Untuk membuat rumus untuk kolom dan pengukuran terhitung, gunakan bilah rumus di sepanjang bagian atas jendela perancang model atau Editor DAX. Untuk membuat rumus untuk keamanan tingkat baris, gunakan kotak dialog Manajer Peran atau Kelola peran. Informasi di bagian ini dimaksudkan untuk membuat Anda mulai memahami dasar-dasar rumus DAX.

Dasar-dasar rumus

Rumus DAX bisa sangat sederhana atau cukup kompleks. Tabel berikut ini memperlihatkan beberapa contoh rumus sederhana yang bisa digunakan dalam kolom terhitung.

Rumus Devinisi
= TODAY() Menyisipkan tanggal hari ini di setiap baris kolom terhitung.
= 3 Menyisipkan nilai 3 di setiap baris kolom terhitung.
= [Column1] + [Column2] Menambahkan nilai dalam baris [Column1] dan [Column2] yang sama dan menempatkan hasilnya di kolom terhitung dari baris yang sama.

Apakah rumus yang Anda buat sederhana atau kompleks, Anda bisa menggunakan langkah-langkah berikut saat membuat rumus:

  1. Setiap rumus harus dimulai dengan tanda sama dengan (=).

  2. Anda dapat mengetik atau memilih nama fungsi, atau mengetik ekspresi.

  3. Mulai ketik beberapa huruf pertama fungsi atau nama yang Anda inginkan, dan LengkapiOtomatis menampilkan daftar fungsi, tabel, dan kolom yang tersedia. Tekan TAB untuk menambahkan item dari daftar LengkapiOtomatis ke rumus.

    Anda juga dapat mengklik tombol Fx untuk menampilkan daftar fungsi yang tersedia. Untuk memilih fungsi dari daftar dropdown, gunakan tombol panah untuk menyoroti item, dan klik OK untuk menambahkan fungsi ke rumus.

  4. Berikan argumen ke fungsi dengan memilihnya dari daftar dropdown tabel dan kolom yang mungkin, atau dengan mengetikkan nilai.

  5. Periksa kesalahan sintaks: pastikan bahwa semua tanda kurung ditutup dan kolom, tabel, dan nilai direferensikan dengan benar.

  6. Tekan ENTER untuk menerima rumus.

Catatan

Dalam kolom terhitung, segera setelah Anda memasukkan rumus dan rumus divalidasi, kolom diisi dengan nilai. Dalam ukuran, menekan ENTER menyimpan definisi pengukuran dengan tabel. Jika rumus tidak valid, kesalahan akan ditampilkan.

Dalam contoh ini, mari kita lihat rumus dalam ukuran bernama Hari dalam Kuartal Saat Ini:

Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))

Ukuran ini digunakan untuk membuat rasio perbandingan antara periode yang tidak lengkap dan periode sebelumnya. Rumus harus memperhitungkan proporsi periode yang telah berlalu, dan membandingkannya dengan proporsi yang sama pada periode sebelumnya. Dalam hal ini, [Days Current Quarter to Date]/[Days in Current Quarter] memberikan proporsi yang berlalu pada periode saat ini.

Rumus ini berisi elemen berikut:

Elemen rumus Deskripsi
Days in Current Quarter Nama ukuran.
= Tanda sama dengan (=) memulai rumus.
COUNTROWS COUNTROWS menghitung jumlah baris dalam tabel Tanggal
() Kurung buka dan tutup menentukan argumen.
DATESBETWEEN Fungsi DATESBETWEEN mengembalikan tanggal antara tanggal terakhir untuk setiap nilai di kolom Tanggal dalam tabel Tanggal.
'Date' Menentukan tabel Tanggal. Tabel berada dalam tanda kutip tunggal.
[Date] Menentukan kolom Tanggal dalam tabel Tanggal. Kolom berada dalam tanda kurung siku.
,
STARTOFQUARTER Fungsi STARTOFQUARTER mengembalikan tanggal awal kuartal.
LASTDATE Fungsi LASTDATE mengembalikan tanggal terakhir kuartal.
'Date' Menentukan tabel Tanggal.
[Date] Menentukan kolom Tanggal dalam tabel Tanggal.
,
ENDOFQUARTER Fungsi ENDOFQUARTER
'Date' Menentukan tabel Tanggal.
[Date] Menentukan kolom Tanggal dalam tabel Tanggal.

Menggunakan rumus LengkapiOtomatis

LengkapiOtomatis membantu Anda memasukkan sintaks rumus yang valid dengan memberi Anda opsi untuk setiap elemen dalam rumus.

  • Anda bisa menggunakan rumus LengkapiOtomatis di tengah rumus yang ada dengan fungsi berlapis. Teks segera sebelum titik penyisipan digunakan untuk menampilkan nilai dalam daftar drop-down, dan semua teks setelah titik penyisipan tetap tidak berubah.

  • Pelengkapan Otomatis tidak menambahkan kurung tutup fungsi atau secara otomatis cocok dengan tanda kurung. Anda harus memastikan bahwa setiap fungsi secara sintis benar atau Anda tidak dapat menyimpan atau menggunakan rumus.

Menggunakan beberapa fungsi dalam rumus

Anda dapat menumpuk fungsi, yang berarti Anda menggunakan hasil dari satu fungsi sebagai argumen fungsi lain. Anda dapat menumpuk hingga 64 tingkat fungsi dalam kolom terhitung. Namun, berlapis dapat menyulitkan pembuatan atau pemecahan masalah rumus. Banyak fungsi dirancang untuk digunakan hanya sebagai fungsi berlapis. Fungsi-fungsi ini mengembalikan tabel, yang tidak dapat disimpan secara langsung sebagai hasilnya; harus disediakan sebagai input ke fungsi tabel. Misalnya, fungsi SUMX, AVERAGEX, dan MINX semuanya memerlukan tabel sebagai argumen pertama.

Fungsi

Fungsi adalah rumus bernama dalam ekspresi. Sebagian besar fungsi memiliki argumen yang diperlukan dan opsional, juga dikenal sebagai parameter, sebagai input. Saat fungsi dijalankan, nilai dikembalikan. DAX menyertakan fungsi yang dapat Anda gunakan untuk melakukan penghitungan menggunakan tanggal dan waktu, membuat nilai kondisional, bekerja dengan string, melakukan pencarian berdasarkan hubungan, dan kemampuan untuk mengulangi tabel untuk melakukan perhitungan rekursif. Jika Anda terbiasa dengan rumus Excel, banyak fungsi ini akan tampak sangat mirip; namun, rumus DAX berbeda dengan cara penting berikut:

  • Fungsi DAX selalu mereferensikan kolom lengkap atau tabel. Jika Anda hanya ingin menggunakan nilai tertentu dari tabel atau kolom, Anda bisa menambahkan filter ke rumus.

  • Jika Anda perlu menyesuaikan perhitungan berdasarkan baris demi baris, DAX menyediakan fungsi yang memungkinkan Anda menggunakan nilai baris saat ini atau nilai terkait sebagai semacam parameter, untuk melakukan penghitungan yang bervariasi menurut konteks. Untuk memahami cara kerja fungsi ini, lihat Konteks dalam artikel ini.

  • DAX menyertakan banyak fungsi yang mengembalikan tabel, bukan nilai. Tabel tidak ditampilkan dalam klien pelaporan, tetapi digunakan untuk memberikan input ke fungsi lain. Misalnya, Anda dapat mengambil tabel lalu menghitung nilai yang berbeda di dalamnya, atau menghitung jumlah dinamis di seluruh tabel atau kolom yang difilter.

  • Fungsi DAX mencakup berbagai fungsi kecerdasan waktu. Fungsi-fungsi ini memungkinkan Anda menentukan atau memilih rentang tanggal, dan melakukan perhitungan dinamis berdasarkan tanggal atau rentang ini. Misalnya, Anda dapat membandingkan jumlah di seluruh periode paralel.

Fungsi agregasi

Fungsi agregasi menghitung nilai (skalar) seperti hitungan, jumlah, rata-rata, minimum, atau maksimum untuk semua baris dalam kolom atau tabel seperti yang ditentukan oleh ekspresi. Untuk mempelajari selengkapnya, lihat Fungsi agregasi.

Fungsi tanggal dan waktu

Fungsi tanggal dan waktu di DAX mirip dengan fungsi tanggal dan waktu di Microsoft Excel. Namun, fungsi DAX didasarkan pada jenis data tanggalwaktu mulai 1 Maret 1900. Untuk mempelajari selengkapnya, lihat Fungsi tanggal dan waktu.

Filter functions

Fungsi filter di DAX mengembalikan jenis data tertentu, mencari nilai dalam dongeng terkait, dan memfilter menurut nilai terkait. Fungsi pencarian berfungsi dengan menggunakan tabel dan hubungan, seperti database. Fungsi pemfilteran memungkinkan Anda memanipulasi konteks data untuk membuat perhitungan dinamis. Untuk mempelajari selengkapnya, lihat Memfilter fungsi.

Fungsi keuangan

Fungsi keuangan dalam DAX digunakan dalam rumus yang melakukan perhitungan keuangan, seperti nilai bersih saat ini dan tingkat pengembalian. Fungsi-fungsi ini mirip dengan fungsi keuangan yang digunakan dalam Microsoft Excel. Untuk mempelajari lebih lanjut, lihat Fungsi keuangan.

Information functions

Fungsi informasi melihat sel atau baris yang disediakan sebagai argumen dan memberi tahu Anda apakah nilai cocok dengan jenis yang diharapkan. Misalnya, fungsi ISERROR mengembalikan TRUE jika nilai yang Anda referensikan berisi kesalahan. Untuk mempelajari selengkapnya, lihat Fungsi informasi.

Fungsi logika

Fungsi logika bertindak berdasarkan ekspresi untuk mengembalikan informasi tentang nilai dalam ekspresi. Misalnya, fungsi TRUE memungkinkan Anda mengetahui apakah ekspresi yang Anda evaluasi mengembalikan nilai TRUE. Untuk mempelajari selengkapnya, lihat Fungsi logis.

Fungsi matematika dan trigonometri

Fungsi matematika di DAX sangat mirip dengan fungsi matematika dan trigonometri Excel. Beberapa perbedaan kecil ada dalam jenis data numerik yang digunakan oleh fungsi DAX. Untuk mempelajari selengkapnya, lihat Fungsi matematika dan trig.

Fungsi lainnya

Fungsi-fungsi ini melakukan tindakan unik yang tidak dapat didefinisikan oleh salah satu kategori yang dimiliki oleh sebagian besar fungsi lain. Untuk mempelajari selengkapnya, lihat Fungsi lain.

Fungsi hubungan

Fungsi hubungan di DAX memungkinkan Anda mengembalikan nilai dari tabel terkait lainnya, menentukan hubungan tertentu untuk digunakan dalam ekspresi, dan menentukan arah pemfilteran silang. Untuk mempelajari selengkapnya, lihat Fungsi hubungan.

Fungsi statistik

Fungsi statistik menghitung nilai yang terkait dengan distribusi statistik dan probabilitas, seperti simpang siur standar dan jumlah permutasi. Untuk mempelajari selengkapnya, lihat Fungsi statistik.

Fungsi teks

Fungsi teks di DAX sangat mirip dengan rekan-rekan mereka di Excel. Anda dapat mengembalikan bagian dari string, mencari teks dalam string, atau menggabungkan nilai string. DAX juga menyediakan fungsi untuk mengontrol format untuk tanggal, waktu, dan angka. Untuk mempelajari selengkapnya, lihat Fungsi teks.

Fungsi inteligensi waktu

Fungsi inteligensi waktu yang disediakan dalam DAX memungkinkan Anda membuat perhitungan yang menggunakan pengetahuan bawaan tentang kalender dan tanggal. Dengan menggunakan rentang waktu dan tanggal dalam kombinasi dengan agregasi atau perhitungan, Anda dapat membangun perbandingan yang bermakna di seluruh periode waktu yang sebanding untuk penjualan, inventaris, dan sebagainya. Untuk mempelajari selengkapnya, lihat Fungsi kecerdasan waktu (DAX).

Fungsi manipulasi tabel

Fungsi-fungsi ini mengembalikan tabel atau memanipulasi tabel yang ada. Misalnya, dengan menggunakan ADDCOLUMNS, Anda dapat menambahkan kolom terhitung ke tabel tertentu, atau Anda bisa mengembalikan tabel ringkasan melalui sekumpulan grup dengan fungsi SUMMARIZECOLUMNS. Untuk mempelajari selengkapnya, lihat Fungsi manipulasi tabel.

Variabel

Anda dapat membuat variabel dalam ekspresi dengan menggunakan VAR. VAR secara teknis bukan fungsi, ini adalah kata kunci untuk menyimpan hasil ekspresi sebagai variabel bernama. Variabel tersebut kemudian dapat diteruskan sebagai argumen ke ekspresi pengukuran lainnya. Contohnya:

VAR
    TotalQty = SUM ( Sales[Quantity] )

Return

    IF (
        TotalQty > 1000,
        TotalQty * 0.95,
        TotalQty * 1.25
        )

Dalam contoh ini, TotalQty dapat diteruskan sebagai variabel bernama ke ekspresi lain. Variabel dapat dari jenis data skalar apa pun, termasuk tabel. Menggunakan variabel dalam rumus DAX Anda bisa sangat kuat.

Jenis data

Anda dapat mengimpor data ke dalam model dari berbagai sumber data yang mungkin mendukung jenis data yang berbeda. Saat Anda mengimpor data ke dalam model, data dikonversi ke salah satu jenis data model tabular. Saat data model digunakan dalam perhitungan, data kemudian dikonversi ke jenis data DAX selama durasi dan output perhitungan. Saat Anda membuat rumus DAX, istilah yang digunakan dalam rumus akan secara otomatis menentukan tipe data nilai yang dikembalikan.

DAX mendukung jenis data berikut:

Jenis data dalam model Jenis data di DAX Deskripsi
Bilangan Bulat Nilai bilangan bulat 64 bit (delapan byte) 1, 2 Angka yang tidak memiliki tempat desimal. Bilangan bulat dapat berupa angka positif atau negatif, tetapi harus berupa bilangan bulat antara -9.223.372.036.854.775.808 (-2^63) dan 9.223.372.036.854.775.807 (2^63-1).
Bilangan Desimal Angka riil 64 bit (delapan byte) 1, 2 Bilangan riil adalah angka yang dapat memiliki tempat desimal. Bilangan riil mencakup berbagai nilai:

Nilai negatif dari -1,79E +308 hingga -2,23E -308

Nol

Nilai positif dari 2,23E -308 hingga 1,79E + 308

Namun, jumlah digit signifikan dibatasi hingga 17 digit desimal.
Boolean Boolean Nilai Benar atau Salah.
SMS String String data karakter Unicode. Bisa berupa string, angka, atau tanggal yang diwakili dalam format teks.
Date Tanggal/Waktu Tanggal dan waktu dalam representasi tanggal-waktu yang diterima.

Tanggal yang valid adalah semua tanggal setelah 1 Maret 1900.
Mata Uang Mata Uang Jenis data mata uang memungkinkan nilai antara -922.337.203.685.477,5808 hingga 922.337.203.685.477,5807 dengan empat digit desimal presisi tetap.
T/A Blank Kosong adalah jenis data di DAX yang mewakili dan menggantikan SQL null. Anda dapat membuat kosong dengan menggunakan fungsi BLANK, dan menguji kosong dengan menggunakan fungsi logis, ISBLANK.

Model data tabular juga menyertakan jenis data Tabel sebagai input atau output ke banyak fungsi DAX. Misalnya, fungsi FILTER mengambil tabel sebagai input dan menghasilkan tabel lain yang hanya berisi baris yang memenuhi kondisi filter. Dengan menggabungkan fungsi tabel dengan fungsi agregasi, Anda dapat melakukan perhitungan kompleks melalui himpunan data yang ditentukan secara dinamis.

Meskipun jenis data biasanya diatur secara otomatis, penting untuk memahami jenis data dan cara penerapannya, khususnya, ke rumus DAX. Kesalahan dalam rumus atau hasil yang tidak terduga, misalnya, sering disebabkan oleh penggunaan operator tertentu yang tidak dapat digunakan dengan tipe data yang ditentukan dalam argumen. Misalnya, rumus, = 1 & 2, mengembalikan hasil string 12. Rumus, = "1" + "2", namun, mengembalikan hasil bilangan bulat 3.

Konteks

Konteks adalah konsep penting untuk dipahami saat membuat rumus DAX. Kontekslah yang memungkinkan Anda melakukan analisis dinamis, karena hasil perubahan rumus untuk mencerminkan pemilihan baris atau sel saat ini dan juga data terkait. Memahami konteks dan menggunakan konteks secara efektif sangat penting untuk membangun analisis berkinerja tinggi, dinamis, dan untuk memecahkan masalah dalam rumus.

Rumus dalam model tabular dapat dievaluasi dalam konteks yang berbeda, tergantung pada elemen desain lainnya:

  • Filter diterapkan dalam PivotTable atau laporan
  • Filter yang ditentukan dalam rumus
  • Hubungan yang ditentukan dengan menggunakan fungsi khusus dalam rumus

Ada berbagai jenis konteks: konteks baris, konteks kueri, dan konteks filter.

Konteks baris

Konteks baris dapat dianggap sebagai "baris saat ini". Jika Anda membuat rumus dalam kolom terhitung, konteks baris untuk rumus tersebut menyertakan nilai dari semua kolom di baris saat ini. Jika tabel terkait dengan tabel lain, konten juga menyertakan semua nilai dari tabel lain yang terkait dengan baris saat ini.

Misalnya, Anda membuat kolom terhitung, = [Freight] + [Tax], yang menambahkan nilai bersama-sama dari dua kolom, Angkutan dan Pajak, dari tabel yang sama. Rumus ini secara otomatis hanya mendapatkan nilai dari baris saat ini di kolom yang ditentukan.

Konteks baris juga mengikuti hubungan apa pun yang telah ditentukan di antara tabel, termasuk hubungan yang ditentukan dalam kolom terhitung dengan menggunakan rumus DAX, untuk menentukan baris mana dalam tabel terkait yang terkait dengan baris saat ini.

Misalnya, rumus berikut menggunakan fungsi RELATED untuk mengambil nilai pajak dari tabel terkait, berdasarkan wilayah tempat pesanan dikirim. Nilai pajak ditentukan dengan menggunakan nilai untuk wilayah dalam tabel saat ini, mencari wilayah dalam tabel terkait, lalu mendapatkan tarif pajak untuk wilayah tersebut dari tabel terkait.

= [Freight] + RELATED('Region'[TaxRate])  

Rumus ini mendapatkan tarif pajak untuk wilayah saat ini dari tabel Wilayah dan menambahkannya ke nilai kolom Angkutan. Dalam rumus DAX, Anda tidak perlu mengetahui atau menentukan hubungan tertentu yang menyambungkan tabel.

Konteks beberapa baris

DAX menyertakan fungsi yang mengurutkan perhitungan atas tabel. Fungsi-fungsi ini dapat memiliki beberapa baris saat ini, masing-masing dengan konteks barisnya sendiri. Intinya, fungsi-fungsi ini memungkinkan Anda membuat rumus yang melakukan operasi secara rekursif melalui perulangan dalam dan luar.

Misalnya, model Anda berisi tabel Produk dan tabel Penjualan . Pengguna mungkin ingin melalui seluruh tabel penjualan, yang penuh dengan transaksi yang melibatkan beberapa produk, dan menemukan jumlah terbesar yang dipesan untuk setiap produk dalam satu transaksi.

Dengan DAX Anda dapat membuat satu rumus yang mengembalikan nilai yang benar, dan hasilnya diperbarui secara otomatis setiap kali pengguna menambahkan data ke tabel.

= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])  

Untuk contoh terperinci dari rumus ini, lihat SEBELUMNYA.

Untuk meringkas, fungsi EARLIER menyimpan konteks baris dari operasi yang mendahului operasi saat ini. Setiap saat, fungsi disimpan dalam memori dua set konteks: satu set konteks mewakili baris saat ini untuk perulangan dalam rumus, dan sekumpulan konteks lain mewakili baris saat ini untuk perulangan luar rumus. DAX secara otomatis memberi umpan nilai di antara dua perulangan sehingga Anda dapat membuat agregat yang kompleks.

Konteks kueri

Konteks kueri mengacu pada subset data yang diambil secara implisit untuk rumus. Misalnya, saat pengguna menempatkan pengukuran atau bidang ke dalam laporan, mesin memeriksa header baris dan kolom, pemotong, dan filter laporan untuk menentukan konteks. Kueri yang diperlukan kemudian dijalankan terhadap data model untuk mendapatkan subkumpulan data yang benar, membuat perhitungan yang ditentukan oleh rumus, lalu mengisi nilai dalam laporan.

Karena konteks berubah tergantung pada tempat Anda menempatkan rumus, hasil rumus juga dapat berubah. Misalnya, Anda membuat rumus yang menjumlahkan nilai di kolom Profit dari tabel Penjualan : = SUM('Sales'[Profit]). Jika Anda menggunakan rumus ini dalam kolom terhitung dalam tabel Penjualan , hasil untuk rumus akan sama untuk seluruh tabel, karena konteks kueri untuk rumus selalu merupakan seluruh himpunan data tabel Penjualan . Hasil akan memiliki keuntungan untuk semua wilayah, semua produk, bertahun-tahun, dan sebagainya.

Namun, pengguna biasanya tidak ingin melihat hasil yang sama ratusan kali, tetapi sebaliknya ingin mendapatkan keuntungan untuk tahun tertentu, negara tertentu, produk tertentu, atau beberapa kombinasi dari ini, dan kemudian mendapatkan total keseluruhan.

Dalam laporan, konteks diubah dengan memfilter, menambahkan, atau menghapus bidang, dan menggunakan pemotong. Untuk setiap perubahan, konteks kueri tempat pengukuran dievaluasi. Oleh karena itu, rumus yang sama, digunakan dalam ukuran, dievaluasi dalam konteks kueri yang berbeda untuk setiap sel.

Konteks filter

Konteks filter adalah kumpulan nilai yang diizinkan di setiap kolom, atau dalam nilai yang diambil dari tabel terkait. Filter dapat diterapkan ke kolom dalam perancang, atau di lapisan presentasi (laporan dan PivotTable). Filter juga dapat ditentukan secara eksplisit menurut ekspresi filter dalam rumus.

Konteks filter ditambahkan saat Anda menentukan batasan filter pada kumpulan nilai yang diizinkan dalam kolom atau tabel, dengan menggunakan argumen ke rumus. Konteks filter berlaku di atas konteks lain, seperti konteks baris atau konteks kueri.

Dalam model tabular, ada banyak cara untuk membuat konteks filter. Dalam konteks klien yang dapat menggunakan model, seperti laporan Power BI, pengguna dapat membuat filter dengan cepat dengan menambahkan pemotong atau filter laporan pada judul baris dan kolom. Anda juga dapat menentukan ekspresi filter langsung dalam rumus, untuk menentukan nilai terkait, untuk memfilter tabel yang digunakan sebagai input, atau untuk mendapatkan konteks secara dinamis untuk nilai yang digunakan dalam perhitungan. Anda juga dapat menghapus filter secara menyeluruh atau selektif pada kolom tertentu. Ini sangat berguna saat membuat rumus yang menghitung total keseluruhan.

Untuk mempelajari selengkapnya tentang cara membuat filter dalam rumus, lihat Fungsi FILTER (DAX).
Untuk contoh bagaimana filter dapat dibersihkan untuk membuat total keseluruhan, lihat Fungsi ALL (DAX).

Untuk contoh cara menghapus dan menerapkan filter secara selektif dalam rumus, lihat ALLEXCEPT.

Menentukan konteks dalam rumus

Saat Anda membuat rumus DAX, rumus pertama-tama diuji untuk sintaks yang valid, lalu diuji untuk memastikan nama kolom dan tabel yang disertakan dalam rumus dapat ditemukan dalam konteks saat ini. Jika ada kolom atau tabel yang ditentukan oleh rumus tidak dapat ditemukan, kesalahan akan ditampilkan.

Konteks selama validasi (dan operasi perhitungan ulang) ditentukan seperti yang dijelaskan di bagian sebelumnya, dengan menggunakan tabel yang tersedia dalam model, hubungan apa pun antara tabel, dan filter apa pun yang telah diterapkan.

Misalnya, jika Anda baru saja mengimpor beberapa data ke dalam tabel baru dan tidak terkait dengan tabel lain (dan Anda belum menerapkan filter apa pun), konteks saat ini adalah seluruh kumpulan kolom dalam tabel. Jika tabel ditautkan oleh hubungan ke tabel lain, konteks saat ini menyertakan tabel terkait. Jika Anda menambahkan kolom dari tabel ke laporan yang memiliki Pemotong dan mungkin beberapa filter laporan, konteks untuk rumus adalah subset data di setiap sel laporan.

Konteks adalah konsep kuat yang juga dapat menyulitkan pemecahan masalah rumus. Kami menyarankan agar Anda memulai dengan rumus dan hubungan sederhana untuk melihat cara kerja konteks. Bagian berikut ini menyediakan beberapa contoh bagaimana rumus menggunakan berbagai jenis konteks untuk mengembalikan hasil secara dinamis.

Operators

Bahasa DAX menggunakan empat jenis operator perhitungan yang berbeda dalam rumus:

  • Operator perbandingan untuk membandingkan nilai dan mengembalikan nilai TRUE\FALSE logis.
  • Operator aritmatika untuk melakukan perhitungan aritmatika yang mengembalikan nilai numerik.
  • Operator perangkaian teks untuk menggabungkan dua string teks atau lebih.
  • Operator logis yang menggabungkan dua ekspresi atau lebih untuk mengembalikan satu hasil.

Untuk informasi terperinci tentang operator yang digunakan dalam rumus DAX, lihat operator DAX.

Bekerja dengan tabel dan kolom

Tabel dalam model data tabular terlihat seperti tabel Excel, tetapi berbeda dalam cara mereka bekerja dengan data dan dengan rumus:

  • Rumus hanya berfungsi dengan tabel dan kolom, bukan dengan sel individual, referensi rentang, atau array.
  • Rumus bisa menggunakan hubungan untuk mendapatkan nilai dari tabel terkait. Nilai yang diambil selalu terkait dengan nilai baris saat ini.
  • Anda tidak boleh memiliki data yang tidak teratur atau "ragged" seperti yang anda bisa di lembar kerja Excel. Setiap baris dalam tabel harus berisi jumlah kolom yang sama. Namun, Anda dapat memiliki nilai kosong di beberapa kolom. Tabel data Excel dan tabel data model tabular tidak dapat dipertukarkan.
  • Karena tipe data diatur untuk setiap kolom, setiap nilai dalam kolom tersebut harus memiliki jenis yang sama.

Merujuk ke tabel dan kolom dalam rumus

Anda dapat merujuk ke tabel dan kolom apa pun dengan menggunakan namanya. Misalnya, rumus berikut mengilustrasikan cara merujuk ke kolom dari dua tabel dengan menggunakan nama yang sepenuhnya memenuhi syarat :


= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])  

Saat rumus dievaluasi, perancang model terlebih dahulu memeriksa sintaks umum, lalu memeriksa nama kolom dan tabel yang Anda sediakan terhadap kolom dan tabel yang mungkin dalam konteks saat ini. Jika nama ambigu atau jika kolom atau tabel tidak dapat ditemukan, Anda akan mendapatkan kesalahan pada rumus Anda (string #ERROR alih-alih nilai data dalam sel tempat kesalahan terjadi). Untuk mempelajari selengkapnya tentang persyaratan penamaan untuk tabel, kolom, dan objek lainnya, lihat Persyaratan Penamaan dalam sintaks DAX.

Hubungan tabel

Dengan membuat hubungan antar tabel, Anda mendapatkan kemampuan untuk nilai terkait dalam tabel lain yang akan digunakan dalam perhitungan. Misalnya, Anda dapat menggunakan kolom terhitung untuk menentukan semua rekaman pengiriman yang terkait dengan penjual saat ini, lalu menjumlahkan biaya pengiriman untuk masing-masing data. Namun, dalam banyak kasus, hubungan mungkin tidak diperlukan. Anda bisa menggunakan fungsi LOOKUPVALUE dalam rumus untuk mengembalikan nilai dalam result_columnName untuk baris yang memenuhi kriteria yang ditentukan dalam argumen search_column dan search_value .

Banyak fungsi DAX mengharuskan hubungan ada di antara tabel, atau di antara beberapa tabel, untuk menemukan kolom yang telah Anda referensikan dan mengembalikan hasil yang masuk akal. Fungsi lain akan mencoba mengidentifikasi hubungan; namun, untuk hasil terbaik, Anda harus selalu membuat hubungan jika memungkinkan. Model data tabular mendukung beberapa hubungan di antara tabel. Untuk menghindari kebingungan atau hasil yang salah, hanya satu hubungan pada satu waktu yang ditetapkan sebagai hubungan aktif, tetapi Anda dapat mengubah hubungan aktif seperlunya untuk melintasi koneksi yang berbeda dalam data dalam perhitungan. Fungsi USERELATIONSHIP dapat digunakan untuk menentukan satu atau beberapa hubungan yang akan digunakan dalam perhitungan tertentu.

Penting untuk mengamati aturan desain rumus ini saat menggunakan hubungan:

  • Saat tabel disambungkan oleh hubungan, Anda harus memastikan dua kolom yang digunakan sebagai kunci memiliki nilai yang cocok. Integritas referensial tidak diberlakukan, oleh karena itu dimungkinkan untuk memiliki nilai yang tidak cocok di kolom kunci dan masih membuat hubungan. Jika ini terjadi, Anda harus mengetahui bahwa nilai kosong atau nilai yang tidak cocok mungkin memengaruhi hasil rumus.

  • Saat Anda menautkan tabel dalam model Anda dengan menggunakan hubungan, Anda memperbesar cakupan, atau konteks, di mana rumus Anda dievaluasi. Perubahan dalam konteks yang dihasilkan dari penambahan tabel baru, hubungan baru, atau dari perubahan hubungan aktif dapat menyebabkan hasil Anda berubah dengan cara yang mungkin tidak Anda antisipasi. Untuk mempelajari selengkapnya, lihat Konteks dalam artikel ini.

Proses dan refresh

Proses dan perhitungan ulang adalah dua operasi terpisah tetapi terkait. Anda harus memahami konsep-konsep ini secara menyeluruh saat merancang model yang berisi rumus kompleks, data dalam jumlah besar, atau data yang diperoleh dari sumber data eksternal.

Proses (refresh) memperbarui data dalam model dengan data baru dari sumber data eksternal.

Perhitungan ulang adalah proses memperbarui hasil rumus untuk mencerminkan perubahan apa pun pada rumus itu sendiri dan untuk mencerminkan perubahan dalam data yang mendasar. Pengkalkulasian ulang dapat memengaruhi performa dengan cara berikut:

  • Nilai dalam kolom terhitung dihitung dan disimpan dalam model. Untuk memperbarui nilai di kolom terhitung, Anda harus memproses model menggunakan salah satu dari tiga perintah pemrosesan – Proses Penuh, Proses Data, atau Hitung Ulang Proses. Hasil rumus harus selalu dihitung ulang untuk seluruh kolom, setiap kali Anda mengubah rumus.

  • Nilai yang dihitung berdasarkan pengukuran dievaluasi secara dinamis setiap kali pengguna menambahkan pengukuran ke PivotTable atau membuka laporan; saat pengguna memodifikasi konteks, nilai yang dikembalikan oleh perubahan ukuran. Hasil pengukuran selalu mencerminkan yang terbaru dalam cache dalam memori.

Pemrosesan dan perhitungan ulang tidak berpengaruh pada rumus keamanan tingkat baris kecuali hasil pengkalkulasian ulang mengembalikan nilai yang berbeda, sehingga membuat baris dapat dikueri atau tidak dapat dikueri oleh anggota peran.

Pembaruan

DAX terus ditingkatkan. Fungsi baru dan yang diperbarui dirilis dengan pembaruan berikutnya yang tersedia, yang biasanya bulanan. Layanan diperbarui terlebih dahulu, diikuti oleh aplikasi yang diinstal seperti Power BI Desktop, Excel, SQL Server Management Studio (SSMS), dan ekstensi proyek Analysis Services untuk Visual Studio (SSDT). SQL Server Analysis Services diperbarui dengan pembaruan kumulatif berikutnya. Fungsi baru pertama kali diumumkan dan dijelaskan dalam referensi fungsi DAX yang bertepatan dengan pembaruan Power BI Desktop.

Tidak semua fungsi didukung dalam versi SQL Server Analysis Services dan Excel yang lebih lama.

Pemecahan Masalah

Jika Anda mendapatkan kesalahan saat menentukan rumus, rumus mungkin berisi kesalahan sintik, kesalahan semantik, atau kesalahan perhitungan.

Kesalahan syntactic adalah yang paling mudah diselesaikan. Mereka biasanya melibatkan tanda kurung atau koma yang hilang.

Jenis kesalahan lainnya terjadi ketika sintaksis benar, tetapi nilai atau kolom yang direferensikan tidak masuk akal dalam konteks rumus. Kesalahan semantik dan perhitungan semacam itu mungkin disebabkan oleh salah satu masalah berikut:

  • Rumus mengacu pada kolom, tabel, atau fungsi yang tidak ada.
  • Rumus tampaknya benar, tetapi ketika mesin data mengambil data, rumus menemukan jenis tidak cocok dan menimbulkan kesalahan.
  • Rumus meneruskan angka atau tipe argumen yang salah ke fungsi.
  • Rumus merujuk ke kolom lain yang memiliki kesalahan, dan oleh karena itu nilainya tidak valid.
  • Rumus mengacu pada kolom yang belum diproses, yang berarti memiliki metadata tetapi tidak ada data aktual yang digunakan untuk perhitungan.

Dalam empat kasus pertama, DAX menandai seluruh kolom yang berisi rumus yang tidak valid. Dalam kasus terakhir, DAX berwarna abu-abu pada kolom untuk menunjukkan bahwa kolom dalam status tidak diolah.

Aplikasi dan alat

Power BI Desktop

Power BI Desktop

Power BI Desktop adalah aplikasi pemodelan dan pelaporan data gratis. Perancang model menyertakan editor DAX untuk membuat rumus perhitungan DAX.

Power Pivot di Excel

Power Pivot in Excel

Perancang Power Pivot dalam model Excel menyertakan editor DAX untuk membuat rumus perhitungan DAX.

Visual Studio

Visual Studio

Ekstensi proyek Visual Studio dengan Analysis Services (VSIX) digunakan untuk membuat proyek model Analysis Services. Desainer model tabular, diinstal dengan ekstensi proyek menyertakan editor DAX.

SQL Server Management Studio

SQL Server Management Studio

SQL Server Management Studio (SSMS) adalah alat penting untuk bekerja dengan Analysis Services. SSMS menyertakan editor kueri DAX untuk mengkueri model tabular dan multidmensional.

Studio DAX

DAX Studio icon

DAX Studio adalah alat klien sumber terbuka untuk membuat dan menjalankan kueri DAX terhadap Analysis Services, Power BI Desktop, dan Power Pivot dalam model Excel.

Editor Tabular

Tabular Editor icon

Editor Tabular adalah alat sumber terbuka yang menyediakan tampilan hierarkis intuitif dari setiap objek dalam metadata model tabular. Editor Tabular menyertakan Editor DAX dengan penyorotan sintaksis, yang menyediakan cara mudah untuk mengedit pengukuran, kolom terhitung, dan ekspresi tabel terhitung.

Sumber daya pembelajaran

Saat mempelajari DAX, yang terbaik adalah menggunakan aplikasi yang akan Anda gunakan untuk membuat model data Anda. Analysis Services, Power BI Desktop, dan Power Pivot di Excel semuanya memiliki artikel dan tutorial yang menyertakan pelajaran tentang membuat pengukuran, kolom terhitung, dan filter baris dengan menggunakan DAX. Berikut adalah beberapa sumber daya tambahan:

Video

Gunakan DAX di jalur pembelajaran Power BI Desktop .

Panduan Definitif untuk DAX oleh Alberto Ferrari dan Marco Russo (Microsoft Press). Sekarang di edisi kedua, panduan ekstensif ini menyediakan dasar-dasar untuk teknik performa tinggi yang inovatif untuk modeler data awal dan profesional BI.

The Definitive Guide to DAX book image

Komunitas

DAX memiliki komunitas yang bersemangat yang selalu bersedia berbagi keahlian mereka. Komunitas Microsoft Power BI memiliki forum diskusi khusus hanya untuk DAX, Perintah DAN Tips DAX.