Baca dalam bahasa Inggris

Bagikan melalui


Gambaran umum 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 sebagaimana diterapkan pada semua produk yang menggunakannya. Beberapa fungsionalitas mungkin tidak berlaku untuk produk atau kasus penggunaan tertentu. Lihat dokumentasi produk Anda yang menjelaskan implementasi khusus DAX.

Perhitungan

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

Langkah

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 diberikan sebagai argumen ke ukuran lainnya.

Saat Anda menentukan rumus untuk ukuran di bilah rumus, fitur Tooltip memperlihatkan pratinjau tentang hasil untuk total dalam konteks saat ini, tetapi hasilnya tidak langsung terlihat di mana pun. 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 Sales muncul sebelum rumus. Setelah Anda membuat ukuran, nama dan definisinya muncul dalam daftar Bidang aplikasi klien pelaporan, dan tersedia untuk semua pengguna model, tergantung pada perspektif dan peran.

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

Kolom yang dihitung

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, seperti 2017 Q1. 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 dihitung di Analysis Services
Kolom Terhitung di Power Pivot.

Tabel yang dihitung

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 yang dihitung dapat membantu dalam dimensi permainan 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 terkalkulasi 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 yang dihitung di Power BI Desktop
Tabel terhitung di Analysis Services.

Keamanan tingkat baris

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

= Customers[Country] = "USA"

Anggota peran Penjualan hanya akan dapat melihat data untuk pelanggan di AS, dan agregat seperti TOTAL, hanya dihasilkan 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, baris-baris tersebut 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. Saat 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

Pertanyaan

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 dasar adalah mengevaluasi pernyataan. Misalnya

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

Menghasilkan tabel dalam Hasil yang hanya mencantumkan produk-produk dengan Level Stok Keamanan kurang dari 200, diurutkan naik berdasarkan NamaProdukInggris.

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

Rumus

Rumus DAX sangat penting untuk membuat perhitungan dalam kolom terhitung dan ukuran terhitung, serta mengamankan data Anda 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 Definisi
= 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 pengukuran, menekan ENTER menyimpan definisi pengukuran ke dalam tabel. Jika rumus tidak valid, kesalahan akan ditampilkan.

Dalam contoh ini, mari kita perhatikan rumus dalam suatu ukuran yang bernama Days pada 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 perbandingan waktu yang telah 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' Menetapkan tabel Tanggal. Tabel berada dalam tanda kutip tunggal.
[Date] Menentukan kolom Tanggal dalam tabel Tanggal. Kolom ditandai dengan 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' Mengatur tabel Tanggal.
[Date] Menentukan kolom Tanggal dalam tabel Tanggal.

Menggunakan rumus Lengkapi Otomatis

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.

  • AutoComplete tidak menambahkan kurung tutup untuk fungsi maupun mencocokkan tanda kurung secara otomatis. 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, penyusunan bersarang dapat mempersulit 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 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 tipe data tanggal dan waktu mulai 1 Maret 1900. Untuk mempelajari selengkapnya, lihat fungsi Tanggal dan waktu .

Fungsi filter

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 fungsi Filter .

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.

Fungsi informasi

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 logis

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 lebih lanjut, lihat fungsi matematika dan trig.

Fungsi lain

Fungsi-fungsi ini melakukan tindakan unik yang tidak dapat didefinisikan oleh salah satu kategori yang dimiliki oleh sebagian besar fungsi lain. Untuk mempelajari lebih lanjut, 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 lebih lanjut, 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 kecerdasan 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 lebih lanjut, 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 menggunakanVAR . 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. Misalnya:

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 efektif.

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
Whole Number 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).
Decimal Number 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 Nilai Salah.
Text Tali Rangkaian 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.
Currency 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.
N/A Kosong Kosong adalah jenis data di DAX yang mewakili dan menggantikan SQL null. Anda dapat membuat nilai kosong dengan menggunakan fungsi BLANK, dan menguji nilai kosong dengan menggunakan fungsi logika, 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

Context 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 dipahami 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 kalkulasi, = [Freight] + [Tax], yang menjumlahkan nilai 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 melakukan perhitungan berulang pada 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 tabel Sales: . Jika Anda menggunakan rumus ini dalam kolom terhitung dalam tabel Sales, hasil untuk rumus akan sama untuk seluruh tabel, karena konteks kueri untuk rumus selalu merupakan seluruh himpunan data tabel Sales. Hasilnya akan memberikan keuntungan untuk semua wilayah, semua produk, semua 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 yang digunakan dalam suatu ukuran dievaluasi dalam konteks kueri yang berbeda untuk setiap sel.

Saring konteks

Filter konteks 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 ALL Function (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 Slicer 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.

Operator

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

  • Operator perbandingan untuk membandingkan nilai dan mengembalikan nilai logis TRUE'FALSE'.
  • 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 tidak rapi seperti yang dapat Anda miliki 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 menunjukkan cara merujuk ke kolom dari dua tabel dengan menggunakan nama yang berkualifikasi penuh :


= 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 sebuah 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 di artikel ini.

Proses dan perbarui

Proses dan penghitungan 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 oleh ukuran dievaluasi secara dinamis setiap kali pengguna menambahkan ukuran ke PivotTable atau membuka laporan; saat pengguna memodifikasi konteks, nilai yang dikembalikan oleh ukuran tersebut berubah. Hasil pengukuran selalu mencerminkan yang terbaru dari cache 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-menerus ditingkatkan. Fungsi baru dan yang diperbarui dirilis dengan pembaruan yang akan datang, yang biasanya dirilis setiap bulan. 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 syntactic, kesalahan semantik , atau kesalahan perhitungan .

Kesalahan sintaksis adalah yang paling mudah untuk 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 membuat kolom berwarna abu-abu untuk menunjukkan bahwa kolom tersebut dalam keadaan 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 dalam Excel

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

Visual Studio

Visual Studio

Visual Studio dengan ekstensi proyek Analysis Services (VSIX) digunakan untuk membuat proyek model Analysis Services. Desainer model tabular yang 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.

DAX Studio

ikon DAX Studio

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.

Tabular Editor

ikon Editor Tabular

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

Jalur pembelajaran menggunakan DAX di Power BI Desktop.

Buku Panduan Definitif tentang 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.

Panduan Definitif untuk gambar buku DAX

Masyarakat

DAX memiliki komunitas yang bersemangat yang selalu bersedia berbagi keahlian mereka. Microsoft Power BI Community memiliki forum diskusi khusus untuk DAX, perintah DAX dan Tips.