Arbeiten mit leeren Werten

Ein leerer Wert zeigt an, dass ein bestimmtes Element, Tupel oder eine Zelle leer ist. Ein leerer Zellwert zeigt entweder an, dass die Daten für die spezifizierte Zelle nicht in der zugrunde liegenden Faktentabelle gefunden werden können, oder dass das Tupel für die angegebene Zelle eine Kombination von Elementen darstellt, die für den Würfel nicht anwendbar ist.

Note

Obwohl ein leerer Wert sich von einem Wert von null unterscheidet, wird ein leerer Wert meist als null behandelt.

Die folgende Abfrage veranschaulicht das Verhalten von leeren und nullen 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 genau dann TRUE zurück, wenn die durch das in der Funktion angegebene Tupel identifizierte Zelle leer ist. Andernfalls gibt die Funktion FALSCH zurück.

    Note

    Die IsEmpty-Funktion kann nicht bestimmen, ob ein Mitgliederausdruck einen Nullwert zurückgibt. Um zu bestimmen, ob ein Nullmitglied aus einem Ausdruck zurückgegeben wird, verwenden Sie den IS-Operator .

  • Wenn der Wert der leeren Zelle ein Operand für einen der numerischen Operatoren (+, -, *, /) ist, wird der Wert der leeren Zelle als null behandelt, wenn der andere Operand ein nichtleerer Wert ist. Sind beide Operanden leer, gibt der numerische Operator den Wert der leeren Zelle zurück.

  • Wenn der Wert der leeren Zelle ein Operand für den String-Verkettungsoperator (+) ist, wird der Wert der leeren Zelle als leere Zeichenkette behandelt, wenn der andere Operand ein nichtleerer Wert ist. Sind beide Operanden leer, gibt der String-Verkettungsoperator den Wert der leeren Zelle zurück.

  • Wenn der Wert der leeren Zelle ein Operand für einen der Vergleichsoperatoren ist (=. <>, >=, <=, >, , <), wird der Wert der leeren Zelle als Null oder als leere Zeichenkette behandelt, abhängig davon, ob der Datentyp des anderen Operandens numerisch oder eine Zeichenkette ist. Sind beide Operanden leer, werden beide als null behandelt.

  • Beim Zusammenstellen numerischer Werte wird der leere Zellwert an derselben Stelle wie Null kollidiert. Zwischen dem Wert der leeren Zelle und Null sortiert leere vor Null.

  • Beim Zusammenstellen von String-Werten kolheriert der leere Zellwert an derselben Stelle wie der leere String. Zwischen dem Wert der leeren Zelle und der leeren Zeichenkette sortiert leere vor einer leeren Zeichenkette.

Umgang mit leeren Werten in MDX-Anweisungen und Würfeln

In Multidimensional Expressions (MDX)-Anweisungen kann man nach leeren Werten suchen und dann bestimmte Berechnungen auf Zellen mit gültigen (also nicht leeren) Daten durchführen. Das Eliminieren leerer Werte bei Berechnungen kann wichtig sein, da bestimmte Berechnungen, wie ein Durchschnitt, ungenau sein können, wenn leere Zellwerte enthalten sind.

Wenn leere Werte in deinen zugrundeliegenden Faktentabellendaten gespeichert sind, werden sie standardmäßig in Nullen umgewandelt, wenn der Würfel verarbeitet wird. Man kann die Option Nullverarbeitung bei einem Maß verwenden, um zu steuern, ob Nullfakten in 0 umgewandelt, in einen leeren Wert umgewandelt oder sogar während der Verarbeitung einen Fehler auslösen. Wenn Sie nicht möchten, dass leere Zellwerte in Ihren Abfrageergebnissen erscheinen, sollten Sie Abfragen, berechnete Mitglieder oder MDX-Script-Anweisungen erstellen, die die leeren Werte entfernen oder durch andere Werte ersetzen.

Um leere Zeilen oder Spalten aus einer Abfrage zu entfernen, kann man die NON EMPTY-Anweisung vor der Achsenmengendefinition verwenden. Zum Beispiel liefert die folgende Abfrage nur die Produktkategorie Fahrräder, 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])  

Allgemeiner kann man zur Entfernung leerer Tupel aus einer Menge die Funktion NonEmpty verwenden. Die folgende Abfrage zeigt zwei berechnete Messgrößen, von denen eine die Anzahl der Produktkategorien zählt und die zweite die Anzahl der Produktkategorien, die Werte für das Maß [Internetsteuerbetrag] 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]  

Weitere Informationen finden Sie unter NonEmpty (MDX).

Leere Werte und Vergleichsoperatoren

Wenn leere Werte in den Daten vorhanden sind, können logische und Vergleichsoperatoren potenziell ein drittes Ergebnis von EMPTY anstelle nur von TRUE oder FALSE zurückgeben. Diese Notwendigkeit einer dreiwertigen Logik ist die Ursache für zahlreiche Anwendungsfehler. Diese Tabellen zeigen die Wirkung der Einführung von Leerwertvergleichen.

Diese Tabelle zeigt die Ergebnisse der Anwendung eines UND-Operators auf zwei Boolesche Operanden.

UND WAHR EMPTY FALSE
STIMMT WAHR FALSE FALSE
LEER FALSE EMPTY FALSE
FALSCH FALSE FALSE FALSE

Diese Tabelle zeigt die Ergebnisse der Anwendung eines OR-Operators auf zwei Boolesche Operanden.

OR WAHR FALSE
STIMMT WAHR WAHR
LEER WAHR WAHR
FALSCH WAHR FALSE

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

Boolesche Ausdrücke, auf die der NOT-Operator angewendet wird Auswertungsergebnis
WAHR FALSE
EMPTY EMPTY
FALSE WAHR