Как я могу получить значения NULL, возвращенные в MDX - PullRequest
1 голос
/ 09 апреля 2019

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

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

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Вы должны понять, как работает непустая. Например, я хочу увидеть 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

Теперь запрос возвращает все товары, которые были проданы или не проданы в 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

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

0 голосов
/ 11 апреля 2019

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

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