CALCULATE
Berlaku untuk: Kolom terhitung Tabel terhitung Ukur perhitungan Visual
Mengevaluasi ekspresi dalam konteks filter yang dimodifikasi.
Catatan
Ada juga fungsi CALCULATETABLE . Ini melakukan fungsionalitas yang sama persis, kecuali memodifikasi konteks filter yang diterapkan ke ekspresi yang mengembalikan objek tabel.
Sintaks
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
Parameter
Term | Definisi |
---|---|
expression | Ekspresi yang akan dievaluasi. |
filter1, filter2,... | (Opsional) Ekspresi boolean atau ekspresi tabel yang menentukan filter, atau fungsi pengubah filter. |
Ekspresi yang digunakan sebagai parameter pertama pada dasarnya sama dengan ukuran.
Filter dapat berupa:
- Ekspresi filter Boolean
- Ekspresi filter tabel
- Memfilter fungsi modifikasi
Ketika ada beberapa filter, filter dapat dievaluasi dengan menggunakan operator logis AND (&&&) , yang berarti semua kondisi harus TRUE, atau oleh operator logis OR (||), yang berarti salah satu kondisi bisa benar.
Ekspresi filter Boolean
Filter ekspresi Boolean adalah ekspresi yang mengevaluasi ke TRUE atau FALSE. Ada beberapa aturan yang harus mereka patuhi:
- Kolom tersebut dapat mereferensikan kolom dari satu tabel.
- Mereka tidak dapat mereferensikan langkah-langkah.
- Mereka tidak dapat menggunakan fungsi CALCULATE berlapis.
Dimulai dengan rilis Power BI Desktop September 2021, berikut ini juga berlaku:
- Mereka tidak dapat menggunakan fungsi yang memindai atau mengembalikan tabel kecuali diteruskan sebagai argumen ke fungsi agregasi.
- Mereka dapat berisi fungsi agregasi yang mengembalikan nilai skalar. Misalnya:
Total sales on the last selected date = CALCULATE ( SUM ( Sales[Sales Amount] ), 'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ) )
Ekspresi filter tabel
Filter ekspresi tabel menerapkan objek tabel sebagai filter. Ini bisa menjadi referensi ke tabel model, tetapi kemungkinan besar itu adalah fungsi yang mengembalikan objek tabel. Anda dapat menggunakan fungsi FILTER untuk menerapkan kondisi filter kompleks, termasuk yang tidak dapat ditentukan oleh ekspresi filter Boolean.
Fungsi pengubah filter
Fungsi pengubah filter memungkinkan Anda untuk melakukan lebih dari sekadar menambahkan filter. Mereka memberi Anda kontrol tambahan saat memodifikasi konteks filter.
Fungsi | Tujuan |
---|---|
REMOVEFILTERS | Hapus semua filter, atau filter dari satu atau beberapa kolom tabel, atau dari semua kolom tabel tunggal. |
SEMUA 1, ALLEXCEPT, ALLNOBLANKROW | Hapus filter dari satu atau beberapa kolom, atau dari semua kolom tabel tunggal. |
KEEPFILTERS | Tambahkan filter tanpa menghapus filter yang ada pada kolom yang sama. |
USERELATIONSHIP | Libatkan hubungan yang tidak aktif antara kolom terkait, dalam hal ini hubungan aktif akan secara otomatis menjadi tidak aktif. |
CROSSFILTER | Ubah arah filter (dari keduanya menjadi tunggal, atau dari tunggal ke keduanya) atau nonaktifkan hubungan. |
1 Fungsi ALL dan variannya bereaksi sebagai pengubah filter dan sebagai fungsi yang mengembalikan objek tabel. Jika fungsi REMOVEFILTERS didukung oleh alat Anda, lebih baik menggunakannya untuk menghapus filter.
Nilai hasil
Nilai yang merupakan hasil ekspresi.
Keterangan
Saat ekspresi filter disediakan, fungsi CALCULATE memodifikasi konteks filter untuk mengevaluasi ekspresi. Untuk setiap ekspresi filter, ada dua kemungkinan hasil standar saat ekspresi filter tidak dibungkus dalam fungsi KEEPFILTERS:
- Jika kolom (atau tabel) tidak berada dalam konteks filter, filter baru akan ditambahkan ke konteks filter untuk mengevaluasi ekspresi.
- Jika kolom (atau tabel) sudah berada dalam konteks filter, filter yang ada akan ditimpa oleh filter baru untuk mengevaluasi ekspresi CALCULATE.
Fungsi CALCULATE yang digunakan tanpa filter mencapai persyaratan tertentu. Ini mentransisikan konteks baris untuk memfilter konteks. Ini diperlukan ketika ekspresi (bukan ukuran model) yang meringkas data model perlu dievaluasi dalam konteks baris. Skenario ini dapat terjadi dalam rumus kolom terhitung atau saat ekspresi dalam fungsi iterator dievaluasi. Perhatikan bahwa saat ukuran model digunakan dalam konteks baris, transisi konteks bersifat otomatis.
Fungsi ini tidak didukung untuk digunakan dalam mode DirectQuery saat digunakan dalam kolom terhitung atau aturan keamanan tingkat baris (RLS).
Contoh
Definisi pengukuran tabel Penjualan berikut menghasilkan hasil pendapatan, tetapi hanya untuk produk yang memiliki warna biru.
Contoh dalam artikel ini dapat digunakan dengan contoh model Power BI Desktop Adventure Works DW 2020. Untuk mendapatkan model, lihat model sampel DAX.
Blue Revenue =
CALCULATE(
SUM(Sales[Sales Amount]),
'Product'[Color] = "Blue"
)
Kategori | Jumlah Penjualan | Pendapatan Biru |
---|---|---|
Aksesori | $1.272.057,89 | $165.406,62 |
Sepeda | $94.620.526,21 | $8.374.313,88 |
Pakaian | $2.117.613,45 | $259.488,37 |
Komponen | $11.799.076,66 | $803.642,10 |
Total | $109.809.274,20 | $9.602.850,97 |
Fungsi CALCULATE mengevaluasi jumlah kolom Jumlah Penjualan tabel Penjualan dalam konteks filter yang dimodifikasi. Filter baru ditambahkan ke kolom Warna tabel Produk—atau, filter menimpa filter apa pun yang sudah diterapkan ke kolom.
Definisi pengukuran tabel Penjualan berikut menghasilkan rasio penjualan atas penjualan untuk semua saluran penjualan.
Saluran | Jumlah Penjualan | Pendapatan % Total Saluran |
---|---|---|
Internet | $29.358.677,22 | 26.74% |
Pengecer | $80.450.596,98 | 73.26% |
Total | $109.809.274,20 | 100.00% |
Revenue % Total Channel =
DIVIDE(
SUM(Sales[Sales Amount]),
CALCULATE(
SUM(Sales[Sales Amount]),
REMOVEFILTERS('Sales Order'[Channel])
)
)
Fungsi DIVIDE membagi ekspresi yang menjumlahkan nilai kolom Jumlah Penjualan tabel Penjualan (dalam konteks filter) dengan ekspresi yang sama dalam konteks filter yang dimodifikasi. Ini adalah fungsi CALCULATE yang memodifikasi konteks filter dengan menggunakan fungsi REMOVEFILTERS, yang merupakan fungsi pengubah filter. Ini menghapus filter dari kolom Saluran tabel Pesanan Penjualan.
Definisi kolom terhitung tabel Pelanggan berikut mengklasifikasikan pelanggan ke dalam kelas loyalitas. Ini adalah skenario yang sangat sederhana: Ketika pendapatan yang dihasilkan oleh pelanggan kurang dari $ 2500, mereka diklasifikasikan sebagai Rendah; jika tidak, pendapatan yang dihasilkan oleh pelanggan kurang dari $ 2500, mereka diklasifikasikan sebagai Rendah; jika tidak, mereka Tinggi.
Customer Segment =
IF(
CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
"Low",
"High"
)
Dalam contoh ini, konteks baris dikonversi ke konteks filter. Ini dikenal sebagai transisi konteks. Fungsi ALLEXCEPT menghapus filter dari semua kolom tabel Pelanggan kecuali kolom CustomerKey .
Konten terkait
Memfilter konteks
Konteks baris
Fungsi CALCULATETABLE
Fungsi filter