Bekerja dengan Nilai Kosong

Nilai kosong menunjukkan bahwa anggota, tuple, atau sel tertentu kosong. Nilai sel kosong menunjukkan bahwa data untuk sel yang ditentukan tidak dapat ditemukan dalam tabel fakta dasar, atau bahwa tuple untuk sel yang ditentukan mewakili kombinasi anggota yang tidak berlaku untuk kubus.

Note

Meskipun nilai kosong berbeda dari nilai nol, nilai kosong biasanya diperlakukan sebagai nol sebagian besar waktu.

Kueri berikut mengilustrasikan perilaku nilai kosong dan nol:

WITH  
//A calculated Product Category that always returns 0  
MEMBER [Product].[Category].[All Products].ReturnZero AS 0  
//Will return true for any null value  
MEMBER MEASURES.ISEMPTYDemo AS ISEMPTY([Measures].[Internet Tax Amount])  
//Will true for any null or zero value  
//To be clear: the expression 0=null always returns true in MDX  
MEMBER MEASURES.IsZero AS [Measures].[Internet Tax Amount]=0  
SELECT  
{[Measures].[Internet Tax Amount],MEASURES.ISEMPTYDemo,MEASURES.IsZero}  
ON COLUMNS,  
[Product].[Category].[Category].ALLMEMBERS  
ON ROWS  
FROM [Adventure Works]  
WHERE([Date].[Calendar].[Calendar Year].&[2001])  

Informasi berikut berlaku untuk nilai kosong:

  • Fungsi IsEmpty mengembalikan TRUE jika dan hanya jika sel yang diidentifikasi oleh tuple yang ditentukan dalam fungsi tersebut kosong. Jika tidak, fungsi akan mengembalikan FALSE.

    Note

    Fungsi IsEmpty tidak dapat menentukan apakah ekspresi anggota mengembalikan nilai null. Untuk menentukan apakah anggota null dikembalikan dari sebuah ekspresi, gunakan operator IS .

  • Ketika nilai sel kosong adalah operand untuk salah satu operator numerik (+, -, *, /), nilai sel kosong diperlakukan sebagai nol jika operand lainnya adalah nilai tidak kosong. Jika kedua operand kosong, operator numerik mengembalikan nilai sel kosong.

  • Ketika nilai sel kosong adalah operand untuk operator penggabungan string (+), nilai sel kosong diperlakukan sebagai string kosong jika operand lainnya adalah nilai tidak kosong. Jika kedua operan kosong, operator penggabungan string mengembalikan nilai sel kosong.

  • Ketika nilai sel kosong adalah operand untuk salah satu operator perbandingan (=. <>, >=, =, ><, ), <nilai sel kosong diperlakukan sebagai nol atau string kosong, tergantung apakah tipe data operand lain bersifat numerik atau string, masing-masing. Jika kedua operan kosong, kedua operan diperlakukan sebagai nol.

  • Saat mengumpulkan nilai numerik, nilai sel kosong dikumpulkan di tempat yang sama dengan nol. Antara nilai sel kosong dan nol, kolase kosong sebelum nol.

  • Saat mengumpulkan nilai string, nilai sel kosong akan dikumpulkan di tempat yang sama dengan string kosong. Di antara nilai sel kosong dan string kosong, empty kolasi sebelum string kosong.

Menangani Nilai Kosong dalam Pernyataan dan Kubus MDX

Dalam pernyataan Multidimensional Expressions (MDX), Anda dapat mencari nilai kosong lalu melakukan perhitungan tertentu pada sel dengan data valid (yaitu, tidak kosong). Menghilangkan nilai kosong saat melakukan perhitungan bisa penting karena beberapa perhitungan, seperti rata-rata, bisa tidak akurat jika nilai sel kosong dimasukkan.

Jika nilai kosong disimpan dalam data tabel fakta yang mendasarinya, secara default nilai tersebut akan dikonversi menjadi nol saat kubus diproses. Anda dapat menggunakan opsi Null Processing pada sebuah ukuran untuk mengontrol apakah null facts diubah menjadi 0, diubah menjadi nilai kosong, atau bahkan melemparkan error selama pemrosesan. Jika Anda tidak ingin nilai sel kosong muncul di hasil kueri Anda, Anda harus membuat kueri, anggota terhitung, atau pernyataan Skrip MDX yang menghilangkan nilai kosong atau menggantinya dengan nilai lain.

Untuk menghapus baris atau kolom kosong dari kueri, Anda dapat menggunakan pernyataan NON EMPTY sebelum definisi himpunan sumbu. Sebagai contoh, kueri berikut hanya mengembalikan Sepeda Kategori Produk karena itu adalah satu-satunya Kategori yang terjual pada Tahun Kalender 2001:

SELECT  
{[Measures].[Internet Tax Amount]}  
ON COLUMNS,  
//Comment out the following line to display all the empty rows for other Categories  
NON EMPTY  
[Product].[Category].[Category].MEMBERS  
ON ROWS  
FROM [Adventure Works]  
WHERE([Date].[Calendar].[Calendar Year].&[2001])  

Secara lebih umum, untuk menghapus tuple kosong dari himpunan Anda dapat menggunakan fungsi NonEmpty. Kueri berikut menunjukkan dua ukuran yang telah dihitung, satu menghitung jumlah Kategori Produk dan yang kedua menunjukkan jumlah Kategori Produk yang memiliki nilai untuk ukuran [Jumlah Pajak Internet] dan Tahun Kalender 2001:

WITH  
MEMBER MEASURES.CategoryCount AS  
COUNT([Product].[Category].[Category].MEMBERS)  
MEMBER MEASURES.NonEmptyCategoryCountFor2001 AS  
COUNT(  
NONEMPTY(  
[Product].[Category].[Category].MEMBERS  
,([Date].[Calendar].[Calendar Year].&[2001], [Measures].[Internet Tax Amount])  
))  
SELECT  
{MEASURES.CategoryCount,MEASURES.NonEmptyCategoryCountFor2001 }  
ON COLUMNS  
FROM [Adventure Works]  

Untuk informasi lebih lanjut, lihat NonEmpty (MDX).

Nilai kosong dan operator perbandingan

Ketika nilai kosong hadir dalam data, operator logika dan perbandingan berpotensi mengembalikan hasil ketiga berupa KOSONG, bukan hanya BENAR atau SALAH. Kebutuhan untuk logika bernilai tiga ini adalah sumber dari banyak kesalahan aplikasi. Tabel-tabel ini menguraikan efek dari pengenalan perbandingan nilai kosong.

Tabel ini menunjukkan hasil penerapan operator AND pada dua operan Boolean.

AND BENAR EMPTY FALSE
BENAR BENAR FALSE FALSE
KOSONG FALSE EMPTY FALSE
FALSE FALSE FALSE FALSE

Tabel ini menunjukkan hasil penerapan operator OR pada dua operan Boolean.

OR BENAR FALSE
BENAR BENAR BENAR
KOSONG BENAR BENAR
FALSE BENAR FALSE

Tabel ini menunjukkan bagaimana operator NOT meniadakan atau membalikkan hasil dari operator Boolean.

Ekspresi Boolean yang diterapkan operator NOT Mengevaluasi ke
BENAR FALSE
EMPTY EMPTY
FALSE BENAR