Bagikan melalui


Gunakan SELECTEDVALUE alih-alih VALUES

Sebagai pemodel data, terkadang Anda mungkin perlu menulis ekspresi DAX yang menguji apakah kolom difilter oleh nilai tertentu.

Dalam versi DAXsebelumnya , persyaratan ini dicapai dengan aman dengan menggunakan pola yang melibatkan tiga fungsi DAX; IF, HASONEVALUE, dan VALUES. Definisi pengukuran berikut menyajikan contoh. Ini menghitung jumlah pajak penjualan, tetapi hanya untuk penjualan yang dilakukan kepada pelanggan Australia.

Australian Sales Tax =
IF(
    HASONEVALUE(Customer[Country-Region]),
    IF(
        VALUES(Customer[Country-Region]) = "Australia",
        [Sales] * 0.10
    )
)

Dalam contoh, fungsi HASONEVALUE mengembalikan TRUE hanya ketika satu nilai dari kolom Wilayah Negara terlihat dalam konteks filter saat ini. Ketika TRUE, fungsi VALUES dibandingkan dengan teks harfiah "Australia". Ketika fungsi VALUES mengembalikan TRUE, ukuran Sales dikalikan dengan 0,10 (mewakili 10%). Jika fungsi HASONEVALUE mengembalikan FALSE—karena lebih dari satu nilai memfilter kolom—fungsi IF pertama mengembalikan BLANK.

Penggunaan HASONEVALUE adalah teknik defensif. Diperlukan karena ada kemungkinan beberapa nilai memfilter kolom Wilayah Negara. Dalam hal ini, fungsi VALUES mengembalikan tabel beberapa baris. Membandingkan tabel beberapa baris dengan nilai skalar menghasilkan kesalahan.

Rekomendasi

Disarankan agar Anda menggunakan fungsi SELECTEDVALUE. Ini mencapai hasil yang sama dengan pola yang dijelaskan dalam artikel ini, namun lebih efisien dan elegan.

Menggunakan fungsi SELECTEDVALUE, contoh definisi pengukuran sekarang ditulis ulang.

Australian Sales Tax =
IF(
    SELECTEDVALUE(Customer[Country-Region]) = "Australia",
    [Sales] * 0.10
)

Saran

Dimungkinkan untuk meneruskan nilai hasil alternatif ke dalam fungsi . Nilai hasil alternatif dikembalikan saat tidak ada filter—atau beberapa filter—diterapkan ke kolom.