Arbeta med tomma värden

Ett tomt värde indikerar att en specifik medlem, tuple eller cell är tom. Ett tomt cellvärde indikerar antingen att data för den angivna cellen inte kan hittas i den underliggande faktatabellen, eller att tuplen för den angivna cellen representerar en kombination av medlemmar som inte är tillämplig för kuben.

Note

Även om ett tomt värde skiljer sig från ett värde på noll, behandlas ett tomt värde vanligtvis som noll för det mesta.

Följande fråga illustrerar beteendet hos tomma och nollvärden:

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

Följande information gäller för tomma värden:

  • Funktionen IsEmpty returnerar TRUE om och endast om cellen som identifieras av tuplen som anges i funktionen är tom. Annars returnerar funktionen FALSKT.

    Note

    IsEmpty-funktionen kan inte avgöra om ett medlemsuttryck returnerar ett nollvärde. För att avgöra om en nullmedlem returneras från ett uttryck, använd IS-operatorn .

  • När det tomma cellvärdet är en operand för någon av de numeriska operatorerna (+, -, *, /), behandlas det tomma cellvärdet som noll om den andra operanden är ett icke-tomt värde. Om båda operanderna är tomma, returnerar den numeriska operatorn värdet för tomma celler.

  • När det tomma cellvärdet är en operand för strängens sammanfogningsoperator (+), behandlas det tomma cellvärdet som en tom sträng om den andra operanden är ett icke-tomt värde. Om båda operanderna är tomma, returnerar strängkonkateneringsoperatorn det tomma cellvärdet.

  • När det tomma cellvärdet är en operand för någon av jämförelseoperatorerna (=. <>, =, <=, >, , ), <behandlas värdet på den tomma cellen som noll eller en tom sträng, beroende på om datatypen för den andra operanden är numerisk >eller sträng. Om båda operanderna är tomma behandlas båda operanderna som noll.

  • När numeriska värden sammanställs samlas värdet på tomma cellen på samma plats som noll. Mellan det tomma cellvärdet och noll sorteras tomt före noll.

  • När strängvärden sorteras sammanställs värdet av den tomma cellen på samma plats som den tomma strängen. Mellan det tomma cellvärdet och den tomma strängen sorterar empty före en tom sträng.

Hantering av tomma värden i MDX-satser och kuber

I Multidimensional Expressions (MDX)-satser kan du leta efter tomma värden och sedan utföra vissa beräkningar på celler med valida (det vill säga inte tomma) data. Att eliminera tomma värden vid beräkningar kan vara viktigt eftersom vissa beräkningar, såsom ett genomsnitt, kan vara felaktiga om tomma cellvärden inkluderas.

Om tomma värden lagras i din underliggande faktatabellsdata kommer de som standard att konverteras till nollor när kuben bearbetas. Du kan använda alternativet Null Processing på ett mått för att styra om nullfakta omvandlas till 0, konverteras till ett tomt värde, eller till och med kastar ett fel under bearbetningen. Om du inte vill att tomma cellvärden ska visas i dina frågeresultat bör du skapa frågor, beräknade medlemmar eller MDX Script-satser som eliminerar de tomma värdena eller ersätter dem med något annat värde.

För att ta bort tomma rader eller kolumner från en fråga kan du använda NON EMPTY-satsen före axelmängdsdefinitionen. Till exempel returnerar följande sökning endast Produktkategori Cyklar eftersom det är den enda kategorin som såldes under kalenderåret 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])  

Mer generellt, för att ta bort tomma tupler från en mängd kan du använda funktionen NonEmpty. Följande fråga visar två beräknade mått, varav det ena räknar antalet produktkategorier och det andra visar antalet produktkategorier som har värden för måttet [Internet Tax Amount] och kalenderåret 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]  

För mer information, se NonEmpty (MDX).

Tomma värden och jämförelseoperatorer

När tomma värden finns i data kan logiska och jämförelseoperatorer potentiellt returnera ett tredje resultat av EMPTY istället för bara SANT eller FALSKT. Det här behovet av trevärdeslogik är en källa till många programfel. Dessa tabeller beskriver effekten av att införa jämförelser av tomt värde.

Denna tabell visar resultaten av att applicera en OCH-operator på två booleska operander.

AND SANT EMPTY FALSE
TRUE SANT FALSE FALSE
TOMT FALSE EMPTY FALSE
FALSE FALSE FALSE FALSE

Denna tabell visar resultaten av att tillämpa en ELLER-operator på två booleska operander.

OR SANT FALSE
TRUE SANT SANT
TOMT SANT SANT
FALSE SANT FALSE

Denna tabell visar hur NOT-operatorn negerar, eller vänder, resultatet av en boolesk operator.

Boolesk uttryck där NOT-operatorn tillämpas Utvärderar till
SANT FALSE
EMPTY EMPTY
FALSE SANT