Вы должны понять, как работает непустая. Например, я хочу увидеть InternetSalesAmount для 2011, рассмотрим запрос ниже
select [Measures].[Internet Sales Amount] on 0 ,
[Product].[Category].[Category]
on 1
from
[Adventure Works]
where
[Date].[Calendar Year].&[2011]
Результат:
![enter image description here](https://i.stack.imgur.com/EsGxo.jpg)
Теперь запрос возвращает все товары, которые были проданы или не проданы в 2011 году. Для проданных товаров возвращается сумма продаж. Однако остальные три продукта были возвращены в результате декартового произведения между 2011 и продуктом (MDX, где поведение отличается от SQL, где). Теперь я хочу видеть только продукты, которые были проданы в 2011 году.
select [Measures].[Internet Sales Amount] on 0 ,
nonempty(
[Product].[Category].[Category],
[Measures].[Internet Sales Amount]) on 1
from
[Adventure Works]
where
[Date].[Calendar Year].&[2011]
Результат
![enter image description here](https://i.stack.imgur.com/A2OeP.jpg)
Для этой цели я могу использовать ключевые слова {непустые} или {непустые}, чтобы указывать MDX только для извлечения тех комбинаций, которые имеют действительную запись в таблице фактов. Поскольку таблица фактов не имеет строки для 2011 года, в которой есть остальные три продукта, она не будет их возвращать.