CALCULATE

Berlaku untuk: kolom terhitungTabel terhitungUkurPerhitungan visual

Mengevaluasi ekspresi dalam konteks filter yang dimodifikasi.

Nota

Ada juga fungsi CALCULATETABLE. Ini melakukan fungsionalitas yang sama persis, kecuali memodifikasi konteks filter diterapkan ke ekspresi yang mengembalikan objek tabel .

Sintaksis

CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])

Parameter

Istilah Definisi
expression Ekspresi yang akan dievaluasi.
filter1, filter2,… (Opsional) Ekspresi boolean atau ekspresi tabel yang menentukan filter, atau fungsi pengubah filter.

Ekspresi yang Anda gunakan sebagai parameter pertama berfungsi seperti ukuran.

Filter dapat berupa:

  • Ekspresi filter Boolean
  • Ekspresi filter tabel
  • Memfilter fungsi modifikasi

Saat Anda menggunakan beberapa filter, Anda dapat mengevaluasinya dengan menggunakan AND operator logis (&&), yang berarti semua kondisi harus TRUE, atau oleh OR operator logis (||), yang berarti salah satu kondisi dapat benar. Untuk informasi selengkapnya, lihat DAX operator logis operator>.

Ekspresi filter Boolean

Filter ekspresi Boolean adalah ekspresi yang mengevaluasi ke TRUE atau FALSE. Ini harus mengikuti beberapa aturan:

  • Ini dapat mereferensikan kolom dari satu tabel.

  • Ini tidak dapat mereferensikan ukuran.

  • Ini tidak dapat menggunakan fungsi berlapis CALCULATE .

  • Ini tidak dapat menggunakan fungsi yang memindai atau mengembalikan tabel kecuali Anda meneruskannya sebagai argumen ke fungsi agregasi.

  • Ini dapat berisi fungsi agregasi yang mengembalikan nilai skalar. Contohnya:

    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 FILTER fungsi untuk menerapkan kondisi filter yang kompleks, termasuk yang tidak dapat Anda tentukan oleh ekspresi filter Boolean.

Fungsi pengubah filter

Fungsi pengubah filter memungkinkan Anda melakukan lebih dari sekadar menambahkan filter. Mereka memberi Anda kontrol ekstra saat memodifikasi konteks filter.

Fungsi Maksud
REMOVEFILTERS Hapus semua filter, atau filter dari satu atau beberapa kolom tabel, atau dari semua kolom tabel tunggal.
ALL 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 tidak aktif antara kolom terkait, dalam hal ini hubungan aktif 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 alat Anda mendukung REMOVEFILTERS fungsi , gunakan untuk menghapus filter.

Mengembalikan nilai

Nilai yang dihasilkan dari ekspresi.

Komentar

  • Saat Anda memberikan ekspresi filter, CALCULATE fungsi memodifikasi konteks filter untuk mengevaluasi ekspresi. Untuk setiap ekspresi filter, ada dua hasil standar saat ekspresi filter tidak dibungkus dalam KEEPFILTERS fungsi:

    • Jika kolom atau tabel tidak berada dalam konteks filter, filter baru ditambahkan ke konteks filter untuk mengevaluasi ekspresi.
    • Jika kolom atau tabel sudah berada dalam konteks filter, filter yang ada ditimpa oleh filter baru untuk mengevaluasi CALCULATE ekspresi.
  • CALCULATE Menggunakan fungsi tanpa filter mencapai persyaratan tertentu. Ini mentransisikan konteks baris untuk memfilter konteks. Transisi 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. Saat Anda menggunakan pengukuran model 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

Contoh dalam artikel ini dapat digunakan dengan contoh model Power BI Desktop Adventure Works DW 2020. Untuk mendapatkan model, lihat DAX contoh model.

Definisi pengukuran tabel Penjualan berikut menghasilkan hasil pendapatan, tetapi hanya untuk produk yang memiliki warna biru.

Blue Revenue =
CALCULATE ( SUM ( Sales[Sales Amount] ), 'Product'[Color] = "Blue" )
Golongan Jumlah Penjualan Pendapatan Biru
Aksesoris $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 tabel Saleskolom Jumlah Penjualan dalam konteks filter yang dimodifikasi. Filter baru ditambahkan ke tabel Produk kolom Warna—atau, filter menimpa filter apa pun yang sudah diterapkan ke kolom.

Definisi pengukuran tabel Sales berikut menghasilkan rasio penjualan atas penjualan untuk semua saluran penjualan.

Revenue % Total Channel =
DIVIDE (
    SUM ( Sales[Sales Amount] ),
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        REMOVEFILTERS ( 'Sales Order'[Channel] )
    )
)
Channel Jumlah Penjualan Pendapatan % Total Saluran
internet $29.358.677,22 26.74%
Reseller $80.450.596,98 73.26%
Total $109.809.274,20 100.00%

Fungsi DIVIDE membagi ekspresi yang menjumlahkan tabel Salesnilai kolom Jumlah 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 tabel Sales Orderkolom Saluran.

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, mereka High.

Customer Segment =
IF (
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        ALLEXCEPT ( Customer, Customer[CustomerKey] )
    ) < 2500,
    "Low",
    "High"
)
Segmen Pelanggan Jumlah Pelanggan Jumlah Penjualan
High 4,637 $102.670.663,09
Low 13,848 $7.138.611,11
Total 18,485 $109.809.274,20

Dalam contoh ini, konteks baris dikonversi ke konteks filter. Ini dikenal sebagai transisi konteks . Fungsi menghapus filter dari semua kolom tabel Pelanggan kecuali kolom CustomerKey.