Как я могу получить нулевые значения, возвращаемые в многомерных выражениях

#ssas #mdx

#ssas #многомерные выражения

Вопрос:

У меня есть два измерения с именем T и L

Когда я запускаю это:

 SELECT
  {measures.[value]} on 0,
  {nonempty([T].[Hierarchy Items].[T1])} on 1
FROM [Cube]
WHERE 
  (
   [L].[L3].amp;[49733]
  ) 
  

Я получаю все члены T1, и применяется предложение where

Но когда я удаляю nonempty функцию

 SELECT
  {measures.[value]} on 0,
  {[T].[Hierarchy Items].[T1]} on 1
FROM [Cube]
WHERE 
  (
   [L].[L3].amp;[49733]
  ) 
  

Я получу все члены T1, и предложение where не применяется.

Есть ли какой-либо способ получить все нулевые значения, и фильтр (где) тоже применяется?

Ответ №1:

Вам нужно понимать, как работает непустой. Например, я хочу увидеть количество интернет-продаж за 2011 год, рассмотрим запрос ниже

 select [Measures].[Internet Sales Amount] on 0 ,
[Product].[Category].[Category]
on 1 
from 
[Adventure Works]
where 
[Date].[Calendar Year].amp;[2011]
  

Результат:

введите описание изображения здесь

Теперь запрос возвращает все продукты, которые были проданы или не проданы в 2011 году. Для проданных продуктов он возвращает сумму продаж. Однако остальные три продукта были возвращены в результате декартова произведения между 2011 и product (поведение многомерных выражений where отличается от SQL where). Теперь я хочу видеть только те продукты, которые были проданы в 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].amp;[2011]
  

Результат

введите описание изображения здесь

Для этой цели я могу использовать ключевые слова {non empty} или {nonempty}, чтобы указать многомерным выражениям только для повторного поиска тех комбинаций, которые имеют допустимую запись в таблице фактов. Поскольку в таблице фактов нет строки для 2011, в которой есть другие три продукта, поэтому она их не вернет.

Комментарии:

1. Спасибо за ваш ответ, но могу ли я в любом случае получить все члены T1, которые имеют значение L3 = 49733, независимо от того, является ли оно нулевым или нет?

2. @sqluser в вашей таблице фактов у вас нет строки, для которой L3 = 49733 и [T] . [Элементы иерархии]. [T1] и значение не равно null() . Таким образом, вы не получите результата. Запустите следующий запрос (после настройки в соответствии с окружением) выберите * из yourFact где L3 = 49733 и HierarchyItem=T1, дайте мне знать, возвращает ли он что-либо (если это так, есть обходной путь)

Ответ №2:

Может быть, что-то вроде этого:

 WITH
SET S AS
EXISTS( 
  [T].[Hierarchy Items].[T1].members,
  { [L].[L3].amp;[49733] },
  "MeasureGroupName"
)
SELECT
  {measures.[value]} on 0,
  S on 1
FROM [Cube];
  

Комментарии:

1. Спасибо за ответ, но он возвращает все.

2. @sqluser попробуйте добавить третий аргумент группы мер в функцию EXISTS