Bagikan melalui


Menghindari menggunakan FILTER sebagai argumen filter

Sebagai pemodel data, umumnya Anda akan menulis ekspresi DAX yang perlu dievaluasi dalam konteks filter yang dimodifikasi. Misalnya, Anda dapat menulis definisi pengukuran untuk menghitung penjualan untuk "produk margin tinggi". Kami akan menjelaskan perhitungan ini nanti di artikel ini.

Catatan

Artikel ini sangat relevan untuk perhitungan model yang menerapkan filter ke Impor tabel.

Fungsi CALCULATE dan CALCULATETABLE DAX adalah fungsi penting dan berguna. Mereka memungkinkan Anda menulis perhitungan yang menghapus atau menambahkan filter, atau mengubah jalur hubungan. Ini dilakukan dengan meneruskan argumen filter, yang merupakan ekspresi Boolean, ekspresi tabel, atau fungsi filter khusus. Kita hanya akan membahas Boolean dan ekspresi tabel dalam artikel ini.

Pertimbangkan definisi pengukuran berikut, yang menghitung penjualan produk merah dengan menggunakan ekspresi tabel. Ini akan menggantikan filter apa pun yang mungkin diterapkan ke tabel Produk .

Red Sales =
CALCULATE(
    [Sales],
    FILTER('Product', 'Product'[Color] = "Red")
)

Fungsi CALCULATE menerima ekspresi tabel yang dikembalikan oleh fungsi FILTER DAX, yang mengevaluasi ekspresi filternya untuk setiap baris tabel Produk . Ini mencapai hasil yang benar — hasil penjualan untuk produk merah. Namun, itu dapat dicapai jauh lebih efisien dengan menggunakan ekspresi Boolean.

Berikut adalah definisi pengukuran yang ditingkatkan, yang menggunakan ekspresi Boolean alih-alih ekspresi tabel. Fungsi KEEPFILTERS DAX memastikan filter yang ada yang diterapkan ke kolom Warna dipertahankan, dan tidak ditimpa.

Red Sales =
CALCULATE(
    [Sales],
    KEEPFILTERS('Product'[Color] = "Red")
)

Disarankan agar Anda meneruskan argumen filter sebagai ekspresi Boolean, jika memungkinkan. Ini karena tabel Impor model adalah penyimpanan kolom dalam memori. Kolom secara eksplisit dioptimalkan untuk memfilter kolom secara efisien dengan cara ini.

Namun, ada pembatasan yang berlaku untuk ekspresi Boolean saat digunakan sebagai argumen filter. Mereka:

  • Tidak dapat mereferensikan kolom dari beberapa tabel
  • Tidak dapat mereferensikan ukuran
  • Tidak dapat menggunakan fungsi CALCULATE berlapis
  • Tidak dapat menggunakan fungsi yang memindai atau mengembalikan tabel

Ini berarti Anda harus menggunakan ekspresi tabel untuk persyaratan filter yang lebih kompleks.

Pertimbangkan sekarang definisi pengukuran yang berbeda. Persyaratannya adalah menghitung penjualan, tetapi hanya selama berbulan-bulan yang telah mencapai keuntungan.

Sales for Profitable Months =
CALCULATE(
    [Sales],
    FILTER(
        VALUES('Date'[Month]),
        [Profit] > 0
    )
)

Dalam contoh ini, fungsi FILTER harus digunakan. Ini karena perlu mengevaluasi langkah-langkah Profit untuk menghilangkan bulan-bulan yang tidak mencapai keuntungan. Tidak dimungkinkan untuk menggunakan pengukuran dalam ekspresi Boolean saat digunakan sebagai argumen filter.

Rekomendasi

Untuk performa terbaik, disarankan Anda menggunakan ekspresi Boolean sebagai argumen filter, jika memungkinkan.

Oleh karena itu, fungsi FILTER hanya boleh digunakan jika diperlukan. Anda dapat menggunakannya untuk melakukan filter perbandingan kolom yang kompleks. Perbandingan kolom ini dapat melibatkan: