Arbeiten mit leeren Werten

Ein leerer Wert kennzeichnet, dass ein bestimmtes Element, ein bestimmtes Tupel oder eine bestimmte Zelle leer ist. Ein leerer Zellenwert kennzeichnet entweder, dass die Daten für die angegebene Zelle in der zugrunde liegenden Faktentabelle nicht gefunden wurden, oder, dass das Tupel für die angegebene Zelle einer Kombination aus Elementen entspricht, die für den Cube nicht anwendbar ist.

HinweisHinweis

Ein leerer Wert ist zwar nicht mit dem Wert 0 identisch, wird aber meistens wie der Wert 0 behandelt.

Die folgende Abfrage veranschaulicht das Verhalten von leeren Werten und von 0-Werten:

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])

Die folgenden Informationen gelten für leere Werte:

  • Die IsEmpty-Funktion gibt TRUE zurück, wenn die Zelle, die durch den in der Funktion angegebenen Tupel identifiziert ist, leer ist. Andernfalls gibt die Funktion FALSE zurück.

    HinweisHinweis

    Die IsEmpty-Funktion kann nicht feststellen, ob ein Elementausdruck einen NULL-Wert zurückgibt. Um zu bestimmen, ob von einem Ausdruck ein NULL-Element zurückgegeben wird, verwenden Sie den IS-Operator.

  • Ist der leere Zellwert ein Operand für einen der numerischen Operatoren (+, -, *, /), wird der leere Zellwert als 0 behandelt, wenn der andere Operand ein nicht leerer Wert ist. Sind beide Operanden leer, gibt der numerische Operator den leeren Zellwert zurück.

  • Ist der leere Zellwert ein Operand für den Operator für Zeichenfolgenverkettungen (+), wird der leere Zellwert als leere Zeichenfolge behandelt, wenn der andere Operand ein nicht leerer Wert ist. Sind beide Operanden leer, gibt der Operator für Zeichenfolgenverkettungen den leeren Zellwert zurück.

  • Wenn der leere Zellwert ein Operand für einen der Vergleichsoperatoren (=. <>, >=, <=, >, <) ist, wird er als 0 oder leere Zeichenfolge behandelt, abhängig davon, ob der Datentyp des anderen Operanden entsprechend ein numerischer Typ oder eine Zeichenfolge ist. Sind beide Operanden leer, werden beide als 0 behandelt.

  • Beim Sortieren numerischer Werte nimmt der leere Zellwert dieselbe Stelle ein wie die Zahl Null. Bei der Sortierung zwischen dem leeren Zellwert und null wird der leere Zellwert vor null eingeordnet.

  • Beim Sortieren von Zeichenfolgenwerten nimmt der leere Zellwert dieselbe Stelle ein wie die leere Zeichenfolge. Bei der Sortierung zwischen dem leeren Zellwert und der leeren Zeichenfolge wird der leere Zellwert vor der leeren Zeichenfolge eingeordnet.

Umgehen mit leeren Werten in MDX-Anweisungen und Cubes

In MDX-Anweisungen (Multidimensional Expressions) können Sie nach leeren Werten suchen und dann bestimmte Berechnungen für Zellen ausführen, die gültige (also nicht leere) Daten enthalten. Das Entfernen von leeren Werten aus Berechnungen kann wichtig sein, da bestimmte Berechnungen (z. B. eine Durchschnittsberechnung) verfälscht werden können, wenn leere Zellwerte eingeschlossen werden.

Leere Werte, die in den Daten der zugrundeliegenden Faktentabelle gespeichert sind, werden bei der Verarbeitung des Cube standardmäßig in 0 konvertiert. Sie können für ein Measure die Option NULL-Verarbeitung verwenden, um NULL-Werte so zu ändern, dass NULL in 0 oder einen leeren Wert konvertiert wird, oder dass während der Verarbeitung ein Fehler ausgelöst wird. Wenn Sie nicht möchten, dass die Abfrageergebnisse leere Zellenwerte enthalten, erstellen Sie Abfragen, berechnete Elemente oder MDX-Skriptanweisungen, die leere Werte entweder ausschließen oder durch einen anderen Wert ersetzen.

Um leere Zeilen oder Spalten aus einer Abfrage zu entfernen, können Sie vor der Achsmengendefinition die NON EMPTY-Anweisung verwenden. Die folgende Beispielabfrage gibt nur die Produktkategorie „Bikes“ zurück, da dies die einzige Kategorie ist, die im Kalenderjahr 2001 verkauft wurde.

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])

Um leere Tupel aus einer Menge zu entfernen, können Sie grundsätzlich die NonEmpty-Funktion verwenden. Die folgende Abfrage zeigt zwei berechnete Measures. Eines zählt die Produktkategorien, während das andere die Anzahl der Produktkategorien anzeigt, die Werte für Measure [Internet Tax Amount] und das Kalenderjahr 2001 enthalten:

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]

Unter NonEmpty (MDX) finden Sie weitere Informationen.

Leere Werte und Vergleichsoperatoren

Sind leere Werte in den Daten vorhanden, ist es möglich, dass logische Operatoren und Vergleichsoperatoren nicht nur TRUE oder FALSE zurückgeben, sondern ein drittes Ergebnis: EMPTY. Diese Notwendigkeit einer dreiwertigen Logik ist die Ursache für zahlreiche Anwendungsfehler. In den folgenden Tabellen wird dargestellt, welche Auswirkungen die Einführung von Vergleichen zwischen leeren Werten haben kann.

Die folgende Tabelle zeigt die Ergebnisse des Anwendens eines AND-Operators auf zwei boolesche Operanden.

AND

TRUE

EMPTY

FALSE

TRUE

TRUE

FALSE

FALSE

EMPTY

FALSE

EMPTY

FALSE

FALSE

FALSE

FALSE

FALSE

Die folgende Tabelle zeigt die Ergebnisse des Anwendens eines OR-Operators auf zwei boolesche Operanden.

OR

TRUE

FALSE

TRUE

TRUE

TRUE

EMPTY

TRUE

TRUE

FALSE

TRUE

FALSE

Die folgende Tabelle zeigt, wie der NOT-Operator das Ergebnis eines booleschen Operators negiert oder umkehrt.

Boolescher Ausdruck, auf den der NOT-Operator angewendet wird

Auswertungsergebnis

TRUE

FALSE

EMPTY

EMPTY

FALSE

TRUE