Sintaks DAX
Artikel ini menguraikan sintaks dan persyaratan untuk bahasa ekspresi rumus DAX.
Persyaratan sintaks
Rumus DAX selalu dimulai dengan tanda sama dengan (=). Setelah tanda sama dengan, Anda dapat memberikan ekspresi apa pun yang mengevaluasi ke skalar, atau ekspresi yang dapat dikonversi menjadi skalar. Manfaatnya meliputi:
Konstanta skalar, atau ekspresi yang menggunakan operator skalar (+,-,*,/,>=,...,&&, ...)
Referensi ke kolom atau tabel. Bahasa DAX selalu menggunakan tabel dan kolom sebagai input ke fungsi, tidak pernah menjadi array atau sekumpulan nilai arbitrer.
Operator, konstanta, dan nilai yang disediakan sebagai bagian dari ekspresi.
Hasil fungsi dan argumen yang diperlukan. Beberapa fungsi DAX mengembalikan tabel alih-alih skalar, dan harus dibungkus dalam fungsi yang mengevaluasi tabel dan mengembalikan skalar; kecuali tabel adalah kolom tunggal, tabel baris tunggal, maka tabel tersebut diperlakukan sebagai nilai skalar.
Sebagian besar fungsi DAX memerlukan satu atau beberapa argumen, yang dapat menyertakan tabel, kolom, ekspresi, dan nilai. Namun, beberapa fungsi, seperti PI, tidak memerlukan argumen apa pun, tetapi selalu memerlukan tanda kurung untuk menunjukkan argumen null. Misalnya, Anda harus selalu mengetik PI(), bukan PI. Anda juga dapat menumpuk fungsi dalam fungsi lain.
Ekspresi. Ekspresi dapat berisi salah satu atau semua hal berikut: operator, konstanta, atau referensi ke kolom.
Misalnya, berikut ini adalah semua rumus yang valid.
Rumus | Hasil |
---|---|
= 3 | 3 |
= "Penjualan" | Penjualan |
= 'Sales'[Amount] | Jika Anda menggunakan rumus ini dalam tabel Penjualan, Anda akan mendapatkan nilai kolom Jumlah dalam tabel Penjualan untuk baris saat ini. |
= (0,03 *[Jumlah]) =0.03 * [Jumlah] |
Tiga persen dari nilai di kolom Jumlah dari tabel saat ini. Meskipun rumus ini dapat digunakan untuk menghitung persentase, hasilnya tidak ditampilkan sebagai persentase kecuali Anda menerapkan pemformatan dalam tabel. |
= PI() | Nilai pi konstanta. |
Rumus dapat bersifat berbeda tergantung pada cara penggunaannya. Anda harus selalu mengetahui konteks dan bagaimana data yang Anda gunakan dalam rumus terkait dengan data lain yang mungkin digunakan dalam perhitungan.
Persyaratan penamaan
Model data sering berisi beberapa tabel. Bersama-sama tabel dan kolomnya terdiri dari database yang disimpan di mesin analitik dalam memori (VertiPaq). Dalam database tersebut, semua tabel harus memiliki nama yang unik. Nama kolom juga harus unik dalam setiap tabel. Semua nama objek tidak peka huruf besar/kecil; misalnya, nama SALES dan Sales akan mewakili tabel yang sama.
Setiap kolom dan pengukuran yang Anda tambahkan ke model data yang ada harus termasuk dalam tabel tertentu. Anda menentukan tabel yang berisi kolom secara implisit, saat Anda membuat kolom terhitung dalam tabel, atau secara eksplisit, saat Anda membuat ukuran dan menentukan nama tabel tempat definisi pengukuran harus disimpan.
Saat Anda menggunakan tabel atau kolom sebagai input ke fungsi, Anda umumnya harus memenuhi syarat nama kolom. Nama kolom yang sepenuhnya memenuhi syarat adalah nama tabel, diikuti dengan nama kolom dalam tanda kurung siku: misalnya, 'Penjualan A.S. '[Produk]. Nama yang sepenuhnya memenuhi syarat selalu diperlukan saat Anda mereferensikan kolom dalam konteks berikut:
Sebagai argumen untuk fungsi , VALUES
Sebagai argumen untuk fungsi, ALL atau ALLEXCEPT
Dalam argumen filter untuk fungsi, CALCULATE atau CALCULATETABLE
Sebagai argumen untuk fungsi , RELATEDTABLE
Sebagai argumen untuk fungsi inteligensi waktu apa pun
Nama kolom yang tidak memenuhi syarat hanyalah nama kolom, yang diapit dalam tanda kurung: misalnya, [Jumlah Penjualan]. Misalnya, saat Anda mereferensikan nilai skalar dari baris yang sama dari tabel saat ini, Anda dapat menggunakan nama kolom yang tidak memenuhi syarat.
Jika nama tabel berisi spasi, kata kunci yang dipesan, atau karakter yang tidak diizinkan, Anda harus mengapit nama tabel dalam tanda kutip tunggal. Anda juga harus mengapit nama tabel dalam tanda kutip jika nama berisi karakter apa pun di luar rentang karakter alfanumerik ANSI, terlepas dari apakah lokal Anda mendukung kumpulan karakter atau tidak. Misalnya, jika Anda membuka buku kerja yang berisi nama tabel yang ditulis dalam karakter Sirilik, seperti 'Таблица', nama tabel harus diapit dalam tanda kutip, meskipun tidak berisi spasi.
Catatan
Untuk mempermudah memasukkan nama kolom yang sepenuhnya memenuhi syarat, gunakan fitur LengkapiOtomatis di editor rumus.
Tabel
Nama tabel diperlukan setiap kali kolom berasal dari tabel yang berbeda dari tabel saat ini. Nama tabel harus unik dalam database.
Nama tabel harus diapit dalam tanda kutip tunggal jika berisi spasi, karakter khusus lainnya, atau karakter alfanumerik non-Bahasa Inggris.
Tindakan
Nama pengukuran harus selalu dalam tanda kurung siku.
Nama pengukuran dapat berisi spasi.
Setiap nama pengukuran harus unik dalam model. Oleh karena itu, nama tabel bersifat opsional di depan nama pengukuran saat mereferensikan ukuran yang ada. Namun, ketika Anda membuat ukuran, Anda harus selalu menentukan tabel tempat definisi pengukuran akan disimpan.
Kolom
Nama kolom harus unik dalam konteks tabel; namun, beberapa tabel dapat memiliki kolom dengan nama yang sama (disambiguasi dilengkapi dengan nama tabel).
Secara umum, kolom dapat dirujuk tanpa mereferensikan tabel dasar miliknya, kecuali ketika mungkin ada konflik nama untuk mengatasi atau dengan fungsi tertentu yang mengharuskan nama kolom sepenuhnya memenuhi syarat.
Kata kunci yang dicadangkan
Jika nama yang Anda gunakan untuk tabel sama dengan kata kunci yang dipesan Analysis Services, kesalahan dimunculkan, dan Anda harus mengganti nama tabel. Namun, Anda dapat menggunakan kata kunci dalam nama objek jika nama objek diapit dalam tanda kurung siku (untuk kolom) atau tanda kutip (untuk tabel).
Catatan
Tanda kutip dapat diwakili oleh beberapa karakter yang berbeda, tergantung pada aplikasi. Jika Anda menempelkan rumus dari dokumen eksternal atau halaman Web, pastikan untuk memeriksa kode ASCII karakter yang digunakan untuk membuka dan menutup tanda kutip, untuk memastikan bahwa mereka sama. Jika tidak, DAX mungkin tidak dapat mengenali simbol sebagai tanda kutip, membuat referensi tidak valid.
Karakter khusus
Karakter dan jenis karakter berikut ini tidak valid dalam nama tabel, kolom, atau pengukuran:
Spasi di depan atau di belakang; kecuali spasi diapit oleh pemisah nama, tanda kurung siku, atau apostrof tunggal.
Karakter kontrol
Karakter berikut yang tidak valid dalam nama objek:
.,;':/\*|? &%$!+=()[]{}<>
Contoh nama objek
Tabel berikut ini memperlihatkan contoh beberapa nama objek:
Jenis Objek | Contoh | Komentar |
---|---|---|
Nama tabel | Penjualan | Jika nama tabel tidak berisi spasi atau karakter khusus lainnya, nama tidak perlu diapit dalam tanda kutip. |
Nama tabel | 'Penjualan Kanada' | Jika nama berisi spasi, tab, atau karakter khusus lainnya, sertakan nama dalam tanda kutip tunggal. |
Nama kolom yang sepenuhnya memenuhi syarat | Penjualan[Jumlah] | Nama tabel mendahului nama kolom, dan nama kolom diapit dalam tanda kurung siku. |
Nama pengukuran yang sepenuhnya memenuhi syarat | Penjualan[Profit] | Nama tabel mendahului nama pengukuran, dan nama pengukuran diapit dalam tanda kurung siku. Dalam konteks tertentu, nama yang sepenuhnya memenuhi syarat selalu diperlukan. |
Nama kolom yang tidak memenuhi syarat | [Jumlah] | Nama yang tidak memenuhi syarat hanyalah nama kolom, dalam tanda kurung siku. Konteks di mana Anda bisa menggunakan nama yang tidak memenuhi syarat menyertakan rumus dalam kolom terhitung dalam tabel yang sama, atau dalam fungsi agregasi yang memindai tabel yang sama. |
Kolom yang sepenuhnya memenuhi syarat dalam tabel dengan spasi | 'Penjualan Kanada'[Qty] | Nama tabel berisi spasi, sehingga harus dikelilingi oleh tanda kutip tunggal. |
Pembatasan lain
Sintaks yang diperlukan untuk setiap fungsi, dan jenis operasi yang dapat dilakukannya, sangat bervariasi tergantung pada fungsinya. Namun, secara umum, aturan berikut berlaku untuk semua rumus dan ekspresi:
Rumus dan ekspresi DAX tidak dapat mengubah atau menyisipkan nilai individual dalam tabel.
Anda tidak dapat membuat baris terhitung dengan menggunakan DAX. Anda hanya dapat membuat kolom dan pengukuran terhitung.
Saat menentukan kolom terhitung, Anda dapat menumpuk fungsi ke tingkat apa pun.
DAX memiliki beberapa fungsi yang mengembalikan tabel. Biasanya, Anda menggunakan nilai yang dikembalikan oleh fungsi-fungsi ini sebagai input ke fungsi lain, yang memerlukan tabel sebagai input.
Operator dan konstanta DAX
Tabel berikut mencantumkan operator yang didukung oleh DAX. Untuk informasi selengkapnya tentang sintaks operator individual, lihat operator DAX.
Jenis operator | Simbol dan penggunaan |
---|---|
Operator tanda kurung | () urutan prioritas dan pengelompokan argumen |
Operasi Aritmatika | + (penambahan) - (pengurangan/ tanda tangan) * (perkalian) / (divisi) ^ (eksponensial) |
Operator perbandingan | = (sama dengan) > (lebih besar) < (lebih kecil) >= (lebih besar atau sama) <= (lebih kecil atau sama) <> (tidak sama dengan) |
Operator penggalian teks | & (perangkaian) |
Operator logika | && (dan) || (atau) |
Jenis data
Anda tidak perlu mentransmisikan, mengonversi, atau menentukan jenis data kolom atau nilai yang Anda gunakan dalam rumus DAX. Saat Anda menggunakan data dalam rumus DAX, DAX secara otomatis mengidentifikasi jenis data dalam kolom yang dirujuk dan nilai yang Anda ketik, dan melakukan konversi implisit jika perlu untuk menyelesaikan operasi yang ditentukan.
Misalnya, jika Anda mencoba menambahkan angka ke nilai tanggal, mesin akan menginterpretasikan operasi dalam konteks fungsi, dan mengonversi angka menjadi jenis data umum, lalu menyajikan hasilnya dalam format yang dimaksudkan, tanggal.
Namun, ada beberapa batasan pada nilai yang dapat berhasil dikonversi. Jika nilai atau kolom memiliki jenis data yang tidak kompatibel dengan operasi saat ini, DAX mengembalikan kesalahan. Selain itu, DAX tidak menyediakan fungsi yang memungkinkan Anda secara eksplisit mengubah, mengonversi, atau mentransmisikan jenis data yang ada yang telah Anda impor ke dalam model data.
Penting
DAX tidak mendukung penggunaan jenis data varian. Oleh karena itu, saat Anda memuat atau mengimpor data ke dalam model data, data yang diharapkan di setiap kolom umumnya adalah jenis data yang konsisten.
Beberapa fungsi mengembalikan nilai skalar, termasuk string, sedangkan fungsi lain bekerja dengan angka, bilangan bulat dan bilangan riil, atau tanggal dan waktu. Jenis data yang diperlukan untuk setiap fungsi dijelaskan di bagian , fungsi DAX.
Anda bisa menggunakan tabel yang berisi beberapa kolom dan beberapa baris data sebagai argumen ke fungsi. Beberapa fungsi juga mengembalikan tabel, yang disimpan dalam memori dan dapat digunakan sebagai argumen ke fungsi lain.
Tanggal dan waktu
DAX menyimpan nilai tanggal dan waktu menggunakan jenis data tanggalwaktu yang digunakan oleh Microsoft SQL Server. Format tanggalwaktu menggunakan angka floating-point di mana nilai Tanggal sesuai dengan bagian bilangan bulat yang menunjukkan jumlah hari sejak 30 Desember 1899. Nilai waktu sesuai dengan bagian desimal dari nilai tanggal di mana Jam, menit, dan detik diwakili oleh pecahan desimal sehari. Fungsi tanggal dan waktu DAX secara implisit mengonversi argumen menjadi jenis data tanggalwaktu.
Catatan
Nilai DateTime maksimum yang didukung oleh DAX adalah 31 Desember 9999 00:00:00.
Tanggal dan waktu harfiah
Dimulai dengan versi Agustus 2021 dari Power BI Desktop, tanggal DAX dan nilai tanggalwaktu dapat ditentukan sebagai harfiah dalam format dt"YYYY-MM-DD"
, , dt"YYYY-MM-DDThh:mm:ss"
atau dt"YYYY-MM-DD hh:mm:ss"
. Ketika ditentukan sebagai harfiah, penggunaan fungsi DATE, TIME, DATEVALUE, TIMEVALUE dalam ekspresi tidak diperlukan.
Misalnya, ekspresi berikut menggunakan fungsi DATE dan TIME untuk memfilter pada OrderDate:
EVALUATE
FILTER (
FactInternetSales,
[OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)
Ekspresi filter yang sama dapat ditentukan sebagai harfiah:
EVALUATE
FILTER (
FactInternetSales,
[OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)
Catatan
Format literal tanggal DAX dan tipe tanggalwaktu tidak didukung di semua versi Power BI Desktop, Analysis Services, dan Power Pivot di Excel. Fungsionalitas DAX baru dan yang diperbarui biasanya pertama kali diperkenalkan di Power BI Desktop dan kemudian disertakan dalam Analysis Services dan Power Pivot di Excel.