Пустые значения

Пустое значение показывает, что элемент, кортеж или ячейка пуста. Пустое значение ячейки показывает либо то, что данные для указанной ячейки не удалось обнаружить в базовой таблице фактов, либо то, что кортеж для заданной ячейки представляет сочетание элементов, неприменимое для куба.

Примечание.

Хотя пустое значение отличается от нулевого значения, в большинстве случаев оно интерпретируется как ноль.

Следующий запрос иллюстрирует поведение пустых и нулевых значений:

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. Чтобы определить, возвращается ли пустой член из выражения, используйте оператор IS .

  • Если пустое значение ячейки становится операндом для любого числового оператора (+, -, *, /), то оно интерпретируется как ноль, если другой операнд представляет собой непустое значение. Если оба операнда пусты, числовой оператор возвращает пустое значение ячейки.

  • Если пустое значение ячейки является операндом для оператора объединения строк (+), то оно интерпретируется как пустая строка, если другой операнд представляет собой непустое значение. Если оба операнда пусты, оператор объединения строк возвращает пустое значение ячейки.

  • Если пустое значение ячейки является операндом для любого из операторов сравнения (=, <>>=, =, <=, >, ), <пустое значение ячейки обрабатывается как нулевая или пустая строка, в зависимости от того, является ли тип данных другого операнда числовым или строковым соответственно. Если оба операнда пусты, то они оба интерпретируются как ноль.

  • При сопоставлении с числовыми значениями пустые значения ячеек следуют в той же позиции, что и нули. При сопоставлении пустых и нулевых значений ячеек пустое значение следует перед нулем.

  • При сопоставлении со строковыми значениями пустые значения ячеек следуют в той же позиции, что и пустые строки. При сопоставлении пустых значений ячеек и пустых строк пустое значение следует перед пустой строкой.

Пустые значения в инструкциях и кубах многомерных выражений

В инструкциях многомерных выражений можно находить пустые значения и затем выполнять определенные вычисления над ячейками с допустимыми данными (то есть не пустыми). Исключение пустых значений из расчетов важно, поскольку определенные вычисления (например поиск среднего) могут быть неточными при учете пустых значений ячеек.

Если пустые значения хранятся среди данных основной таблицы фактов, по умолчанию они будут преобразованы в нули при обработке куба. Параметр "Обработка null" можно использовать для меры, чтобы контролировать, преобразуются ли факты NULL в 0, преобразуются в пустое значение или даже вызывают ошибку во время обработки. Если пустые ячейки не должны отображаться в результатах запроса, следует создавать запросы, вычисляемые элементы или инструкции скриптов многомерных выражений, которые исключают пустые значения или заменяют их другим значением.

Для удаления пустых строк или столбцов из запроса можно использовать инструкцию NON EMPTY перед определением набора осей. Например, следующий запрос возвращает только категорию продуктов Bikes, так как это единственная категория товаров, которая была в продаже в календарном году 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])

В более общем случае для удаления пустых кортежей из набора можно использовать функцию NonEmpty. Следующий запрос показывает две вычисляемые меры, первая из которых показывает количество категорий продуктов, а вторая — количество категорий продуктов со значениями для меры [Internet Tax Amount] и календарного года 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 (многомерные выражения).

Пустые значения и операторы сравнения

Когда в данных содержатся пустые значения, логические операторы и операторы сравнения могут потенциально возвращать третий результат EMPTY вместо значений TRUE и FALSE. Эта тройственная логика является источником многих проблем в приложениях. В таблицах ниже содержатся сведения о результатах сравнений пустых значений.

В следующей таблице показаны результаты выполнения оператора AND над двумя логическими операндами.

И TRUE EMPTY FALSE
TRUE TRUE FALSE FALSE
ПУСТОЙ FALSE EMPTY FALSE
FALSE FALSE FALSE FALSE

В следующей таблице показаны результаты выполнения оператора OR над двумя логическими операндами.

ИЛИ TRUE FALSE
TRUE TRUE TRUE
ПУСТОЙ TRUE TRUE
FALSE TRUE FALSE

В следующей таблице показаны результаты отрицания (перемены знака) логического операнда оператором NOT.

Логическое выражение, над которым выполняется оператор NOT Результат
TRUE FALSE
EMPTY EMPTY
FALSE TRUE

См. также

Справочник по функции многомерных выражений (многомерные выражения)
Справочник по оператору многомерных выражений (многомерные выражения)
Выражения (многомерные выражения)