Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wartość pusta oznacza, że dany członko, krotka lub komórka jest pusta. Wartość pustej komórki oznacza, że dane dla danej komórki nie mogą być znalezione w podstawowej tabeli faktów, albo że krotka dla danej komórki reprezentuje kombinację elementów, która nie jest odpowiednia dla kostki.
Note
Chociaż wartość pusta różni się od wartości zero, wartość pusta jest zazwyczaj traktowana jako zerowa.
Następujące zapytanie ilustruje zachowanie wartości pustych i zerowych:
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])
Następujące informacje dotyczą wartości pustych:
Funkcja IsEmpty zwraca TRUE wtedy i tylko wtedy, gdy komórka zidentyfikowana przez krotkę określoną w funkcji jest pusta. W przeciwnym razie funkcja zwraca FALSE.
Note
Funkcja IsEmpty nie może określić, czy wyrażenie członkowskie zwraca wartość zerową. Aby określić, czy element zerowy jest zwracany z wyrażenia, użyj operatora IS .
Gdy wartość pustej komórki jest operandem dla dowolnego operatora numerycznego (+, -, *, /), wartość pustej komórki traktowana jest jako zero, jeśli drugi operand jest wartością niepustą. Jeśli oba operandy są puste, operator liczbowy zwraca wartość pustej komórki.
Gdy wartość pustej komórki jest operandem dla operatora konkatenacji łańcuchów (+), wartość pustej komórki traktowana jest jako ciąg mówiący, jeśli drugi operand jest wartością niepustą. Jeśli oba operandy są puste, operator konkatenacji łańcuchów zwraca wartość pustej komórki.
Gdy wartość pustej komórki jest operandem dla dowolnego operatora porównawczego (=. <>, >=, =, ><, ), <wartość pustej komórki traktowana jest jako zero lub jako pusty ciąg tekstów, w zależności od tego, czy typ danych drugiego operandu jest odpowiednio numeryczny czy ciągowy znak. Jeśli oba operandy są puste, oba operandy traktowane są jako zerowe.
Podczas zestawienia wartości liczbowych wartość pustej komórki sumuje się w tym samym miejscu co zero. Pomiędzy wartością pustej komórki a zerem, pusta sumuje się przed zerem.
Podczas zestawienia wartości łańcucha wierszy wartość pustej komórki jest kumulowana w tym samym miejscu co ciąg bez tekstu. Pomiędzy wartością pustej komórki a pustym ciągiem prosty zestawia się przed pustym ciągiem.
Radzenie sobie z wartościami pustymi w instrukcjach i kostkach MDX
W instrukcjach Multidimensional Expressions (MDX) można szukać pustych wartości, a następnie wykonywać określone obliczenia na komórkach z prawidłowymi (czyli niepustymi) danymi. Eliminowanie wartości pustych podczas obliczeń może być istotne, ponieważ niektóre obliczenia, takie jak średnia, mogą być niedokładne, jeśli uwzględnione są wartości pustych komórek.
Jeśli puste wartości są przechowywane w bazowych danych tabeli faktów, domyślnie zostaną przekształcone w zera podczas przetwarzania kostki. Możesz użyć opcji Null Processing na miare, aby kontrolować, czy fakty zerowe zostaną przekształcone w 0, przekształcone w wartość pustą, a nawet wygenerowane są błędy podczas przetwarzania. Jeśli nie chcesz, aby puste wartości komórek pojawiały się w wynikach zapytań, powinieneś tworzyć zapytania, obliczane elementy lub instrukcje skryptowe MDX, które eliminują puste wartości lub zastępują je inną wartością.
Aby usunąć puste wiersze lub kolumny z zapytania, możesz użyć polecenia NON EMPTY przed definicją zbioru osi. Na przykład następujące zapytanie zwraca tylko kategorię produktu Rowery, ponieważ jest to jedyna kategoria sprzedana w roku kalendarzowym 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])
Ogólniej, aby usunąć puste krotki z zbioru, można użyć funkcji NonEmpty. Poniższe zapytanie pokazuje dwie obliczone miary, z których jedna liczy liczbę kategorii produktów, a druga liczbę kategorii produktów, które mają wartości dla miary [Kwota podatku internetowego] oraz roku kalendarzowego 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]
Więcej informacji można znaleźć w artykule NonEmpty (MDX).
Wartości puste i operatory porównawcze
Gdy w danych występują wartości puste, operatory logiczne i porównawcze mogą potencjalnie zwrócić trzeci wynik EMPTY zamiast tylko TRUE lub FALSE. Ta potrzeba logiki trzywartościowej jest źródłem wielu błędów aplikacji. Te tabele opisują efekt wprowadzenia porównań wartości pustych.
Ta tabela pokazuje wyniki zastosowania operatora AND do dwóch operandów boolowskich.
| AND | TRUE | PUSTY | FALSE |
|---|---|---|---|
| TRUE | TRUE | FALSE | FALSE |
| PUSTY | FALSE | PUSTY | FALSE |
| FALSE | FALSE | FALSE | FALSE |
Ta tabela pokazuje wyniki zastosowania operatora OR do dwóch operandów boole'a.
| OR | TRUE | FALSE |
|---|---|---|
| TRUE | TRUE | TRUE |
| PUSTY | TRUE | TRUE |
| FALSE | TRUE | FALSE |
Ta tabela pokazuje, jak operator NOT neguje lub odwraca wynik operatora Boole'a.
| Wyrażenie boolowsko, do którego stosuje się operator NOT | Ocenia |
|---|---|
| TRUE | FALSE |
| PUSTY | PUSTY |
| FALSE | TRUE |