빈 값 작업
빈 값은 특정 멤버, 튜플 또는 셀이 비어 있음을 나타냅니다. 빈 셀 값은 기본 팩트 테이블에서 지정된 셀의 데이터를 찾을 수 없거나 지정된 셀의 튜플이 큐브에 적용되지 않는 멤버 조합을 나타낸다는 것을 나타냅니다.
참고 항목
빈 값은 0 값과 다르지만 빈 값은 일반적으로 대부분의 경우 0으로 처리됩니다.
다음 쿼리는 빈 값과 0 값의 동작을 보여 줍니다.
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])
다음 정보는 빈 값에 적용됩니다.
IsEmpty 함수는 함수에 지정된 튜플로 식별된 셀이 비어 있는 경우에만 TRUE를 반환 합니다. 그렇지 않으면 함수는 FALSE를 반환합니다.
참고 항목
IsEmpty 함수는 멤버 식이 null 값을 반환하는지 여부를 확인할 수 없습니다. 식에서 null 멤버가 반환되는지 여부를 확인하려면 IS 연산자를 사용합니다.
빈 셀 값이 숫자 연산자(+, -, *, /) 중 하나에 대한 피연산자인 경우 다른 피연산자가 비어 있지 않은 값이면 빈 셀 값이 0으로 처리됩니다. 두 피연산자 모두 빈 경우 숫자 연산자는 빈 셀 값을 반환합니다.
빈 셀 값이 문자열 연결 연산자(+)의 피연산자인 경우 다른 피연산자가 비어 있지 않은 값이면 빈 셀 값이 빈 문자열로 처리됩니다. 두 피연산자 모두 빈 경우 문자열 연결 연산자는 빈 셀 값을 반환합니다.
빈 셀 값이 비교 연산자 중 하나에 대한 피연산자(=. <>=>, =, <>, , ) <인 경우 다른 피연산자의 데이터 형식이 각각 숫자인지 문자열인지에 따라 빈 셀 값이 0 또는 빈 문자열로 처리됩니다. 두 피연산자 모두 빈 경우 두 피연산자 모두 0으로 취급합니다.
숫자 값을 정렬할 때는 빈 셀 값이 0과 동일한 위치에서 정렬됩니다. 빈 셀 값과 0 사이의 빈 데이터 정렬은 0보다 앞입니다.
문자열 값을 정렬할 때는 빈 셀 값이 빈 문자열과 동일한 위치에서 정렬됩니다. 빈 셀 값과 빈 문자열 사이에 빈 문자열 앞에 빈 데이터 정렬이 표시됩니다.
MDX 문과 큐브에서의 빈 값 처리
MDX(다차원 식) 문에서 빈 값을 찾은 다음 유효한(즉, 비어 있지 않음) 데이터가 있는 셀에 대해 특정 계산을 수행할 수 있습니다. 계산을 수행할 때 빈 값을 제거하는 것이 중요할 수 있습니다. 빈 셀 값이 포함된 경우 평균과 같은 특정 계산이 정확하지 않을 수 있기 때문입니다.
빈 값이 기본 팩트 테이블 데이터에 저장되어 있는 경우 이러한 값은 기본적으로 큐브가 처리될 때 0으로 변환됩니다. 측정값에서 Null 처리 옵션을 사용하여 null 팩트를 0으로 변환하거나, 빈 값으로 변환하거나, 처리 중에 오류를 throw하는지 여부를 제어할 수 있습니다. 쿼리 결과에 빈 셀 값이 표시되지 않도록 하려면 빈 값을 제거하거나 다른 값으로 바꾸는 쿼리, 계산 멤버 또는 MDX 스크립트 문을 만들어야 합니다.
쿼리에서 빈 행 또는 열을 제거하려면 축 집합 정의 앞에 NON EMPTY 문을 사용합니다. 예를 들어 다음 쿼리는 2001년에 판매된 유일한 범주이므로 Product Category Bikes만 반환합니다.
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])
더 일반적으로 집합에서 빈 튜플을 제거하려면 NonEmpty 함수를 사용합니다. 다음 쿼리는 두 개의 계산 측정값을 보여 줍니다. 그 중 하나는 제품 범주 수를 계산하고 두 번째 측정값은 [인터넷 세금 금액] 및 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]
자세한 내용은 NONEmpty(MDX)를 참조하세요.
빈 값 및 비교 연산자
데이터에 빈 값이 있는 경우 논리 및 비교 연산자는 TRUE 또는 FALSE 대신 EMPTY의 세 번째 결과를 반환할 수 있습니다. 이와 같이 세 가지 결과를 가져오는 논리는 대부분 애플리케이션에서 오류의 원인이 됩니다. 이러한 표에서는 빈 값 비교를 도입하는 효과를 간략하게 설명합니다.
이 표에서는 두 부울 피연산자에 AND 연산자를 적용한 결과를 보여 줍니다.
AND | TRUE | EMPTY | FALSE |
---|---|---|---|
TRUE | TRUE | FALSE | FALSE |
빈 | FALSE | EMPTY | FALSE |
FALSE | 거짓 | 거짓 | FALSE |
이 표에서는 두 부울 피연산자에 OR 연산자를 적용한 결과를 보여 줍니다.
또는 | TRUE | 거짓 |
---|---|---|
TRUE | TRUE | TRUE |
빈 | TRUE | TRUE |
FALSE | TRUE | FALSE |
이 테이블에서는 NOT 연산자가 부정하거나 반대로 바꾼 부울 연산자의 결과를 보여 줍니다.
NOT 연산자가 적용되는 부울 식 | 결과 |
---|---|
TRUE | FALSE |
EMPTY | EMPTY |
FALSE | TRUE |