Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Пустое значение указывает, что конкретный элемент, кортеж или ячейка пусты. Пустое значение ячейки указывает либо на то, что данные для указанной ячейки нельзя найти в базовой таблице фактов, либо что кортеж для указанной ячейки представляет собой комбинацию элементов, неприменимую для куба.
Замечание
Хотя пустое значение отличается от значения нуля, пустое значение обычно рассматривается как ноль.
Следующий запрос иллюстрирует поведение пустых и нулевых значений:
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 не может определить, возвращает ли выражение элемента нулевое значение. Чтобы определить, возвращается ли нулевой элемент из выражения, используйте оператор IS .
Когда значение пустой ячейки является операндом для любого из числовых операторов (+, -, *, /), значение пустой ячейки считается равным нулю, если другой операнд является непустым значением. Если оба операнда пусты, числовой оператор возвращает пустое значение ячейки.
Когда значение пустой ячейки является операндом оператора конкатенации строк (+), значение пустой ячейки рассматривается как пустая строка, если другой операнд является непустым значением. Если оба операнда пусты, оператор конкатенации строк возвращает пустое значение ячейки.
Когда значение пустой ячейки является операндом для любого из операторов сравнения (=. <>, >=, <=, >, <), значение пустой ячейки рассматривается как ноль или пустая строка, в зависимости от того, является ли тип данных другого операнда числовым или строковым соответственно. Если оба операнда пусты, оба операнда считаются равными нулю.
При сверке числовых значений пустое значение ячейки складывается в том же месте, что и ноль. Между значением пустой ячейки и нулём пустой ячейки складывается перед нулём.
При сверке значений строк значение пустой ячейки складывается в том же месте, что и пустая строка. Между значением пустой ячейки и пустой строкой слагается пустая строка перед пустой строкой.
Работа с пустыми значениями в операторах MDX и кубах
В операторах многомерных выражений (MDX) можно искать пустые значения и затем выполнять определённые вычисления на ячейках с действительными (то есть не пустыми) данными. Исключение пустых значений при выполнении вычислений может быть важно, поскольку некоторые вычисления, такие как среднее, могут быть неточными, если включать пустые значения ячеек.
Если пустые значения хранятся в базовой таблице фактов, по умолчанию они будут преобразованы в нули при обработке куба. Вы можете использовать опцию Null Processing на мере, чтобы контролировать, преобразуются ли null-факты в 0, преобразуют ли в пустое значение или даже выдают ли ошибки во время обработки. Если вы не хотите, чтобы в результатах запроса появлялись пустые значения ячеек, следует создавать запросы, вычисляемые члены или MDX Script-операторы, которые устраняют пустые значения или заменяют их каким-либо другим.
Чтобы удалить пустые строки или столбцы из запроса, можно использовать оператор NON EMPTY перед определением набора осей. Например, следующий запрос возвращает только велосипеды категории товаров, потому что это единственная категория, продававшаяся в календарном 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. Следующий запрос показывает две рассчитанные показатели, одна из которых учитывает количество категорий товаров, а вторая — количество категорий товаров, имеющих значения для меры [сумма интернет-налога] и календарного года 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).
Пустые значения и операторы сравнения
Когда в данных присутствуют пустые значения, логические и сравнительные операторы могут потенциально вернуть третий результат ПУСТОГО вместо просто ИСТИННОГО или ЛОЖНОГО. Эта тройственная логика является источником многих проблем в приложениях. Эти таблицы описывают эффект введения сравнений пустых значений.
В этой таблице показаны результаты применения оператора AND к двум булевым операндам.
| AND | TRUE | ПУСТО | FALSE |
|---|---|---|---|
| ИСТИННЫЙ | TRUE | FALSE | FALSE |
| ПУСТО | FALSE | ПУСТО | FALSE |
| ЛОЖНЫЙ | FALSE | FALSE | FALSE |
В этой таблице показаны результаты применения оператора OR к двум булевым операндам.
| OR | TRUE | FALSE |
|---|---|---|
| ИСТИННЫЙ | TRUE | TRUE |
| ПУСТО | TRUE | TRUE |
| ЛОЖНЫЙ | TRUE | FALSE |
В этой таблице показано, как оператор NOT отрицает или отменяет результат булевого оператора.
| Булевое выражение, к которому применяется оператор NOT | Результат |
|---|---|
| TRUE | FALSE |
| ПУСТО | ПУСТО |
| FALSE | TRUE |